--- categories: web debian upgrade bullseye title: Howto Migration Buster vers Bullseye ... Release Notes amd64 : ## Debian Bullseye ? Debian Bullseye aka Debian 11 est une version majeure de Debian bientôt publiée. Dans les changements notables de la distribution, on note : * Apache : 2.4.38 → 2.4.46 * Serveur DNS BIND : 9.11 → 9.16 * Cryptsetup : 2.1 → 2.3 * Dovecot MTA : 2.3.4 → 2.3.13 * GCC : 8.3 → 10.2 * GnuPG : 2.2.12 → 2.2.20 * Bibliothèque C GNU : 2.28 → 2.31 * Image du noyau Linux : Série 4.19 → Série 5.10 * MariaDB : 10.3 → 10.5 * Nginx : 1.14 → 1.18 * OpenJDK : 11 → 11 * OpenSSH : 7.9p1 → 8.4p1 * Perl : 5.28 → 5.32 * PHP : 7.3 → 7.4 * Postfix MTA : 3.4 → 3.5 * PostgreSQL : 11 → 13 * Python 3 : 3.7.3 → 3.9.1 * Samba : 4.9 → 4.13 * Vim : 8.1 → 8.2 ## Actions préalables Nous conseillons quelques actions qui aideront en cas de problème. Sauvegarder localement certaines ressources (dans `/home/backup/buster` par exemple) ~~~ # cat before-upgrade.sh cd /etc git add . git commit -am "Commit balai avant upgrade en Bullseye" mkdir -p /home/backup/buster/ cd /home/backup/buster cp -r /etc ./ mkdir -p var/lib/apt cp -r /var/lib/dpkg ./var/lib/ cp -r /var/lib/apt/extended_states ./var/lib/apt/ dpkg --get-selections "*" > ./current_packages.txt uptime > uptime.txt ps auwx > ps.out pstree -pan > pstree.out ss -tanpul > listen.out ~~~ ## Mise à jour du système Éditer les dépôts dans `/etc/apt/sources.list` et `/etc/apt/sources.list.d/*.list` pour remplacer _buster_ par _bullseye_. ~~~ # cat /etc/apt/sources.list deb http://mirror.evolix.org/debian bullseye main deb http://mirror.evolix.org/debian/ bullseye-updates main deb http://security.debian.org/debian-security bullseye-security main # cat /etc/apt/sources.list.d/evolix_public.list deb http://pub.evolix.net/ bullseye/ ~~~ ~~~ # sed -i 's/buster/bullseye/g' /etc/apt/sources.list /etc/apt/sources.list.d/*.list ~~~ Si il y a des backports... **les désactiver** car en général ils ne sont plus nécessaires ! (si vraiment ils doivent être conservés, à mettre dans _/etc/apt/preferences.d/0-backports-defaults_ et s'assurer d'un pinning correct) Puis mettre à jour le cache APT avec la commande : ~~~ # apt update ~~~ Commencer par télécharger l'ensemble des paquets qui devront être installés (afin de limiter le temps effectif d'installation). ~~~ # apt full-upgrade --download-only ~~~ *Attention, si il y a des instances LXC, il faut les stopper avant les mises à jour !* Faire ensuite une mise à niveau sans nouveaux paquets, pour appliquer les mises à jour triviales : ~~~ # apt upgrade --without-new-pkgs ~~~ Faire ensuite une mise à niveau avec nouveaux paquets mais sans désinstallations : ~~~ # apt upgrade --with-new-pkgs ~~~ **TODO: à vérifier** Attention, si MySQL/MariaDB est installé, il faut stopper les instances supplémentaires car non gérées lors de la mise à jour (et cela va casser avec *There is a MySQL server running, but we failed in our attempts to stop it*) : ~~~ # mysqld_multi stop ~~~ Ensuite, appliquer les mises à jour non triviales (nécessitant des changements de paquets dépendants, des suppressions…) afin d'avoir un œil plus précis sur ce qui sera fait, avant de valider : ~~~ # apt full-upgrade ~~~ Puis lancer le nettoyage des vieux paquets en lisant attentivement la liste… en cas de doute, réinstaller le paquet ! ~~~ # apt autoremove ~~~ Enfin, il faut redémarrer sur le nouveau noyau Linux installé : ~~~ # reboot ~~~ ## PATH / su Lorsque l'on utilise `su` cela ne change plus automatiquement le PATH. Soit il faut prendre l'habitude faire `su -`, soit il faut ajouter `ALWAYS_SET_PATH yes` dans le fichier `/etc/login.defs` (mais cela génère un message d'erreur pour un certain nombre d'applications...). Pour plus d'informations, voir `/usr/share/doc/util-linux/NEWS.Debian.gz` ou ## MariaDB **TODO: voir si des adaptations sont nécessaires** ## PHP Il faut parfois forcer le passage à PHP 7.4 : ~~~ # apt remove libapache2-mod-php7.3 && a2enmod php7.4 && /etc/init.d/apache2 restart ~~~ puis nettoyer les anciens paquets `php7.3-*` ## PHPMyAdmin phpMyAdmin a fait son retour dans les paquets Debian. Si vous l'aviez installé par les sources en Debian 10, vous pouvez le désinstaller et remettre le paquet. ## LXC et AppArmor **TODO: à vérifier, probablement toujours d'actualité** Si des conteneurs LXC sont configurés, il faut installer lxc-templates et apparmor afin d'installer des configurations nécessaire à leur fonctionnement. Et il faut mettre à jour la config de tous les conteneurs : ~~~ # lxc-update-config -c /var/lib/lxc/foo/config ~~~ ## PostgreSQL **TODO: à vérifier, adapter les versions si toujours d'actualité** Il faut migrer manuellement. ~~~ # pg_dropcluster --stop 11 main # pg_upgradecluster 9.6 main # pg_dropcluster 9.6 main ~~~ ## usrmerge Les installations fraîches de Debian Bullseye (et Buster) ont un `/usr` fusionné. Les répertoires `/{bin,sbin,lib}/` deviennent des liens symboliques vers `/usr/{bin,sbin,lib}/`. Si on veut faire la fusion il faut installer le paquet `usrmerge`. ``` # apt install usrmerge ``` ## Écosystème Ruby on Rails **TODO: à vérifier, probablement toujours d'actualité** On peut avoir des erreurs avec des gems. ~~~ bundle[3404]: LoadError: libmariadbclient.so.18: cannot open shared object file: No such file or directory - ~~~ Il faut mettre à jour si le projet utilise bundle. ~~~ $ RAILS_ENV=production bundle install --redownload ~~~ ## Squid **TODO: à vérifier, probablement obsolète** Il faut s'assurer d'avoir l'override systemd. ``` # systemctl edit squid # systemd override for Squid [Service] ExecStart= ExecStart=/usr/sbin/squid -sYC -f /etc/squid/evolinux-defaults.conf # systemctl daemon-reload # systemctl restart squid ``` ## libvirt **TODO: à vérifier, probablement toujours d'actualité** ~~~ Errors were encountered while processing: libvirt-daemon-system ~~~ Il faut stopper `virtlogd-admin.socket` puis relancer l'upgrade. ~~~ # systemctl stop virtlogd-admin.socket # apt install -f ~~~ ## Postfix Il faut assurer que `smtpd_relay_restrictions` soit présent dans `/etc/postfix/main.cf`. Si l'option n'est pas présente, ajouter : ~~~ smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination ~~~ ## ProFTPD **TODO: à vérifier, probablement obsolète** La version 1.3.6 a un bug pour lister les répertoires avec plus de 10k fichiers : https://github.com/proftpd/proftpd/issues/863 Un contournement est de désactiver le "cachefs" de ProFTPD comme suggéré ici : http://bugs.proftpd.org/show_bug.cgi?id=4360#c14 ## shelldap Pour que `shelldap` demande la saisie du mot de passe, il est nécessaire de modifier la configuration (généralement `~/.shelldap.rc`), en ajoutant la ligne suivante : ~~~ […] promptpass: 1 […] ~~~