#!/bin/bash
###########################################################################
# EOLE - 2010-2025
# Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon)
# Licence CeCill  cf /root/LicenceEole.txt
# eole@ac-dijon.fr
#
#  gen_rpt
#
#  Génère un rapport d'anomalie
#
###########################################################################

Mel="eole@ac-dijon.fr"
GPG_key="/usr/share/keyrings/eole-team-keyring.gpg"
GPG_recipient="eole@ac-dijon.fr"

function do_encrypt() {
    echo "Chiffrement de $Archive"
    gpg --no-random-seed-file --output "$Archive".gpg --auto-key-locate local --trust-model always --batch --yes --no-default-keyring --keyring "$GPG_key" --encrypt --armor -r "$GPG_recipient" "$Archive"
}

# 1 = source to copy
copyrpt() {
    if [ ! -f "$1" ] && [ ! -d "$1" ]; then
        return
    fi
    echo "$1"
    BASEDIR=$(dirname "$1")
    /bin/mkdir -p "$RepRpt/$BASEDIR"
    /bin/cp -rf "$1" "$RepRpt/$BASEDIR"
}

cmdrpt() {
    echo "commande = $1"
    BASEDIR=$(dirname "$RepRpt/$2")
    /bin/mkdir -p "$BASEDIR"
    eval "$1" >> "$RepRpt/$2" 2>&1
}

clear
EOLEIHM="/usr/lib/eole/ihm.sh"
if [ ! -e $EOLEIHM ]; then
    echo "Fichier $EOLEIHM est introuvable"
    exit 1
fi
. $EOLEIHM

EOLEUTILS="/usr/lib/eole/utils.sh"
if [ ! -e $EOLEUTILS ]; then
    EchoRouge "Fichier $EOLEUTILS est introuvable"
    exit 1
fi
. $EOLEUTILS

RELEASE="/etc/eole/release"
if [ ! -e $RELEASE ]; then
    EchoRouge "Fichier $RELEASE est introuvable"
    exit 1
fi
. $RELEASE

CONFIGEOL="/etc/eole/config.eol"
if [ ! -e $CONFIGEOL ]; then
    EchoRouge "Fichier $CONFIGEOL est introuvable"
    EchoRouge "Instanciez votre serveur"
    exit 1
fi

only_root

EchoBleu "== GENERATION RAPPORT ======================"

RepRpt="/tmp/GenRpt"
rm -fr $RepRpt 2> /dev/null
mkdir $RepRpt

echo
copyrpt $CONFIGEOL
copyrpt /usr/share/eole/creole/dicos
copyrpt /usr/share/eole/creole/patch
copyrpt /etc/network/interfaces
copyrpt /etc/resolv.conf
copyrpt /etc/systemd/resolved.conf
copyrpt /etc/netplan/01-netcfg.yaml
copyrpt /etc/systemd/network
copyrpt /var/www/ead/extraction/tmp/rapport.txt
copyrpt /var/log/apt/term.log
copyrpt /var/log/creoled.log
copyrpt /var/log/eole-ci-tests.log
copyrpt /var/log/EoleCiTestsContext.log
copyrpt /var/log/EoleCiTestsDaemon.log
copyrpt /var/log/isolation.log
copyrpt /var/log/ltsp_build_client.log
copyrpt /var/log/reconfigure.log
copyrpt /var/log/samba/create_addc.log
copyrpt /var/log/upgrade-auto.log
copyrpt /var/log/controle-vnc/main.log
copyrpt /var/lib/eole/reports
copyrpt /usr/share/zephir/monitor/stats
copyrpt /var/log/hapy-deploy
copyrpt /root/gen_rpt

# Upgrade-Auto
for f in /tmp/Upgrade-Auto*
do
    copyrpt "$f"
done

# Conteneurs
LIST_CONTENEUR="$(lxc-ls 2>/dev/null)"
for conteneur in $LIST_CONTENEUR
do
    copyrpt "/var/log/lxc/${conteneur}.log"
    copyrpt "/var/lib/lxc/${conteneur}/rootfs/etc/network/interfaces"
    copyrpt "/var/lib/lxc/${conteneur}/rootfs/var/log/apt/term.log"
    copyrpt "/var/lib/lxc/${conteneur}/rootfs/var/log/ltsp_build_client-fat_amd64.log"
done


echo
# Systemd
if command -v systemd-analyze >/dev/null 2>&1
then
    cmdrpt "(LANG=C systemd-analyze critical-chain --fuzz 1h  | grep -ve '-\.\.\.' )" system/journald/systemd-critical-chain.log
    cmdrpt "systemd-analyze blame" system/journald/systemd-blame.log
    cmdrpt "journalctl --no-pager -xe --since '7 days ago'" system/journald/systemd-journalctl-xe.log
    cmdrpt "systemctl list-timers --all" system/journald/systemd-listtimers.log
    cmdrpt "systemd-analyze dot" system/journald/systemd-analyze.dot

    if command -v dot >/dev/null 2>&1
    then
        cmdrpt "dot -Tsvg '${RepRpt}/system/journald/systemd-analyze.dot'" system/journald/systemd-analyze-dot.svg
    fi
    cmdrpt "systemd-analyze plot" system/journald/systemd-analyze-plot.svg
    cmdrpt "(LANG=C systemd-analyze critical-chain --fuzz 1h  | grep -ve '-\.\.\.' )" system/journald/systemd-critical-chain.log
fi

cmdrpt "pstree" system/pstree/pstree.txt
cmdrpt "lshw" system/lshw/lshw.txt
cmdrpt "lsusb" system/lsusb/lsusb.txt
cmdrpt "lspci" system/lspci/lspci.txt
cmdrpt "iptables -nvL" system/iptables/iptables.txt
cmdrpt "iptables -nvL -t nat" system/iptables/iptables.txt
cmdrpt "grep -v '^#' /root/.bash_history" system/history/history.txt
cmdrpt "dpkg-query -W" system/packages/packages.txt
cmdrpt "dmesg" system/dmesg/dmesg.txt

# spécifique Amon
if [ -f '/usr/share/eole/test-rvp' ];then
    cmdrpt "/usr/sbin/ipsec status" system/ipsec/ipsec.status 2>&1
fi

# Rapport debsums
if [ -x '/usr/share/eole/debsums/show-reports.py' ]; then
    cmdrpt "/usr/share/eole/debsums/show-reports.py" system/debsums/debsums.txt
fi

cmdrpt "/usr/bin/diagnose -LT" system/diagnose/diagnose.txt

echo
Archive=${EOLE_MODULE}".tar.gz"
echo "Création de l'archive locale $Archive"
rm -f "$Archive".gpg "$Archive"
tar -C /tmp -czf "$Archive" GenRpt

echo
Question_ouinon "Envoyer l'archive par email ?"
if [ $? -eq 1 ];then
    do_encrypt
    exit 0
fi

echo "Destinataire du message : "
echo -n "[$Mel] : "
read mail
if [ "$mail" == "" ];then
    mail=$Mel
fi
echo -n "Commentaire : "
read comment

if [ "$mail" = "$Mel" ]; then
    do_encrypt
else
    Question_ouinon "Chiffrer le rapport (le rapport ne sera lisible que par l'équipe EOLE) ?"
    if [ $? -eq 0 ];then
        do_encrypt
    fi
fi

if [ -f "$Archive".gpg ]; then
    attachment="$Archive".gpg
else
    attachment="$Archive"
fi
echo "$comment" | mutt -a "$attachment" -s "Rapport ${EOLE_MODULE}-${EOLE_RELEASE}" -c "$mail" -e "set copy=no"
