Service de mise-à-jour 2021

Les logiciels graphiques Gnome de gestion des paquets sont trop lourds à mon goût. Et comme en ligne de commandes je répondais toujours Y …. j’ai automatisé la mise-à-jour.

Le script

Créer le fichier update-perso dans /opt et lui donner les droits d’exécution.

-rwxr-xr-x 1 root root 4127 8 févr. 22:50 update-perso

Avec le contenu:

#!/bin/bash
# pour tracer demasquer set -x
#set -x
#
# test si le fichier résultat existe sinon c'est le tout premier lancement et alors créer le fichier
if [ ! -f "/tmp/resul-opt-update-perso.txt" ];
then touch /tmp/resul-opt-update-perso.txt
fi
#
# mise à jour des listes
echo "****************************************************************" > /tmp/resul-opt-update-perso.txt
date >> /tmp/resul-opt-update-perso.txt
echo "Mise à jour des listes apt"
echo "Mise à jour des listes apt" >> /tmp/resul-opt-update-perso.txt 
apt update >> /tmp/resul-opt-update-perso.txt 2> /dev/null
echo "resultat de la commande apt update ="$? >> /tmp/resul-opt-update-perso.txt
#
# y a t il besoin de mettre à jour?
# 
if [ $? != '0' ]
then
	echo 'Tous les paquets sont à jour' >> /tmp/resul-opt-update-perso.txt
fi
if grep 'Tous les paquets sont à jour' /tmp/resul-opt-update-perso.txt
then
# rien à faire
	date >> /tmp/resul-opt-update-perso.txt
	echo 'Rien à faire'
else
# mise à jour des paquets
#        apt list --upgradable >> /tmp/resul-opt-update-perso.txt 2> /dev/null
	echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
	echo " apt full-upgrade"
	echo " Mise à jour" >> /tmp/resul-opt-update-perso.txt
	export DEBIAN_FRONTEND=noninteractive 
#	apt upgrade >> /tmp/resul-opt-update-perso.txt 2> /dev/null
#
# reference https://debian-handbook.info/browse/fr-FR/stable/sect.automatic-upgrades.html
#
	apt full-upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" >> /tmp/resul-opt-update-perso.txt 2> /dev/null
	echo "resultat de la commande apt-full-upgrade ="$? >> /tmp/resul-opt-update-perso.txt 
	echo " dpkg --audit"
	echo " dpkg --audit" >> /tmp/resul-opt-update-perso.txt
	dpkg --audit >> /tmp/resul-opt-update-perso.txt 2> /dev/null
#
# Nettoyage 
	echo " apt clean"
	echo " apt clean " >> /tmp/resul-opt-update-perso.txt
	apt-get clean >> /tmp/resul-opt-update-perso.txt 2> /dev/null
	echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
	echo " apt purge"
	echo " apt purge " >> /tmp/resul-opt-update-perso.txt
	apt-get purge --autoremove -y >> /tmp/resul-opt-update-perso.txt 2> /dev/null
	echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
# listage utilisation disque après
	echo " listage occupation du disque après nettoyage"
	echo " df -hT " >> /tmp/resul-opt-update-perso.txt
	df -h >> /tmp/resul-opt-update-perso.txt 2> /dev/null
	echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
#
fi
echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
# listage des paquets obsolètes et locaux
echo "listage des paquets obsolètes et locaux"
echo "listage des paquets obsolètes et locaux" >> /tmp/resul-opt-update-perso.txt
apt list --installed 2> /dev/null | grep /now >> /tmp/resul-opt-update-perso.txt 
echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
# vérification des services
	echo " systemctl --failed" >> /tmp/resul-opt-update-perso.txt
	systemctl --failed >> /tmp/resul-opt-update-perso.txt
echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
/usr/sbin/checkrestart >> /tmp/resul-opt-update-perso.txt 2> /dev/null
echo "****************************************************************" >> /tmp/resul-opt-update-perso.txt
date >> /tmp/resul-opt-update-perso.txt
#
# envoi du mail de résultat - pas possible de lancer thunderbird puisque la session utilisateur n'est pas ouverte
	/usr/bin/mailx -s "résul update-perso service" root@localhost < /tmp/resul-opt-update-perso.txt &> /dev/null
	echo "mail envoyé à root par /opt/update-perso"
# ne pas tuer le process avant que mailx l'ai traité
	echo "temporisation"
	sleep 2
sudo -u guy  DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus notify-send --icon=/usr/share/pixmaps/debian-logo.png ' MAJ terminée'
#fi

Le service

Créer le fichier /etc/systemd/system/maj.service

Avec le contenu:

[Unit]
Description=Mise à jour périodique
After=exim4.service
Requires=NetworkManager-wait-online.service
[Install]
WantedBy=graphical.target
[Service]
Type=oneshot
ExecStart=/opt/update-perso

Tester le service

sudo systemctl start maj.service

Si le résultat est satisfaisant,

Activer le service pour qu’il soit lancé au démarrage.

sudo systemctl enable maj.service

Vérification

Le service envoi un courrier de résultat au compte root. Il est faisable de lire le courrier avec une application comme Thunderbird. Mais ceci est une autre histoire…

Lire les courriers de l’utilisateur root avec Thunderbird

Vérification par commande
systemctl status maj.service -l -n 100 --no-pager

Le script envoi aussi la notification de fin à mon utilisateur:

Par Bidouille De Bian

Bidouilleur sur Linux Debian 10 (Buster). Débutant dans le blog sur Wordpress.