Lorsque nous avons à gérer (comme moi) un ensemble de serveurs Debian, il peut être chiant exigeant de les maintenir tous à jour. Cela implique de se connecter à chaque serveur individuellement, d'exécuter quelques commandes et, occasionnellement, de redémarrer le système en fonction des mises à jour appliquées. Pour automatiser ce processus, nous pouvons utiliser l'outil unattended-upgrades. Dans cet article, je vais décrire comment utiliser cet outil pour maintenir un système Debian à jour et comment le configurer pour envoyer une notification par email à la fin d'une mise à jour.
root@host:~# apt update && apt install unattended-upgrades
Selon la sensibilité de ses serveurs, nous pouvons les configurer pour redémarrer automatiquement, pour installer uniquement les mises à jour de sécurité, etc… Personnellement, je choisis d'installer toutes les mises à jour et de redémarrer le système si nécessaire.
Unattended-Upgrade::Origins-Pattern {
// Les mises à jour recommandées sont des modifications de logiciels, mais pas des mises à jour qui affecteront la sécurité de votre système. Elles tendent à corriger des bogues et des problèmes gênants.
"origin=Debian,codename=${distro_codename}-updates";
// Les mises à jour "proposed" sont des mises à jour qui attendent d'être placées dans la file d'attente des mises à jour recommandées après avoir été testées. Il se peut qu'elles ne soient jamais recommandées ou qu'elles soient remplacées par une mise à jour plus récente.
// Elles sont déconseillées dans un environnement de production
//"origin=Debian,codename=${distro_codename}-proposed-updates";
"origin=Debian,codename=${distro_codename},label=Debian";
"origin=Debian,codename=${distro_codename},label=Debian-Security";
"origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
};
[…]
// Permettre au système de redémarrer automatiquement si nécessaire
Unattended-Upgrade::Automatic-Reboot "true";
[…]
// Si le redémarrage automatique est activé et nécessaire, le redémarrage s'effectue à l'heure
// spécifiée au lieu de redémarrer immédiatement.
// Paramètre par défaut : "now"
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
// Exécuter "apt-get update" automatiquement tous les n-jours (0=désactivé)
APT::Periodic::Update-Package-Lists "1";
// Exécuter le script "unattended-upgrade"
// tous les n-jours (0=désactivé)
// Nécessite le paquet "unattended-upgrades", écrira
// log dans /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";
root@host:~# unattended-upgrade -d --dry-run
Par défaut, le téléchargement des mises à jour s'exécute deux fois par jour, à 6h et à 18h, avec des installations prévues pour 6h. Nous pouvons modifier ces paramètres en éditant deux fichiers systemd.
[Unit]
Description=Daily apt download activities
[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true
[Install]
WantedBy=timers.target
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true
[Install]
WantedBy=timers.target
root@host:~# systemctl daemon-reload && systemctl restart apt-daily-upgrade.timer && systemctl restart apt-daily.timer
Il peut être utile de recevoir des rapports par email pour s'assurer que les mises à jour sont correctement appliquées et pour savoir quand un serveur a été redémarré afin d'appliquer les dernières mises à jour. Pour cela, nous devons configurer au moins un client SMTP. Dans cet article, je montrerai comment configurer msmtp.
root@host:~# apt update && apt install msmtp
root@host:~# chmod 600 /etc/msmtprc
account STD
#Mail Server :
host mail.std.rocks
port 465
from srv1@std.rocks
#LOGIN / PASSWORD
user srv1@std.rocks
password MyWeakPassword
auth on
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck off
logfile /var/log/msmtp
account default : STD
root@host:~# ln -fs /usr/bin/msmtp /usr/sbin/sendmail
// Envoyer un courriel à cette adresse pour signaler des problèmes ou des paquets qui ont été mis à jour
Unattended-Upgrade::Mail "srv1-unattended@std.rocks";
[…]
// Remplacer la valeur "on-change" par "always" et lancer unattended-upgrade -d pour tester que le rapport par courriel fonctionne
Unattended-Upgrade::MailReport "on-change";
// Optionnel : Paramétrer le champ From dans le courriel qui sera envoyé
Unattended-Upgrade::Sender "srv1@std.rocks";
Contact :