logo debian

Mise à jour de Debian Buster vers Bullseye

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:

notes maj zabbix 5.4

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/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *