Raspberry Pi OS: Inplace-Upgrade auf aktuelle Bookworm-Basis

Raspberry Pi OS macht die Debian-Versionssprünge mit. Das offizielle Upgrade sieht die Neuinstallation vor. Inplace-Upgrades sind aber möglich.

In Pocket speichern vorlesen Druckansicht 54 Kommentare lesen

(Bild: Rowan Morgan/Shutterstock.com)

Lesezeit: 8 Min.
Von
Inhaltsverzeichnis

Wer etwa ältere Raspbian- oder Raspberry-Pi-OS-Versionen, die etwa auf Debian Bullseye (Debian 11) basieren, auf die neuere Bookworm-Basis (Debian 12) mit längerem Support hieven möchte, kann dies unproblematisch mit einer Neuinstallation des Betriebssystems erledigen. Wer jedoch selbst geschriebene oder angepasste Skripte und Software einsetzt, steht vor dem Problem, das alles neu einrichten zu müssen. Mangels eigener Dokumentation von Bastellösungen oder schlicht Vergesslichkeit ist das jedoch manchmal ein unlösbares Unterfangen.

In solchen Fällen können Raspberry-Pi-Nutzerinnen und -Nutzer versuchen, mit einem InPlace-Upgrade die bestehende Installation auf den neuen Stand mit besserer und vor allem längerer Unterstützung zu bringen. Dieses Vorgehen ist nicht ungefährlich, wer lediglich die Paketquellen auf Bookworm umstellt und ein Upgrade versucht, zerschießt sich mit hoher Wahrscheinlichkeit das System. Für ein funktionierendes Upgrade existieren einige Anleitungen im Internet. Der Artikel dokumentiert die Befehle und Reihenfolge, die bei uns erfolgreich zum Ziel führten. Dennoch der explizite Hinweis: Diese Upgrade-Variante ist ausdrücklich nicht die offiziell empfohlene und sie kann scheitern!

Daher ist an erster Stelle ein Backup der bisher genutzten Softwarestände Pflicht. Dazu fährt man den Raspi mittels sudo shutdown -h now planmäßig herunter, wodurch keine Inkonsistenzen etwa in Datenbanken oder Dateisystemen auftauchen sollten. Die Inhalte der SD-Karte lassen sich unter Windows etwa mit dem Tool Win32Imager in eine IMG-Datei verfrachten. Unter Linux erledigt das der Befehl sudo dd if=/dev/sd<Buchstabe> of=~/raspi-backup.img, wobei das SD-Device der SD-Karte entspricht. Im Fehlerfall lässt sich so das alte System schnell zurückspielen und ein lauffähiger Zustand wiederherstellen.

Die eigentliche Migration gelingt mit etwas Geduld und wenigen Befehlen an der Kommandozeile. Zunächst muss das laufende Raspberry Pi OS auf den aktuellen Stand gebracht werden. Das erledigen die Befehle sudo apt-get update && sudo apt-get dist-upgrade.

In den Paketquellen muss nun der "Bullseye"-Eintrag auf "Bookworm" geändert werden. Entweder editiert man die Dateien manuell, oder erledigt das komfortabel mit den Befehlen

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

Das Upgrade selbst erfolgt mit den Befehlen

sudo apt update
sudo apt -y full-upgrade
sudo apt -y clean
sudo apt -y autoremove

Diese lassen sich auch mittels "&&" verketten, sodass nach der Installation des Upgrades auch gleich die Entrümpelung erfolgt. Zwischendurch erfolgen Rückfragen, die von dem Schalter "-y" nicht abgefangen werden, etwa bezüglich Austausch von zuvor veränderten Konfigurationsdateien. Im Test war das Ersetzen selbst auf einem seit Jahren gewachsenen System kein Problem – etwa die SSH- oder die users-Dateien gaben hier Grund zu Sorge, der Log-in über SSH war nach Aktualisierung jedoch weiterhin mit den eingerichteten Accounts möglich. Je nach Internetanbindung benötigt das Update nun einige Stunden.

Im Test wurde während dieser Zeit offenbar bereits das eine oder andere Paket in den Quellen aktualisiert, sodass es Fehlermeldungen gab. Allerdings nennen die Fehlermeldungen in der Regel auch gleich einen Befehl, mit dem sich Abhilfe schaffen lässt. In unserem Fall half es, nochmals bei sudo apt update anzufangen. Keine Angst, die bereits aktualisierten Pakete werden dadurch nicht noch einmal heruntergeladen und angefasst, der Vorgang war deutlich schneller.

