Alerte email pour les mises à jour APT.
Par Seza le vendredi 21 mars 2008, 15:06 - Astuces - Lien permanent
Peut être avez-vous pris l'habitude de checker assez souvent (ou moins souvent) les mises à jour disponible sur votre serveur avec le petit couple de commande apt-get update && apt-get upgrade.
Cette opération courante et banale peut s'avérer bien souvent fastidieuse. En effet il faut se connecter en SSH, rentrer sont mot de passe, taper la fameuse commande (quelle fénéantise...) pourtant est plus que recommandé d'upgrader son serveur le plus souvent possible afin d'éviter que des failles de sécurité restent ouvertent aux pirates susceptibles de s'intéresser à vos machines.
Si vous pouvez assez facilement rester au fait des dernières mises à jour de vos serveurs préférés comme Apache, Mysql ou encore du module PHP et du kernel Linux, il est en revanche moins évident d'être au courant des dernières mises à jour de tous les outils et librairies installés sur votre machine.
Cet état de cause fait que vous pouvez devenir un accroc de la commande apt. Pour y remédier, je vous propose une petite cure.
N'ayant pas trouver de paquet adéquat (l'inexistance d'un tel paquet m'étonne fortement j'ai du mal cherché), je me suis donc décidé de faire ce petit script tout ridicul afin d'être averti par email dès qu'une mise à jour est disponible dans les sources APT.
C'est une petite libération en soit de ne plus s'imposer de se connecter en SSH toutes les semaines pour voir l'état des sources APT pour votre serveur préféré dans lequel vous avez mis tout votre amour et tendresse pour l'installé, le bichonné et le maintenir en forme.
Après la minute romantique passons au chose concrète :
Dans un lieu qui vous plaira, par exemple ici ; /usr/local/sbin
Créer un petit fichier nommé : aptUpdateNotify.sh
Insérer le contenu ci-dessous dedans :
#!/bin/bash
# l'adresse de notification des paquets à mettre à jour
# à modifier selon vos gouts
APT_MAIL_NOTIFY="hostmaster@domain.com"
# le nom de la machine
APT_MAIL_NODE_NAME=`uname -n`
# Met à jour la liste des paquets
apt-get update > /dev/null
# pousse dans un fichier temporaire
# le résultat de la commande apt-get upgrade simulée
# (aucune mise à jour réelle n'est effectuée)
apt-get upgrade -s -y -V -u -q --no-download --ignore-missing > /tmp/APT_MAIL_aptUpdateNotifier
# récupère le nombre de paquets à mettre à jour
APT_MAIL_NB_UPDATE=`cat /tmp/APT_MAIL_aptUpdateNotifier | grep "mis . jour," | cut -d " " -f 1`
APT_MAIL_TITLE="${APT_MAIL_NB_UPDATE} mise(s) à jour disponible sur ${APT_MAIL_NODE_NAME}"
# si il n'y a pas de mises à jour, nettoie et termine le programme.
if [[ $APT_MAIL_NB_UPDATE == 0 ]]; then
rm /tmp/APT_MAIL_aptUpdateNotifier
exit 0
fi
# prépare le mail à envoyer
cat > /tmp/APT_MAIL_aptUpdateNotifierMail << EOF
Bonjour,
${APT_MAIL_NB_UPDATE} paquet(s) possède(nt) une mise à jour sur la machine
${APT_MAIL_NODE_NAME}
Voici la trace "apt-get upgrade" capturée :
EOF
# ajoute la sortie apt-get upgrade au mail
cat /tmp/APT_MAIL_aptUpdateNotifier >> /tmp/APT_MAIL_aptUpdateNotifierMail
# envoie l'email
mailx -e -s "${APT_MAIL_TITLE}" ${APT_MAIL_NOTIFY} < /tmp/APT_MAIL_aptUpdateNotifierMail
# nettoie les fichiers temporaires
rm /tmp/APT_MAIL_aptUpdateNotifier
rm /tmp/APT_MAIL_aptUpdateNotifierMail
# termine le script
exit 0;
Voilà, pensez bien évidemment à rentrer votre adresse email dans le script et à lui donner des droit d'éxécution avec la commande chmod 744 aptUpdateNotify.sh.
Pour expliquez très rapidement ce qui se passe, le script simule une commande apt-get update && apt-get upgrade et vérifie si des paquets sont disponibles. Si tel est le cas un email vous sera envoyé avec la liste des paquets disponibles. Bien entendu le script ne procède pas aux mises à jour et n'installe rien. C'est à l'administrateur de faire la mises à jour ou pas.
Il ne reste plus qu'à mettre ceci en tâche CRON à la cadence qu'il vous plaira. Par exemple je fais un check tous les matin de bonne heure à 5h23.
Voici ce qu'il faut faire :
Rendez-vous dans /etc/cron.d/
Créez le fichier : aptUpdateNotify
Ajoutez la ligne suivante :
23 5 * * * root /usr/local/sbin/aptUpdateNotify.sh 2>&1 > /dev/null
Voilà c'est terminé.
J'espère que ça vous sera utile. Si bien sûr un paquet existant fait déjà la même chose n'hésiter pas à m'en avertir.
Bonne journée à tous.
PS : Une petite note tout de même: ce script est prévu pour une distibution française, si votre machine vous parle dans la langue de shakespeare ou autre il faudra modifier le petit grep (ligne 25) en conséquence...
Commentaires
Belle astuce ; j'utilise déjà un script de ce genre et j'avoue que c'est un confort pour gérer les mises à jour d'un parc serveurs.
Les mises à jour disponibles étant assez fréquente, j'en profite pour demander s'il est possible de n'être averti que pour les mises à jour de sécurité ?
Merci d'avance :)
Merci, actuellement je ne vois pas comment restreindre le script uniquement sur les mises à jour de sécurité en dehors de commenter les dépots dans le fichier /etc/apt/sources.list.
Ceci dit il existe une option -t à apt-get qui permet de sélectionner les distributions que l'on souhaite, moi je ne vois pas comment l'utiliser dans ce but. Peut être d'autre auront la solution.
Merci pour la réponse ! Je cherche toujours une solution, et si j'y parviens je repasserai par là ;)
À bientôt...
Ok, merci de me tenir au courant alors =)