Update Debian 11 auf Debian 12 (bookworm)

Im Juni 2023 wurde Debian 12 released. Wir haben die neue Distribution getestet und bereits im produktiven Einsatz. Hier findet sich eine kurze Beschreibung, wie das Update von Version 11 auf 12 klappt.

Achtung: Es ist absolut notwendig, vor dem Update ein komplettes Backup des Servers zu erstellen. Bei einem Distro-Update können durch vielfältige Ursachen Fehler auftreten, die das System ein einem nicht mehr verwendbaren Zustand hinterlassen. Wir übernehmen dafür keine Verantwortung.

1. Prüfung der aktuellen Version:

$ lsb_release -a

# returns​​​​​
No LSB modules are available.
Distributor ID:    Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:    11
Codename:    bullseye

2. Update aller installierten Pakete

Sicherheitshalber sollten alle nicht Standard-Pakete deinstalliert werden. Nach dem Update können diese erneut installiert werden, falls sie von Debian 12 unterstützt werden. Das Ergebniss dieser Prüfung könnte z.B. wie folgt aussehen:

$ sudo apt list '?narrow(?installed, ?not(?origin(Debian)))'
containerd.io/bullseye,now 1.6.21-1 amd64 [installed]
docker-ce-cli/bullseye,now 5:24.0.2-1~debian.11~bullseye amd64 [installed]
docker-ce/bullseye,now 5:24.0.2-1~debian.11~bullseye amd64 [installed]
hc-utils/now 0.0.4-1 all [installed,local]
rsnapshot/now 1.4.4-1 all [installed,local]

Ebenso können Pakete im "hold"-Status bei dem Update zu Problemen führen. Diese können wir folgt aufgelistet werden:

# show packages in hold status
$ sudo apt-mark showhold | more

# uninstall packages in hold status
$ sudo apt-mark unhold package_name

Weitere Informationen finden sich z.B. hier 

Jetzt muss das System auf den aktuellsten Stand gebracht werden:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt full-upgrade
$ sudo apt --purge autoremove

# reboot
$ sudo systemctl reboot

3. Update der Debian sources

Um den Updateprozess zu starten, müssen die sources-list Dateien angepasst werden. Diese finden sich in  /etc/apt/sources.list und  /etc/apt/sources.list.d/*.list.

In all diesen Dateien muss "bullseye" mit "bookworm" ersetzt werden. Beispiel

# Vorher
deb http://deb.debian.org/debian bullseye main
deb http://deb.debian.org/debian bullseye-updates main
deb http://deb.debian.org/debian-security/ bullseye-security main

# Nachher
deb http://deb.debian.org/debian bookworm main
deb http://deb.debian.org/debian bookworm-updates main
deb http://deb.debian.org/debian-security/ bookworm-security main 

Jetzt können die package-lists aktualisiert werden:

$ sudo apt update

4. System Upgrade

$ sudo apt upgrade --without-new-pkgs

Beim Ausführen dieses Upgrades wird bei diversen (Konfigurations-) Dateien gefragt, ob die lokal modifizierte Variante durch eine neue ersetzt werden soll. Das muss im Einzelfall überprüft werden. Wir haben z.B. auf allen Systemen die sshd-Konfiguration angepasst und es wird hier gefragt, ob die lokale Datei /etc/ssh/sshd_config durch eine neue (mit Standard-Settings) ersetzt werden soll. 

5. Upgrade Debian 11 auf Debian 12

Jetzt kann der finale Upgrade-Prozess gestartet werden. Auch hier wird bei einzelnen Dateien gefragt, ob die lokale oder neue Version verwendet werden soll.

$ sudo apt full-upgrade

# before rebooting, then check, if the sshd config is valid
$ sudo sshd -t

# now reboot into Debian 12
$ sudo systemctl reboot

6. Prüfung der neuen Systemversion

$ lsb_release -a

No LSB modules are available.
Distributor ID:    Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:    12
Codename:    bookworm

7. Fehlerbehebung

Wird nach der Installation 'apt-get update' aufgerufen, kann folgende Meldung erscheinen:

N: Repository 'Debian bookworm' changed its 'non-free component' value from 'non-free' to 'non-free non-free-firmware'
N: More information about this can be found online in the Release notes at: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.html#non-free-split

Die Meldung lässt sich wie folgt deaktivieren:

$ su -c 'echo "APT::Get::Update::SourceListWarnings::NonFreeFirmware \"false\";" > /etc/apt/apt.conf.d/no-bookworm-firmware.conf'

8. Sonstiges

Docker

Je nachdem wie Docker bisher installiert war, kann es Sinn machen, Docker für Debian 12 neu zu installieren. Das geht wie folgt (siehe auch https://docs.docker.com/engine/install/debian/):

# Run the following command to uninstall all conflicting packages
$ for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

# Update the apt package index and install packages to allow apt to use a repository over HTTPS:
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg

# Add Docker’s official GPG key:
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Use the following command to set up the repository
$ echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Update the apt package index
$ sudo apt-get update

# Install Docker Engine, containerd, and Docker Compose (latest versions).
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Verify that the Docker Engine installation is successful by running the hello-world image
$ sudo docker run hello-world
prev Security: Fix Weak Key Exchange Algorithm in SSH
next TYPO3 PageTitleProvider für eigene Extensions