Debian 11 ("Bullseye") a été releasé le 14 août 2021!
Voici des notes et références pour la mise à jour.
Contents
Sommaire des changements
Les changements importants de Bullseye sont bien documentés ici (voir aussi un survol dans https://michael-prokop.at/blog/2021/05/27/what-to-expect-from-debian-bullseye-newinbullseye/), mais on peut noter rapidement:
- les hashes de mots de passes changent à 'yescript' par défaut
- pas supporté dans buster, donc on ne peut pas facilement déployer des nouveaux hashes partout tant qu'on n'upgrade pas tous les systèmes à bullseye
- par contre, déployer des hashes SHA512 dans bullseye continuera de fonctionner
La source de packages pour bullseye security change de format! on veut bullseye-security au lieu de ce qu'on avait dans buster, buster/updates.
- bullseye contient php 7.4
- le kernel, 5.10, ne permet plus de remonter l'historique d'une console physique avec shift+page up.
- Il faut absolument utiliser screen/tmux pour avoir cette feature là
- ça n'affectera pas vos émulateurs de terminaux, seulement les tty en dehors de X (e.g. l'écran branché direct. au sous-sol dans le rack sur tanit et quand on se branche sur les serveurs au centre)
- systemd écrit maintenant les logs de journalctl sur disque par défaut.
- on voudra très probablement jeter un oeil là dessus pour désactiver l'écriture sur disque
- puppet reste à 5.5 à cause de l'état du package de jruby dans debian
- c'est vraiment dommage parce que ça veut dire qu'on va encore prendre bcoup de retard avec les trucs puppet.
- les modules vont sûrement commencer bientôt à dropper le support pour la version 5 vu qu'upstream est déjà rendu à 7 depuis un bout et la version 8 se prépare
- virtualbox n'est toujours pas disponible hors de 'unstable' vu qu'upstream (oracle) sont encore-et-toujours hostiles envers tout le monde sauf eux-mêmes
- python 2 est encore là à cause de certaines dépendances dans les packages core de debian, mais en voie de disparition
- pas de support de sécurité
il n'y a plus de symlink python pour la "version par défaut". On s'attend à utiliser le binaire python3
- svp ne plus écrire de scripts en python 2 (devrait être une réalité depuis un bout de temps déjà)
- rsnapshot n'est plus là (encore dans 'unstable')
- upstream a apparemment déclaré ne plus vouloir maintenir le logiciel alors c'est effectivement un projet qui est mort
- redmine n'est pas dans bullseye
- une nouvelle version sera dans backports dès que possible
la version de rdiff-backup dans bullseye utilise un nouveau protocole d'échange de données qui n'est pas compatible avec les versions avant bullseye
dans buster, on peut installer la version dans buster-backports pour permettre d'interagir avec un système bullseye
Le manuel de mise à jour inclus également les enjeux majeurs de mise à jour.
Upgrade process
Depuis les mises à jour à Lenny, des procédures détaillées sont maintenus par Koumbit, en parallèle avec la documentation officielle. La procédure de BusterUpgrade a servi de base à celle de Bullseye ici.
Notez aussi que notre documentation vise principalement les serveurs. Par exemple, nous suivons la procédure de temps mort minimal. La procédure devrait tout de même pouvoir être utilisée pour les desktops.
Attention: Selon l'aide Debian pour la mise à niveau, quelques changements à l'affichage peuvent survenir:
Si vous utilisez le système depuis la console locale, il est possible qu'à certains moments de la mise à niveau la console passe à une vue différente, et que la mise à niveau du système ne soit plus observable. Cela peut par exemple être le cas pour les systèmes qui ont une interface graphique, quand le gestionnaire de session est relancé. Pour revenir à la console traitant le processus de mise à niveau, utilisez les touches Ctrl+Alt+F1 (si vous avez une interface de connexion graphique) ou Alt+F1 (si vous avez une console texte locale) pour revenir au terminal virtuel 1. Remplacez F1 avec la touche Fx où x correspond au numéro du terminal sur lequel se déroule la mise à niveau. Vous pouvez aussi utiliser Alt+flèche gauche ou Alt+flèche droite pour passer d'un terminal en mode texte à un autre.
Pour éviter les problèmes que ça peut causer, il est donc important d'utiliser tmux (ou screen) durant le processus d'upgrade.
Normalement, dans les premiers cycles de mise à jour, on documente surtout les problèmes avec les différents packages ensuite, on revoit la procédure de mise à jour pour de l'optimisation.
Pre-upgrade
For office machines, jump over points in the following list that are about backups and monitoring.
Take a look at this page's Problèmes rencontrés section to spot which applications will possibly have issues with the upgrade.
- inform users
- Vérifier l'espace disque!! Bullseye prend plus de place que Buster!
- check to make sure the backup job will not start while the upgrade takes place!
grep when /etc/backupninja.conf
- check backups on backup server. If the client's backups aren't on our server, make sure we have access to it so we can retrieve it if needed.
- check the motd: some important information might be documented there
(Si c'est une node Ganeti)
Pour simplifier l'upgrade, on recommande fortement de mettre à jour ganeti avant de commencer la mise à jour de l'OS. On utilise généralement les packages buster-backports pour avoir la version de buster avant de passer l'OS à cette version là
Important: pour les nodes Ganeti, voir GanetiConfiguration#Mise_.2BAOA_jour
Attention: pour l'upgrade à bullseye il faut absolument retirer les packages de ganeti 2.16 avant de faire l'upgrade d'OS. voir la commande dans la documentation de mise à jour de ganeti.
- Put servers in maintenance in Icinga.
(If the server is a physical machine)
make sure it doesn't host netboot0 (in case a problem happens, you wouldn't be able to netboot). If it does host netboot, move netboot0 on another node (see GanetiMaintenance#Changer_une_instance_de_node)
- connectez-vous à sa console série pour être pret dans un cas de problème
Important: vérifiez que les mots de passe de crypto qu'on a dans le password manager fonctionnent. Voir: LuksMaintenance#Tester_si_on_a_le_bon_mot_de_passe_pour_une_des_clefs_actives
(If for some reason you cannot use bolt to automate the upgrade process), you'll have to jump over to #Proc.2BAOk-dure_d.27upgrade_manuelle_.28utiliser_seulement_si_vous_n.27utilisez_pas_bolt.29
- assurez-vous d'avoir en main le mot de passe root, au cas où vous tomberiez dans le shell d'urgence
- Run the task to prepare the machine for the upgrade process:
bolt task run --no-verbose --stream --run-as root --sudo-password-prompt k::debian_upgrade \ --targets foo.koumbit.net stage=prep
Note: Si le serveur n'est pas dans puppet, on peut utiliser la tâche bolt quand même, après avoir comment out les lignes qui servent à rouler puppet
Upgrading the packages
Launch the automated package upgrade procedure with the bolt task:
bolt task run --no-verbose --stream --run-as root --sudo-password-prompt k::debian_upgrade \ --targets foo.koumbit.net stage=packages
Once this is done, if all went well, proceed to next section!
If however there was an error in the upgrade process, you'll need to fix the situation by ssh'ing in and figuring things out with apt install -f and other such tools.
Re-enable and run puppet!
- verify that puppet doesn't break anything:
(puppet agent --enable; puppet agent -t --noop --no-report; puppet agent --disable "verifications post-upgrade to bullseye") 2>&1 | less -SR
- Re-enable puppet if everything seems ok:
puppet agent --enable && puppet agent -t
Things to do after the upgrade
Install the package koumbit-scripts if it's not already there:
apt-get install koumbit-scripts-vps
If sources are missing, add it (see debian.koumbit.net) (you might need to add the sources to sources.list and not source.list)
check the updates on configuration files, by looking for .dpkg-* or .ucf-* files in /etc, or by using the clean_conflicts script in koumbit-scripts 1.7:
/opt/bin/clean_conflicts
Run puppet, to re-apply any configuration that we may need. Especially if chantges are made to grub!
puppet agent -t
On all but xen domU servers, rerun grub and make sure the right drives are configured for a reboot (e.g.: both sda and sdb).
dpkg-reconfigure grub-pc
Machines that run with grub in EFI mode will probably not have grub-pc installed. The equivalent command would be dpkg-reconfigure grub-efi-amd64 except it won't show a list of disks to install to since grub is installed to the EFI.
- Suivre tout les autres procédures applicables (voir la section plus bas)
- Minimize the list of packages that were marked as manually installed. This might let apt decide at some point that some packages are not needed anymore.
apt-mark minimize-manual
Remove obsolete packages
apt autoremove --purge
- Redémarrer le système et surveiller la console pour voir si des problèmes se présentent (e.g. lags, erreurs, fsck, p-e l'output de console ne fonctionne plus).
Si vous travaillez sur une machine physique il est très important de vérifier que vous avez le bon mot de passe pour la crypto des disques avant de lancer le reboot! Voir: PratiquesReboots#V.2BAOk-rifier_le_mot_de_passe_de_crypto
reboot
Si on n'arrive plus à booter, voir PratiquesRécupérationServeur
- Cleanup packages that are not in any current apt sources.
- First have a look at the list of packages to be removed.
# list all packages not in any installed sources. aptitude search '?narrow(?not(?archive("^[^n][^o].*$")),?version(CURRENT))'
First look at the list to see if anything needs to be kept around (like Facter). If so, remove other packages manually (e.g. apt purge xyz) from that list.
If (only if) everything can be removed, you can do so with one command:
# uninstall anything that shouldn't be kept around. aptitude purge '?narrow(?not(?archive("^[^n][^o].*$")),?version(CURRENT))'
Run puppet again
puppet agent -t
- Empty apt cache
apt clean
Bien sûr, vérifier que les services offerts par la machine fonctionnent toujours. Tester les vrais services (e.g. accéder à une page web, faire un appel -- accéder à ce que chaque service est supposé offrir), et aussi vérifier l'état dans icinga.
- Vérfier qu'il y a assez d'espace restant pour que les backups aient lieux.
Si les backups utilisent rdiff-backup, migrer à borg (voir plus bas)
Retirer incron qui provoque un problème avec alternC. On peut vérifier que les processus ne s'accumulent pas avec ps faux | grep incron | wc -l (voir rm#31784). Pour retirer incron rm /etc/incron.d/alternc_*
Vérifier les stats du serveur sur http://stats0.koumbit.net/
- Enlever le downtime dans icinga.
Vérifier dans la file roots@rt.k.n si la file est spammé par des erreurs suite à votre mise à jour!
update the wiki documentation to reflect the new release; you're now done!
Autres procédures
Finir upgrade Postgresql 11 -> 13
Cette procédure est un copier-coller de celle dans BusterUpgrade avec les numéros de versions modifiés. Il faut tester si elle fonctionne bien pour l'upgrade à la version 13.
Faire celà pour enlever l'ancien cluster.
Lister les clusters postgres:
pg_lsclusters # normalement 11 est démarré, et 13 est "down"
Backup
sudo -u postgres pg_dumpall > /tmp/pg11.backup
Arrêt pgsql:
service postgresql stop
Upgrade cluster
pg_upgradecluster -m upgrade 11 main
Start mysql:
service postgresql start
List clusters
pg_lsclusters # Normalement 11 devrait maintenant être down, puis 13 up
- Tester la base de données (e.g. se connecter à la base de données, vérifier qu'une application qui l'utilise fonctionne bien)
Enlever l'ancienc cluster
sudo pg_dropcluster 11 main --stop
nginx
Dans la version de bullseye de nginx, une ancienne ligne de configuration est maintenant dépréciée et il faut la retirer:
ssl on;
On veut à la place s'assurer d'utiliser des lignes de ce genre là dans les blocs server:
listen 443 ssl;
Passage de rdiff-backup à borg
rdiff-backup n'est plus disponible dans Buster alors il faut passer à borg. Rdiff est de retour dans Bullseye, cependant on souhaite passer à Borg:
Convertir les options profile::backupninja::default_rdiff_opts à profile::backupninja::default_borg_opts
Rouler ninjahelper sur la machine
Choisir /etc/backup.d/90_default-borg-backup.borg
Faire un premier test run
Puis soit rouler un vrai run sinon attendre que ça se fasse au courant de la soirée
- Dans tous les cas, vérifier sur le serveur de backup que ça s'est bien fait
- Rester alerte pour les checks icinga dans les jours à venir, le check rdiff-backup ne devrait plus être là puis des checks borg devraient prendre le relais
- Décider quoi faire avec le client des backup rdiff-backup existants (en garder une couple, tout supprimer après x jours etc)
Avoir rdiff-backup en même temps que borg sur Buster
On peut vouloir avoir les deux installés en même temps pour des serveurs qui possèdent des données importantes et pour s'assurer que les backups se font correctement. Pour ce faire :
Ajouter profile::backupninja::create_default_borg_job: true aux données hiera du serveur.
S'assurer de transformer les default_rdiff_opts en default_borg_opts
Références : 47106 et 43239 et 47350
Problèmes rencontrés
php n'est pas mis à jour automatiquement
Comme quand on arrive à buster, la nouvelle version de PHP n'est pas activée automatiquement. Donc c'est encore 7.3 qui roule jusqu'à ce qu'on active 7.4 dans apache.
If the service (php+apache) is managed by puppet usually it's enough to do:
apt install libapache2-mod-php7.4 ; puppet agent -t
Apache
Assuming it's managed properly by puppet :
apt install php7.4 libapache2-mod-php7.4
a2enmod php7.4
puppet agent -t
Following that, remove any php7.3 packages manually.
Si vous utilisez les sources sury, il est aussi possible que php8.3 ou une autre version se soit installé automatiquement et que ça cause un conflit!! Dans ce cas il faut supprimer la version en question et sa librairie (libapache2-mod-php8.x). Assurez-vous avec a2enmod phpx.x que le module apache soit bien désactivé!
AlternC
Après un reboot dans le kernel de buster, la configuration d'AlternC pour bind ne fonctionne pas avec le profile AppArmor qui est activé par défaut: bind refuse de démarrer parce qu'il ne peut pas accéder à certains fichiers référencés.
On veut ajouter des permissions dans le profile AppArmor de bind pour que le service puisse accéder aux fichiers d'alternc:
cat >> /etc/apparmor.d/local/usr.sbin.named <<EOF /var/lib/alternc/bind/** rw, /var/log/bind/** rw, /var/log/bind/ rw, EOF apparmor_parser -r /etc/apparmor.d/usr.sbin.named service bind9 restart service bind9 status # -> devrait montrer que le service est en marche
A plus long terme, ça serait bien d'investiguer si on peut faire déployer ce fichier là par le package d'alternc. Le fichier d'override est un fichier de configuration du package bind9, donc si alternc gère ce fichier comme un fichier de conf ça va créer des confilts
# dpkg -S /etc/apparmor.d/local/usr.sbin.named bind9: /etc/apparmor.d/local/usr.sbin.named
TODO: trouver comment déployer "qqch" par le package alternc pour ajouter les permissions nécessaires au profile apparmor de bind
Il faut retirer incron après qu'on aille fini.
Virtualbox
Bullseye n'a toujours pas de package pour virtualbox (sauf sid).
Relancer puppet une fois l'upgrade terminée générera donc des erreurs.
Error: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install virtualbox' returned 100: Reading package lists.. Package virtualbox is not available, but is referred to by another package. E: Package 'virtualbox' has no installation candidate Error: /Stage[main]/Profile::Desktop::Virtualization/Package[virtualbox]/ensure: change from 'absent' to 'present' failed: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install virtualbox' returned 100: Reading package lists... the following packages replace it: virtualbox-qt E: Package 'virtualbox' has no installation candidate
Il faudra mettre le profil puppet à jour pour régler ça. Voir ticket 32533
postfixadmin
Cette application n'a pas réussie à se rendre dans debian testing à temps pour pouvoir se rendre dans bullseye. La migration a été bloquée parce qu'un problème était causé à l'upgrade du package: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=926253
Si on doit utiliser ça, on doit donc l'installer via debian sid.
proftpd
Dans la version 1.3.7, le module mod_ident n'est plus built-in par défaut (voir http://www.proftpd.org/docs/RELEASE_NOTES-1.3.7a). La directive IdentLookups va donc retounrner une erreur fatale et le service ne pourra pas démarrer si le module n'est pas loadé. E.g.: fatal: unknown configuration directive 'IdentLookups'.
Si proftpd est géré par puppet, le module sera correctement ajouté par le profile. Sinon, s'assurer que le module est bien loadé (voir /etc/proftpd/modules.conf), ou simplement retirer la directive qui devient inutile si elle était settée sur Off (était On par défaut lorsque built-in).
Zfs
Voir 47085 (commentaire #17)
Aucun zpool
Assurer que zfs-dkms est installé
Loadé les modules: modprobe zfs ; lsmod | grep zfs
Chercher pour les pools: zpool import -a
Si tout est bien passé, on devrait voir les pools:
zpool list
Fail2ban: espace disque qui descend à vue d'oeil
Suite à un vieux bug, il est possible que f2b se mette à dupliquer sa DB et les cumuler, faisant rapidement fondre l'espace disque.
Vérifier /var/lib/fail2ban/, il y a probablement plusieurs exemplaires de la DB prenant beaucoup d'espace. Il faut stopper f2b, vider le dossier, et repartir le service (ce qui créera une nouvelle DB).
service fail2ban stop mkdir /root/fail2ban.bak_RM40413 mv /var/lib/fail2ban/* /root/fail2ban.bak_RM40413/ service fail2ban start
À priori, pas vraiment nécessaire de conserver tout ça, on peut flusher.
Réf.: Fail2Ban#La_base_de_donn.2BAOk-es_est_dupliqu.2BAOk-e_et_fait_.3E_500MB
Procédure d'upgrade manuelle (utiliser seulement si vous n'utilisez pas bolt)
Pre-upgrade
Follow all of the steps in #Pre-upgrade up until the bolt command
- Run (as root) in tmux and record the session
ttyrec -e tmux /var/log/upgrade-bullseye.ttyrec
- Run puppet once to see if there's any outstanding issues. If so, try to fix them.
puppet agent -t
- backup configuration:
NEXT_RELEASE=bullseye cd /etc; git tag pre-${NEXT_RELEASE} git gc --prune # make /etc smaller for backup tar cfz /var/backups/pre-${NEXT_RELEASE}-backup.tgz /etc /var/lib/dpkg /var/lib/apt/extended_states /var/lib/aptitude/pkgstates dpkg --get-selections "*" > /var/backups/dpkg-selections-pre-${NEXT_RELEASE}.txt chmod 0600 /var/backups/pre-${NEXT_RELEASE}-backup.tgz /var/backups/dpkg-selections-pre-${NEXT_RELEASE}.txt
Prepare and check system
- disable puppet, pinning and check for packages on hold or broken
puppet agent --disable "upgrading system to bullseye" # Disable puppet so it won't overwrite apt's config while we upgrade: rm /etc/apt/preferences /etc/apt/preferences.d/* # Check for pinned (on hold) packages, and possibly disable rm /etc/apt/sources.list.d/testing.list # or other similar backports or sources from later releases apt-mark showhold dpkg --audit # searches for packages that have been installed only partially on your system or that have missing, wrong or obsolete control data or files. dpkg will suggest what to do with them to get them fixed.
- Run any pending upgrade:
apt update && apt -y upgrade
En cas de warning de type --force-yes is deprecated, use one of the options starting with --allow instead, vérifier si un fichier from_puppet est présent dans /etc/apt/apt.conf.d/ avec une option APT::Get::force-yes true;
Si tel est le cas, commenter la ligne. Cela provoque un warning APT dans icinga (unhandled)
Ces configurations ne sont pas dans puppet. Il y a un billet dans redmine à ce sujet: #33642.
Preparing sources.list
Change the security source format. This is needed specifically for bullseye since the format changes for this release.
sed -i 's#\(security\.debian\.org\)/ #\1/debian-security #;s#bullseye/updates#bullseye-security#' /etc/apt/sources.list /etc/apt/sources.list.d/*
This mostly means changing buster to bullseye.
sed -i 's/buster/bullseye/g' /etc/apt/sources.list /etc/apt/sources.list.d/* rm /etc/apt/sources.list.d/buster-backports.list
Note that in some cases, additional sources are defined in /etc/apt/sources.list.d and that you should review these sources to ensure they are still relevant:
ls /etc/apt/sources.list.d
(TODO: this is now fully managed by puppet.. maybe we can drop this verification?) we want to keep the following APT repository sources:
/etc/apt/sources.list.d/aegir-stable.list /etc/apt/sources.list.d/koumbit.list
Upgrading the packages
- Update the package list and check disk space:
apt update; apt -o APT::Get::Trivial-Only=true dist-upgrade; df -h
See those tips to claim back disk space if missing
- Download packages:
apt -y -d upgrade && apt -y -d dist-upgrade
- Warn users of potential downtime, if relevant
look at the list of packages downloaded above to see if any key service may be disrupted
- preseed some answers:
debconf-set-selections <<EOF console-data console-data/keymap/policy select Don't touch keymap localepurge localepurge/use-dpkg-feature boolean true libpam-runtime libpam-runtime/override boolean false libnss-ldap libnss-ldap/override boolean false libpam-ldap libpam-ldap/override boolean false libc6 libraries/restart-without-asking boolean true EOF
- Minimal upgrade run:
Préparez-vous à possiblement rencontrer des problèmes pour les logiciels à cette étape-ci. Référez-vous à la section des problèmes connus pour les régler.
env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=mail apt upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'
On physical servers (dom0):
xen packages for i386 platform do NOT exist since Jessie. If you are upgrading a 32bit system, ignore the purge command below and pin the xen packages to keep the ones from wheezy. (TODO we might want to change this recommendation to switch to KVM because keeping wheezy around in bullseye is really, really sketcy)
Pendant le reboot ci-dessous, utiliser la console série pour aller dans le BIOS et vérifier que la redirection série est configurée à "VT-UTF8" et non "VT-100".
- Upgrade the rest of the system:
env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=mail apt dist-upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'
Finish upgrade
At this point you can merge back to the main procedure above, starting with #Re-enable_and_run_puppet.21
Références
- Upgrades suivants:
BookwormUpgrade (Debian 12)
- Upgrades précédents:
BusterUpgrade (Debian 10)
StretchUpgrade (Debian 9)
JessieUpgrade (Debian 8)
WheezyUpgrade (Debian 7)
SqueezeUpgrade (Debian 6)
LennyUpgrade (Debian 5)