Ist das Upgrade nun weitestgehend ohne weitere Fehlermeldungen erfolgt, steht nun ein erster Neustart an. Das erledigt sudo reboot an der Kommandozeile.

Nach der Anmeldung nach dem Neustart putzt sudo apt purge ?config-files alte Konfigurationsdateien vom System. Die Befehle

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 install raspi-firmware

werfen die alte Firmware vom System, überprüfen das Dateisystems der Boot-Partition auf Fehler und installieren die aktuelle Firmware dorthin. Nun gilt es, den aktuellen Kernel zu installieren. Der ist davon abhängig, welchen Raspberry Pi man einsetzt. Der v6-Kernel sollte auf allen Geräten laufen, die v7l-Variante ab Raspberry 3b und die 64-bittige v8-Version ab Raspberry Pi 4.

Die sichere Version ist also:

sudo apt install linux-image-rpi-v6 linux-headers-rpi-v6

Wer einen neueren Raspi einsetzt, kann den neueren v7l-Kernel verwenden:

sudo apt install linux-image-rpi-v7l linux-headers-rpi-v7l

während die 64-bittigen Raspis mit diesem Kernel optimal laufen:

sudo apt install linux-image-rpi-v8 linux-headers-rpi-v8

Schließlich benötigt die Konfigurationsdatei zum Booten noch einen Eintrag zum Aktivieren der automatischen Suche nach einer initramfs-Datei – eine Neuerung seit dem Bookworm-basierten Release aus dem Jahr 2023:

sudo sed -i.bak '$ a\auto_initramfs=1' /boot/firmware/config.txt

Ein weiterer Reboot startet dann den neuen Kernel:

sudo reboot

Nun sollte der Raspberry Pi mit dem neuen Bookworm-basierten Raspberry Pi OS laufen. Alte Skripte sollten ebenfalls weiter funktionieren, selbst Cron-Jobs bleiben erhalten. In unseren Skripten war der Aufruf des Python-Interpreters noch anzupassen. Der Verweis in der ersten Skript-Zeile benötigt die explizite Benennung der Version, etwa

#!/usr/bin/env python3

Die Schlüssel für die Repositories, auf die die Softwareveraltung mit "apt" zugreift, sind inzwischen anders organisiert. Ehemals lagen sie alle in einer Datei, /etc/apt/trusted.gpg. Nun liegt je eine Schlüsseldatei pro Repository unter /etc/apt/trusted.gpg.d/. apt wirft daher womöglich Warnmeldungen aus. Diese ließen sich auf dem Testsystem folgendermaßen in den Griff bekommen.

Zunächst waren die Schlüssel für die Standard-Repositories herunterzuladen und in die Schlüsselverwaltung zu importieren:

wget http://raspbian.raspberrypi.org/raspbian.public.key -O - | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/raspbian.gpg --import

wget https://archive.raspberrypi.org/debian/raspberrypi.gpg.key -O - | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/archive-raspbian.gpg --import

Anschließend steht das Aufräumen der alten Schlüsseldatei auf dem Programm. Der Aufruf von

sudo apt-key list

zeigt die enthaltenen Schlüssel zu den Repositories auf. Die alten Schlüssel, die die beiden heruntergeladenen und importierten Keys nun ersetzen, löscht der Befehl

sudo apt-key del "<nummer>"

wobei die Nummer jeweils die vom list-Befehl angezeigten langen Zeichenketten zu raspbian.gpg und von archive-raspbian.gpg sind. Es verbleibt der Key fĂĽr Bookworm/InRelease in der alten SchlĂĽsseldatei. Die verschiebt der Aufruf von

sudo mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/bookworm_InRelease.gpg

an die richtige Stelle und gibt ihr den korrekten Namen. SchlieĂźlich mĂĽssen die Rechte und Besitzer fĂĽr die SchlĂĽsseldateien passend vergeben werden. FĂĽr die einzelnen Dateien in dem Verzeichnis sind das also

sudo chown _apt:root /etc/apt/trusted.gpg.d/raspbian.gpg
sudo chmod 644 /etc/apt/trusted.gpg.d/raspbian.gpg

Diesen Vorgang gilt es noch für die anderen beiden Dateien – und gegebenenfalls weitere Repositories, so man welche eingetragen hat – zu wiederholen. Anschließend klappen apt-Anweisungen ohne Warnmeldungen auf unserem System.

Sollten jedoch andere komplizierte Probleme auftreten, für die sich auch nach einer Suche im Netz keine Lösung findet, steht immer noch das Backup bereit, mit dem sich der alte, lauffähige Stand rasch wiederherstellen lässt.

(dmk)