Il n'existe pas de procédure automatique pour mettre à niveau Debian. Ci-après les différentes étapes qui m'ont permi d'effectuer cette mise à jour, afin que le système fonctionne.

Attention : Cette procédure manuelle pouvant bloquer le système, il est préférable :

  1. De sauvegarder les données avant de commencer cette mise à niveau.
  2. D'avoir un autre micro-SD, ou un autre PC pouvant lire la micro-SD du RaspberryPI, afin de pouvoir modifier la configuration de démarrage, en cas de besoin.

Mise à jour de la version actuelle

Avant de mettre à niveau, vers la nouvelle version, il faut s'assurer que l'installation actuelle est à jour de tous ces paquets. Pour cela vous pouvez par exemple exécuter les commandes suivantes depuis le shell

sudo apt update && sudo apt --yes dist-upgrade

Afin de gagner un peu de place, on peut aussi nettoyer les paquets téléchargés et supprimer ceux devenus inutiles. Par exemple avec les commandes suivantes :

sudo apt clean && sudo apt --purge --yes autoremove

Si le kernel a été mise à jour, il convient de redémarrer le Raspberry PI avant de continuer.

Préparation de la mise à niveau

Pour préparer la mise à niveau, il est nécessaire de modifier le fichier apt sources.list afin de remplacer le nom de l'ancienne version par la nouvelle et d'ajouter le groupe de paquets non-free-firmware. Par exemple avec les commandes suivantes :

sudo sed -i -e 's/bullseye/bookworm/g' /etc/apt/sources.list
sudo sed -i 's/non-free/non-free non-free-firmware/g' /etc/apt/sources.list
sudo sed -i -e 's/bullseye/bookworm/g' /etc/apt/sources.list.d/raspi.list

Afin de pouvoir reprendre la main si l'interface graphique ne répond plus, il est préférable de démarrer le service ssh et de s'assurer qu'il est accessible depuis un autre PC. Il faut aussi désactiver l'économiseur d'écran  et les économies d'énergies, afin de conserver un écran toujours allumé.

Mise à niveau

C'est la phase la plus importante. Pendant cette phase, les mises à jour vont être téléchargées, ce qui peut prendre plus ou moins de temps, suivant le début de la connexion Internet, puis elles vont être installées. Pendant l'installation, le terminal peux afficher plusieurs écrans avec des questions :

  • Certains services doivent être redémarrés, il faut toujours accepter.
  • Des paramètres peuvent être demandés. Il faut répondre aux questions en fonction de vos besoins.
  • Des fichiers de configuration peuvent être mise à jour. L'outil permet de comparer le fichier local par rapport au nouveau fichier, il est préférable d'installer le nouveau fichier, puis si besoin d'appliquer manuellement vos modifications.

Afin d'effectuer la mise à nouveau, vous pouvez utiliser par exemple les commandes suivantes :

screen -l
sudo apt update && sudo apt --yes dist-upgrade

Une fois, cette partie de la mise à niveau terminée, on peut redémarrer l'ordinateur. Ensuite il faut mette à niveau le. Par exemple via la commande :

sudo shutdown -r now

Mise à niveau du kernel

Le kernel de la nouvelle version Debian n'est plus installé via un paquet spécifique Raspberry PI, mais via un paquet linux-image. Si après redémarrage le réseau n'est plus disponible, voir le guide de dépannage plus bas. Pour la mise à niveau du kernel il faut réaliser plusieurs modifications : suppression de l'ancien kernel, modification du point de montage de la partition /boot, installation du firmware puis du kernel et configuration de auto initramfs. Par exemple via les commandes suivantes (pour un Raspberry PI 4, pour les autres version, il faut adapter le nom du kernel) :

sudo dpkg --purge --force-depends raspberrypi-kernel raspberrypi-bootloader
sudo umount /boot
sudo fsck -y /boot
sudo mkdir /boot/firmware
sudo sed -i.bak -e "s#boot#boot/firmware#" /etc/fstab
sudo systemctl daemon-reload
sudo mount /boot/firmware
sudo apt --yes install raspi-firmware
sudo apt --yes install linux-image-rpi-v8 linux-headers-rpi-v8
sudo sed -i.bak '$ a\auto_initramfs=1' /boot/firmware/config.txt
sudo shutdown -r now

Guide de dépannage

Services

Suite à cette mise à niveau, certains services peuvent ne pas démarrer automatiquement. Pour obtenir la liste des services désactiver, on peut par exemple utiliser la commande suivante :

 
sudo systemctl list-unit-files --type=service --state=disabled

Certains services sont arrêtés, ce qui est normal. Mais par exemple si NetworkManager est arrêté, alors le réseau ne fonctionne pas. Il faut l'activer et le démarrer, par exemple avec les commandes suivantes :

sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
sudo systemctl status NetworkManager

Carte réseau

Les versions récentes de Linux utilisent un nom de carte réseau invariant, c'est à dire que son nom est lié à la façon dont la carte réseau est connectée dans le PC au lieu d'être un numéro chrologique eth. Par exemple avec la version précédente ma carte réseau s'appelait eth0 et maintenant elle s'appelle end0. Suite à cette modification de nom, il faut mettre à jour la configuration du firewall. Cette mise à jour n'est pas détaillée ici, car elle dépend du firewall que vous utilisez.