L’équipe du projet Debian a publié le 14 août 2021 la nouvelle mouture de sa distribution, la version 11 nommée Bullseye. Je ne suis pas très en avance, et pour l’instant je n’avais mis aucune machine de mon infra à jour vers cette version (même si j’ai quand même déjà préparé un modèle de machine en version 11, je n’en ai pas déployé de nouvelle entre temps). On va donc corriger le tir, en procédant à la mise à jour de Debian Buster vers Bullseye de ma machine de supervision.
Comme je suis chaud, on en profitera pour mettre à jour zabbix que j’utilise pour ma supervision, de la branche 5.2 que j’utilise actuellement, à la branche 5.4.
C’est rigolo, je réalise qu’il y a un an pile, j’avais fait le même article, mais dans l’autre sens : j’avais procédé à une grosse montée de version de zabbix, et j’en avais profité pour monter la version de Debian sur ma machine de supervision 🙂 .
Comme la fois précédente, et comme à mon habitude, on ne va pas jouer au malin, et la procédure va se baser entièrement sur la doc de mise à jour publiée par le projet Debian.
Sauvegarde de la machine dans son état initial
Comme d’habitude, je procède à une sauvegarde complète de la machine. Pour rappel, dans mon cas c’est assez facile, c’est une machine virtuelle tournant sous Proxmox, j’en réalise une sauvegarde complète en utilisant l’outil intégré à l’hyperviseur.
Et pour avoir la ceinture et les bretelles, je créé également un snapshot de la machine juste avant de démarrer la mise à jour, pour faciliter un retour en arrière en cas de no go.
Contrôler les paquets exogènes
La procédure implique de vérifier et lister les paquets éventuellement installés ne provenant pas des dépôts officiels Debian. Ici, c’est notre cas, car j’ai installé zabbix 5.2 non pas en utilisant les dépôts officiels Debian (même si zabbix y est présent), mais en utilisant les dépôts officiels zabbix. Du coup, il peut potentiellement se passer des trucs inattendus.
On peut tenter de lister les paquets installés depuis des dépôts non officiels avec l’utilitaire apt-forktracer: il n’est pas installé dans mon système, donc je commence par ça:
# apt install apt-forktracer
Puis on le lance suivant la documentation. Je me suis permis de traiter la sortie de la commande indiquée avec apt-cache policy pour mieux repérer la source d’installation des paquets remontés comme exogènes par apt-forktracer:
root@zabbix:~# apt-forktracer | sort | cut -d " " -f 1 | while read line; do apt-cache policy $line; done cpp-6: Installé : 6.3.0-18+deb9u1 Candidat : 6.3.0-18+deb9u1 Table de version : *** 6.3.0-18+deb9u1 100 100 /var/lib/dpkg/status gcc-6: Installé : 6.3.0-18+deb9u1 Candidat : 6.3.0-18+deb9u1 Table de version : *** 6.3.0-18+deb9u1 100 100 /var/lib/dpkg/status gcc-6-base: Installé : 6.3.0-18+deb9u1 Candidat : 6.3.0-18+deb9u1 Table de version : *** 6.3.0-18+deb9u1 100 100 /var/lib/dpkg/status libasan3: Installé : 6.3.0-18+deb9u1 Candidat : 6.3.0-18+deb9u1 Table de version : *** 6.3.0-18+deb9u1 100 100 /var/lib/dpkg/status libcryptsetup4: Installé : 2:1.7.3-4 Candidat : 2:1.7.3-4 Table de version : *** 2:1.7.3-4 100 100 /var/lib/dpkg/status libdns-export162: Installé : 1:9.10.3.dfsg.P4-12.3+deb9u7 Candidat : 1:9.10.3.dfsg.P4-12.3+deb9u7 Table de version : *** 1:9.10.3.dfsg.P4-12.3+deb9u7 100 100 /var/lib/dpkg/status libgcc-6-dev: Installé : 6.3.0-18+deb9u1 Candidat : 6.3.0-18+deb9u1 Table de version : *** 6.3.0-18+deb9u1 100 100 /var/lib/dpkg/status libgdbm3: Installé : 1.8.3-14 Candidat : 1.8.3-14 Table de version : *** 1.8.3-14 100 100 /var/lib/dpkg/status libisc-export160: Installé : 1:9.10.3.dfsg.P4-12.3+deb9u7 Candidat : 1:9.10.3.dfsg.P4-12.3+deb9u7 Table de version : *** 1:9.10.3.dfsg.P4-12.3+deb9u7 100 100 /var/lib/dpkg/status libisl15: Installé : 0.18-1 Candidat : 0.18-1 Table de version : *** 0.18-1 100 100 /var/lib/dpkg/status liblogging-stdlog0: Installé : 1.0.5-2+b2 Candidat : 1.0.5-2+b2 Table de version : *** 1.0.5-2+b2 100 100 /var/lib/dpkg/status libmpfr4: Installé : 3.1.5-1 Candidat : 3.1.5-1 Table de version : *** 3.1.5-1 100 100 /var/lib/dpkg/status libprocps6: Installé : 2:3.3.12-3+deb9u1 Candidat : 2:3.3.12-3+deb9u1 Table de version : *** 2:3.3.12-3+deb9u1 100 100 /var/lib/dpkg/status libssl1.0.2: Installé : 1.0.2u-1~deb9u2 Candidat : 1.0.2u-1~deb9u2 Table de version : *** 1.0.2u-1~deb9u2 100 100 /var/lib/dpkg/status libunistring0: Installé : 0.9.6+really0.9.3-0.1 Candidat : 0.9.6+really0.9.3-0.1 Table de version : *** 0.9.6+really0.9.3-0.1 100 100 /var/lib/dpkg/status perl-modules-5.24: Installé : 5.24.1-3+deb9u7 Candidat : 5.24.1-3+deb9u7 Table de version : *** 5.24.1-3+deb9u7 100 100 /var/lib/dpkg/status zabbix-agent: Installé : 1:5.2.7-1+debian10 Candidat : 1:5.2.7-1+debian10 Table de version : *** 1:5.2.7-1+debian10 500 500 http://repo.zabbix.com/zabbix/5.2/debian buster/main amd64 Packages 100 /var/lib/dpkg/status 1:4.0.4+dfsg-1 500 500 http://deb.debian.org/debian buster/main amd64 Packages zabbix-apache-conf: Installé : 1:5.2.7-1+debian10 Candidat : 1:5.2.7-1+debian10 Table de version : *** 1:5.2.7-1+debian10 500 500 http://repo.zabbix.com/zabbix/5.2/debian buster/main amd64 Packages 100 /var/lib/dpkg/status zabbix-frontend-php: Installé : 1:5.2.7-1+debian10 Candidat : 1:5.2.7-1+debian10 Table de version : *** 1:5.2.7-1+debian10 500 500 http://repo.zabbix.com/zabbix/5.2/debian buster/main amd64 Packages 100 /var/lib/dpkg/status 1:4.0.4+dfsg-1 500 500 http://deb.debian.org/debian buster/main amd64 Packages zabbix-release: Installé : 1:5.2-1+debian10 Candidat : 1:5.2-1+debian10 Table de version : *** 1:5.2-1+debian10 500 500 http://repo.zabbix.com/zabbix/5.2/debian buster/main amd64 Packages 100 /var/lib/dpkg/status zabbix-server-mysql: Installé : 1:5.2.7-1+debian10 Candidat : 1:5.2.7-1+debian10 Table de version : *** 1:5.2.7-1+debian10 500 500 http://repo.zabbix.com/zabbix/5.2/debian buster/main amd64 Packages 100 /var/lib/dpkg/status 1:4.0.4+dfsg-1 500 500 http://deb.debian.org/debian buster/main amd64 Packages
Une belle sortie indigeste…que j’ai essayé de rendre plus lisible avec du gras (le nom du paquet concerné) et de la couleur (la source depuis laquelle il a été installé).
On remarque que seuls les paquets zabbix-agent, zabbix-apache-conf, zabbix-frontend-php, zabbix-release et zabbix-server-mysql ont été installés depuis des dépôts non Debian (ils l’ont été depuis les dépôts officiels du projet zabbix : repo.zabbix.com). Tous les autres ont été installés comme dépendances depuis les dépôts Debian.
Donc pour ces derniers, la mise à jour ne devrait pas poser de problèmes à priori. Sauf si leur mise à jour pose un problème de compatibilité de dépendances avec les paquets zabbix. C’est pour ça que la doc de mise à jour Debian recommande de supprimer les paquets ne provenant pas de Debian, quitte à les réinstaller après la mise à jour. C’est donc ce que je vais faire, après avoir noté dans un coin le nom des paquets que je viens de supprimer. Attention, je vais faire un remove, mais pas un purge, car je veux conserver les fichiers de configuration de zabbix que j’avais pas mal personnalisé.
# systemctl stop zabbix-server # apt remove zabbix-agent zabbix-apache-conf zabbix-frontend-php zabbix-release zabbix-server-mysql
Ensuite je désactive les dépôts zabbix, qui sont configurés dans le fichier /etc/apt/sources.list.d/zabbix.list :
# rm -f /etc/apt/sources.list.d/zabbix.list
S’assurer que Buster est up to date
Rien d’inhabituel:
# apt update # apt upgrade
Vérifier l’état des paquets installés
En effet, un paquet partiellement installé ou en erreur, ou bloqué peu poser des soucis lors de la mise à jour, il convient donc de régler ces éventuels problèmes avant le changement de version de Debian. Pour vérifier tout ça:
# dpkg --audit # dpkg --get-selections | grep 'hold$'
Si ces deux commandes ne retournent rien, on peut passer à la suite.
S’assurer qu’il y a assez de place pour faire la mise à jour
C’est bête, mais une saturation d’un disque peu bloquer une mise à jour; au mieux juste la bloquer, au pire, suivant à quel moment la saturation a lieu, laisser le système dans un état incohérent.
root@zabbix:~# df -h Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur udev 984M 0 984M 0% /dev tmpfs 200M 11M 190M 6% /run /dev/vda1 7,4G 2,3G 4,7G 33% / tmpfs 998M 0 998M 0% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 998M 0 998M 0% /sys/fs/cgroup /dev/vdb1 30G 20G 8,4G 71% /var/lib/mysql tmpfs 200M 0 200M 0% /run/user/0
Il y a 4,7 Go de libres sur /, ça devrait suffire.
Reconfigurer la liste des sources APT
Pour ce faire, on va éditer le fichier /etc/apt/sources.list pour changer toutes les références à Buster, et les remplacer par Bullseye, et il y a aussi une modification du chemin dans le dépôt « security » à effectuer:
# sed -i 's/buster/bullseye/g' /etc/apt/sources.list # sed -i 's/bullseye\/updates/bullseye-security/g' /etc/apt/sources.list
Récupérer la nouvelle liste des paquets
Boum, on fait un update:
# apt update
Mise à niveau
Paf, on procède maintenant à la mise à jour à proprement parler : télécharger et installer les mises à jour des paquets existants, supprimer les paquets obsolètes et télécharger et installer les éventuels nouveaux paquets nécessaires.
# apt full-upgrade
Dans mon cas, le processus de mise à jour a demandé si je souhaitais remplacer certains fichiers modifiés par la version fournie par le mainteneur du paquet (pour mariadb, sshd, exim, snmp et ldap):
Fichier de configuration « /etc/snmp/snmpd.conf » ==> Modifié (par vous ou par un script) depuis l'installation. ==> Le distributeur du paquet a fourni une version mise à jour. Que voulez-vous faire ? Vos options sont les suivantes : Y ou I : installer la version du responsable du paquet N ou O : garder votre version actuellement installée D : afficher les différences entre les versions Z : suspendre ce processus pour examiner la situation L'action par défaut garde votre version actuelle. *** snmpd.conf (Y/I/N/O/D/Z) [défaut=N] ?
J’ai répondu « N » à chaque fois, car je souhaite conserver les personnalisations effectuées dans ces fichiers de configuration. Ce n’est pas forcément la meilleure pratique; le mieux étant de comparer les deux versions des fichiers de configuration, et de reporter les personnalisations dans la nouvelle version des fichiers de configuration.
La mise à jour est terminée. Un petit redémarrage de la machine, et on va pouvoir réinstaller zabbix.
Réinstallation de zabbix
Les notes de mise à jour pour le passage de la branche 5.2 à la branche 5.4 de zabbix sont les suivantes:
Autrement dit, il n’y a aucune précaution particulière à prendre pour réaliser la mise à jour, ce qui tombe bien, je commence à fatiguer 🙂
En conséquence, on va pouvoir directement réinstaller zabbix avec la dernière version disponible, en suivant la documentation:
# wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian11_all.deb # dpkg -i zabbix-release_5.4-1+debian11_all.deb # apt update
Et je procède à l’installation du machin:
# apt update # apt install zabbix-agent zabbix-apache-conf zabbix-frontend-php zabbix-release zabbix-server-mysql
De nouveau, pendant le processus d’installation, apt trouve des fichiers de configuration exitants (je les avais conservés en faisant un remove on non pas un purge) : je réponds « N » à chaque fois, car je veux conserver mes personnalisations.
Fichier de configuration « /etc/zabbix/zabbix_server.conf » ==> Modifié (par vous ou par un script) depuis l'installation. ==> Le distributeur du paquet a fourni une version mise à jour. Que voulez-vous faire ? Vos options sont les suivantes : Y ou I : installer la version du responsable du paquet N ou O : garder votre version actuellement installée D : afficher les différences entre les versions Z : suspendre ce processus pour examiner la situation L'action par défaut garde votre version actuelle. *** zabbix_server.conf (Y/I/N/O/D/Z) [défaut=N] ?
Il convient ensuite de forcer un redémarrage du démon zabbix-server, qui va se charger de mettre à jour la base de données:
# systemctl restart zabbix-server
On peut superviser la progression de la mise à jour de la base données:
# tail -f /var/log/zabbix/zabbix_server.log 3320:20211211:094113.325 completed 71% of database upgrade 3320:20211211:094113.357 completed 72% of database upgrade 3320:20211211:094113.392 completed 73% of database upgrade 3320:20211211:094113.417 completed 74% of database upgrade 3320:20211211:094113.432 completed 75% of database upgrade 3320:20211211:094113.473 completed 76% of database upgrade 3320:20211211:094113.510 completed 77% of database upgrade 3320:20211211:094113.539 completed 78% of database upgrade 3320:20211211:094113.593 completed 79% of database upgrade 3320:20211211:094113.635 completed 80% of database upgrade 3320:20211211:094121.682 completed 81% of database upgrade 3320:20211211:094121.690 completed 82% of database upgrade 3320:20211211:094121.778 completed 83% of database upgrade 3320:20211211:094121.801 completed 84% of database upgrade 3320:20211211:094121.810 completed 85% of database upgrade 3320:20211211:094121.816 completed 86% of database upgrade 3320:20211211:094121.826 completed 87% of database upgrade 3320:20211211:094121.869 completed 88% of database upgrade 3320:20211211:094121.977 completed 89% of database upgrade 3320:20211211:094122.158 completed 90% of database upgrade 3320:20211211:094122.242 completed 91% of database upgrade 3320:20211211:094122.303 completed 92% of database upgrade 3320:20211211:094122.320 completed 93% of database upgrade 3320:20211211:094122.436 completed 94% of database upgrade 3320:20211211:094122.605 completed 95% of database upgrade 3320:20211211:094122.608 completed 96% of database upgrade 3320:20211211:094122.612 completed 97% of database upgrade 3320:20211211:094122.685 completed 98% of database upgrade 3320:20211211:094122.692 completed 99% of database upgrade 3320:20211211:094122.709 completed 100% of database upgrade 3320:20211211:094122.709 database upgrade fully completed 3320:20211211:094122.715 server #0 started [main process] 3328:20211211:094122.716 server #1 started [configuration syncer #1] 3337:20211211:094122.922 server #10 started [lld manager #1] 3333:20211211:094122.923 server #6 started [preprocessing manager #1] 3334:20211211:094122.923 server #7 started [preprocessing worker #1] 3338:20211211:094122.924 server #11 started [lld worker #1] [...]
La double mise à jour est terminée. Notons tout de même qu’avec zabbix 5.4, les screens ont disparu : ils sont remplacés par des dashboards. Si, comme moi, vous en utilisiez, ils ont été convertis automatiquement en dashboards, vous les retrouverez donc à la rubrique idoine.
o/