Éviter le noyau 6.1.64-1 de Debian 12.3

EDIT : Debian a sorti une version 12.4 avec un noyau corrigé le 11 décembre.

Le noyau 6.1.64-1 de Debian 12.3 a un très gros problème : il peut corrompre des données stockées sur le système de fichiers ext4 (voir le ticket Debian).

A priori, ça ne touche que les fichiers créés ou modifiés depuis la mise à jour du noyau.

Pour les personnes qui font leurs mises à jour manuellement, ça ne sera pas un souci, il suffit d’attendre le correctif avant de mettre à jour. Pour celles qui utilisent unattended-upgrades (c’est mon cas), c’est plus tendu.

Éviter le redémarrage

Quand on utilise unattended-upgrades, on peut vouloir automatiser les redémarrages. Si c’est le cas, vous aurez besoin de lancer les quelques commandes suivantes.

Désactivation dans la configuration

Vous avez de la chance, la mise à jour ne s’est pas encore faite. Vous pouvez désactiver le reboot automatique ainsi :

sed -e 's/Unattended-Upgrade::Automatic-Reboot "true";/Unattended-Upgrade::Automatic-Reboot "false";/' \
    -i /etc/apt/apt.conf.d/50unattended-upgrades

Désactivation du redémarrage programmé

Manque de chance, la mise à jour est passée et un redémarrage est prévu. Désactivez-le ainsi :

rm /var/run/reboot-required
shutdown -c

NB : pour voir si un redémarrage est prévu, utilisez cette commande :

shutdown --show

Redémarrer avec un ancien noyau

D’abord, voir l’identifiant des options avancées de GRUB :

grep "Advanced options for Debian GNU/Linux" /boot/grub/grub.cfg

Ça donne un truc comme ça :

submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {

On note gnulinux-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58 pour plus tard. Puis on regarde la liste des noyaux :

grep "with Linux.*gnulinux" /boot/grub/grub.cfg

Ce qui donne un truc comme ça :

        menuentry 'Debian GNU/Linux, with Linux 6.1.0-14-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.1.0-14-amd64-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {
        menuentry 'Debian GNU/Linux, with Linux 6.1.0-14-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.1.0-14-amd64-recovery-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {
        menuentry 'Debian GNU/Linux, with Linux 6.1.0-13-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.1.0-13-amd64-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {
        menuentry 'Debian GNU/Linux, with Linux 6.1.0-13-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.1.0-13-amd64-recovery-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {
        menuentry 'Debian GNU/Linux, with Linux 6.1.0-12-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.1.0-12-amd64-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {
        menuentry 'Debian GNU/Linux, with Linux 6.1.0-12-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.1.0-12-amd64-recovery-b85ab3cf-18e3-4366-b120-8ceacc4a9e58' {

On note alors l’identifiant du noyau qu’on choisit, en l’occurrence gnulinux-6.1.0-13-amd64-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58.

On modifie alors la variable GRUB_DEFAULT du fichier /etc/default/grub avec les deux identifiants notés, séparés par un chevron > :

GRUB_DEFAULT="gnulinux-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58>gnulinux-6.1.0-13-amd64-advanced-b85ab3cf-18e3-4366-b120-8ceacc4a9e58"

Ensuite il faut lancer update-grub et redémarrer pour se retrouver sur un noyau qui n’a pas le bug.