Debian : Activer les mises à jour automatique avec unattended-upgrades
Table des matières
Avec Debian, il est possible d'automatiser les mises à jour. Cela se fait avec l'outil unattended-upgrades.
Dans cet article, nous allons voir sa mise en place.
Dans un premier temps, on met à jour les miroirs :
Puis, on installe l'outil :
Le fichier de configuration est /etc/apt/apt.conf.d/50unattended-upgrades :
Il y a plusieurs sections dans ce fichier :
Section Unattended-Upgrade::Origins-Pattern : Cela correspond aux sources de mise à jour. Par défaut seul Debian (dépôt de base) et Debian-Security sont actifs. Si on souhaite tout mettre à jour, on peut décommenter updates et proposed-updates
Section Unattended-Upgrade::Package-Blacklist : Elle permet de blacklister des paquets de la mise à jour automatique. Il y a des exemples, je vous traduis les commentaires en anglais :
On peut être alerté par mail (pour tout ou seulement en cas d'erreur), via les lignes suivantes à décommenter (doit avoir un serveur de mail fonctionnel) :
Je déconseille de décommenter cette ligne, mais si vous voulez faire du ménage dans les noyaux, libre à vous :
On peut aussi désinstaller les dépendances inutiles (les orphelins) via ces lignes à décommenter :
En cas de mise à jour du noyau, il faut redémarrer. Si votre serveur n'est pas dans un environnement critique, vous pouvez automatiser ce reboot (à étudier en fonction du contexte). Attention, le reboot se fait sans aucune conformation :
On peut limiter la bande passante lors du téléchargement avec la ligne ci-dessous (valeur en ko/s) :
On peut activer le log sur la mise à jour auto en décommentant et en passant à true :
Il y a d'autres petites options dans ce fichier évidemment...
Après la configuration, place à l'activation. Cela se passe dans /etc/apt/apt.conf.d/20auto-upgrades.
Copier le modèle :
Puis l'éditer :
Voici quelques valeurs possibles :
On peut tester l'outil via la commande suivante (mode debug pour bien tout voir, et en simulation) :
Tous les logs se trouvent dans /var/log/unattended-upgrades.
Toutes les actions réalisées par unattended-upgrades sont journalisées dans /var/log/unattended-upgrades
Le fichier unattended-upgrades.log trace toutes ces actions :
Le fichier unattended-upgrades-dpkg.log lui affiche ce que la sortie d'apt vous aurait affichée, dont voici un extrait :
Par défaut, unattended-upgrades utilise un timer systemd pour planifier le lancement :
On voit ici que la mise à jour se déclenche tous les jours à partir de 6h dans un délai aléatoire entre 6h et 7h...
Pour forcer une heure précise, on va modifier le service en créant /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf, cela de manière automatisée avec :
On va fixer à 3h30 la mise à jour ainsi :
Et on redémarre le timer pour prendre tout cela en compte :
On a la même procédure avec apt-daily.timer pour le téléchargement des paquets :
On va fixer à 3h05 le téléchargement ainsi :
Et on redémarre pour prendre cela en compte
Introduction
Avec Debian, il est possible d'automatiser les mises à jour. Cela se fait avec l'outil unattended-upgrades.
Dans cet article, nous allons voir sa mise en place.
Installation
Dans un premier temps, on met à jour les miroirs :
Code BASH :
apt update
Puis, on installe l'outil :
Code BASH :
apt install unattended-upgrades
Configuration de l'outil
Le fichier de configuration est /etc/apt/apt.conf.d/50unattended-upgrades :
Code BASH :
vi /etc/apt/apt.conf.d/50unattended-upgrades
Il y a plusieurs sections dans ce fichier :
Section Unattended-Upgrade::Origins-Pattern : Cela correspond aux sources de mise à jour. Par défaut seul Debian (dépôt de base) et Debian-Security sont actifs. Si on souhaite tout mettre à jour, on peut décommenter updates et proposed-updates
Code TEXT :
// "origin=Debian,codename=${distro_codename}-updates"; // "origin=Debian,codename=${distro_codename}-proposed-updates"; "origin=Debian,codename=${distro_codename},label=Debian"; "origin=Debian,codename=${distro_codename},label=Debian-Security";
Section Unattended-Upgrade::Package-Blacklist : Elle permet de blacklister des paquets de la mise à jour automatique. Il y a des exemples, je vous traduis les commentaires en anglais :
Code TEXT :
// tous les paquets commençant par linux- // "linux-"; // Utiliser $ pour marquer explicitement la fin d'un paquet. Sans // the $, tous les paquets contenant "libc6" seront concernés. // "libc6$"; // "libc6-dev$"; // "libc6-i686$"; // Caractères spéciaux doivent être échappés // "libstdc\+\+6$"; // Expressions régulières de façon à ce que xen-system-amd64, xen-utils-4.1, // xenstore-utils et libxenstore3.0 soit exclus. // "(lib)?xen(store)?";
On peut être alerté par mail (pour tout ou seulement en cas d'erreur), via les lignes suivantes à décommenter (doit avoir un serveur de mail fonctionnel) :
Code BASH :
//Unattended-Upgrade::Mail ""; //Unattended-Upgrade::MailOnlyOnError "false";
Je déconseille de décommenter cette ligne, mais si vous voulez faire du ménage dans les noyaux, libre à vous :
Code BASH :
//Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
On peut aussi désinstaller les dépendances inutiles (les orphelins) via ces lignes à décommenter :
Code BASH :
//Unattended-Upgrade::Remove-New-Unused-Dependencies "true"; //Unattended-Upgrade::Remove-Unused-Dependencies "false";
En cas de mise à jour du noyau, il faut redémarrer. Si votre serveur n'est pas dans un environnement critique, vous pouvez automatiser ce reboot (à étudier en fonction du contexte). Attention, le reboot se fait sans aucune conformation :
Code BASH :
//Unattended-Upgrade::Automatic-Reboot "false"; //Unattended-Upgrade::Automatic-Reboot-Time "03:30";
On peut limiter la bande passante lors du téléchargement avec la ligne ci-dessous (valeur en ko/s) :
Code BASH :
//Acquire::http::Dl-Limit "70";
On peut activer le log sur la mise à jour auto en décommentant et en passant à true :
Code BASH :
Unattended-Upgrade::SyslogEnable "true"; // Unattended-Upgrade::SyslogFacility "daemon";
Il y a d'autres petites options dans ce fichier évidemment...
Activation de l'outil
Après la configuration, place à l'activation. Cela se passe dans /etc/apt/apt.conf.d/20auto-upgrades.
Copier le modèle :
Code BASH :
cp /usr/share/unattended-upgrades/20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades
Puis l'éditer :
Code BASH :
vi /etc/apt/apt.conf.d/20auto-upgrades
Voici quelques valeurs possibles :
Code BASH :
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::AutocleanInterval "30";
Tester la mise à jour
On peut tester l'outil via la commande suivante (mode debug pour bien tout voir, et en simulation) :
Code BASH :
unattended-upgrades --debug --dry-run
Tous les logs se trouvent dans /var/log/unattended-upgrades.
Journaux d'activité
Toutes les actions réalisées par unattended-upgrades sont journalisées dans /var/log/unattended-upgrades
Le fichier unattended-upgrades.log trace toutes ces actions :
Code TEXT :
2021-02-17 06:20:56,451 INFO Enabled logging to syslog via local7 facility 2021-02-17 06:20:56,464 INFO Initial blacklist : 2021-02-17 06:20:56,465 INFO Initial whitelist: 2021-02-17 06:20:56,465 INFO Démarrage du script de mise à niveau automatique 2021-02-17 06:20:56,465 INFO Les origines permises sont: origin=Debian,codename=buster-updates, origin=Debian,codename=buster-proposed-updates, origin=Debian,codename=buster,label=Debian, origin=Debian,codename=buster,label=Debian-Security 2021-02-17 06:21:00,246 INFO Paquets mis à niveau: base-files ca-certificates file grub-common grub-pc grub-pc-bin grub2-common iproute2 libgnutls30 libldap-2.4-2 libldap-common libmagic-mgc libmagic1 libnss-systemd libp11-kit0 libpam-systemd libsystemd0 libudev1 libzstd1 linux-image-amd64 python-apt-common python3-apt systemd systemd-sysv tzdata udev 2021-02-17 06:21:00,247 INFO Writing dpkg log to /var/log/unattended-upgrades/unattended-upgrades-dpkg.log 2021-02-17 06:22:00,655 INFO Toutes les mises à niveau ont été installées 2021-02-17 06:22:00,900 WARNING Found /var/run/reboot-required, rebooting 2021-02-17 06:22:00,907 WARNING Shutdown msg: b"Shutdown scheduled for Thu 2021-02-18 04:00:00 CET, use 'shutdown -c' to cancel."
Le fichier unattended-upgrades-dpkg.log lui affiche ce que la sortie d'apt vous aurait affichée, dont voici un extrait :
Code TEXT :
Log started: 2021-02-17 06:21:49 Préconfiguration des paquets... (Lecture de la base de données... 38903 fichiers et répertoires déjà installés.) Préparation du dépaquetage de .../grub2-common_2.02+dfsg1-20+deb10u3_amd64.deb ... Dépaquetage de grub2-common (2.02+dfsg1-20+deb10u3) sur (2.02+dfsg1-20+deb10u2) ... Préparation du dépaquetage de .../grub-pc_2.02+dfsg1-20+deb10u3_amd64.deb ... Dépaquetage de grub-pc (2.02+dfsg1-20+deb10u3) sur (2.02+dfsg1-20+deb10u2) ... Préparation du dépaquetage de .../grub-pc-bin_2.02+dfsg1-20+deb10u3_amd64.deb ... Dépaquetage de grub-pc-bin (2.02+dfsg1-20+deb10u3) sur (2.02+dfsg1-20+deb10u2) ... Préparation du dépaquetage de .../grub-common_2.02+dfsg1-20+deb10u3_amd64.deb ... Dépaquetage de grub-common (2.02+dfsg1-20+deb10u3) sur (2.02+dfsg1-20+deb10u2) ... Paramétrage de grub-common (2.02+dfsg1-20+deb10u3) ... Paramétrage de grub2-common (2.02+dfsg1-20+deb10u3) ... Paramétrage de grub-pc-bin (2.02+dfsg1-20+deb10u3) ... Paramétrage de grub-pc (2.02+dfsg1-20+deb10u3) ... Installation pour la plate-forme i386-pc. Installation terminée, sans erreur. Création du fichier de configuration GRUB… Image Linux trouvée : /boot/vmlinuz-4.19.0-14-amd64 Image mémoire initiale trouvée : /boot/initrd.img-4.19.0-14-amd64 Image Linux trouvée : /boot/vmlinuz-4.19.0-13-amd64 Image mémoire initiale trouvée : /boot/initrd.img-4.19.0-13-amd64 Image Linux trouvée : /boot/vmlinuz-4.19.0-5-amd64 Image mémoire initiale trouvée : /boot/initrd.img-4.19.0-5-amd64 fait Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ... Log ended: 2021-02-17 06:21:53 Log started: 2021-02-17 06:21:54 (Lecture de la base de données... 38903 fichiers et répertoires déjà installés.) Préparation du dépaquetage de .../libgnutls30_3.6.7-4+deb10u6_amd64.deb ... Dépaquetage de libgnutls30:amd64 (3.6.7-4+deb10u6) sur (3.6.7-4+deb10u5) ... Paramétrage de libgnutls30:amd64 (3.6.7-4+deb10u6) ... Traitement des actions différées (« triggers ») pour libc-bin (2.28-10) ... Log ended: 2021-02-17 06:21:54
Changer l'heure de planification
Par défaut, unattended-upgrades utilise un timer systemd pour planifier le lancement :
Code BASH :
systemctl cat apt-daily-upgrade.timer
Code TEXT :
# /lib/systemd/system/apt-daily-upgrade.timer [Unit] Description=Daily apt upgrade and clean activities After=apt-daily.timer [Timer] OnCalendar=*-*-* 6:00 RandomizedDelaySec=60m Persistent=true [Install] WantedBy=timers.target
On voit ici que la mise à jour se déclenche tous les jours à partir de 6h dans un délai aléatoire entre 6h et 7h...
Pour forcer une heure précise, on va modifier le service en créant /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf, cela de manière automatisée avec :
Code BASH :
systemctl edit apt-daily-upgrade.timer
On va fixer à 3h30 la mise à jour ainsi :
Code TEXT :
[Timer] OnCalendar= OnCalendar=03:30 RandomizedDelaySec=0
Et on redémarre le timer pour prendre tout cela en compte :
Code BASH :
systemctl restart apt-daily-upgrade.timer
On a la même procédure avec apt-daily.timer pour le téléchargement des paquets :
Code BASH :
systemctl cat apt-daily.timer
Code TEXT :
# /lib/systemd/system/apt-daily.timer [Unit] Description=Daily apt download activities [Timer] OnCalendar=*-*-* 6,18:00 RandomizedDelaySec=12h Persistent=true [Install] WantedBy=timers.target
Code BASH :
systemctl edit apt-daily.timer
On va fixer à 3h05 le téléchargement ainsi :
Code TEXT :
[Timer] OnCalendar= OnCalendar=03:05 RandomizedDelaySec=0
Et on redémarre pour prendre cela en compte
Code BASH :
systemctl restart apt-daily.timer