Letztens musste ich von meinem Raspberry Pi 3 auf einen Raspberry Pi 5 umziehen. Grund dafür war, dass der Raspberry 3 zu wenig RAM hat und meine Anwendung, die ich auf dem Raspberry laufen hatte, nicht mehr lief. Also klickte ich mich ein wenig durch das Internet, um zu erfahren, wie aufwendig der Umzug wohl werden würde. Ich war ein wenig entmutigt, denn die meisten Quellen erzählten mir, dass ich Debian 12 (Bookworm) wohl komplett neu installieren müsste, ein manuelles Upgrade wurde nicht empfohlen. Ich hatte aber Lust auf ein manuelles Upgrade und erinnerte mich an einen Befehl, mit dem ich die Paketquellen einfach umstellen konnte. Da ich mich nicht mehr genau an den Befehl erinnerte, musste natürlich wieder Google helfen.
Ausgangspunkt ist das 64 Bit Image vom Raspberry PI OS mit Debian 11, welches schon ein paar Monate auf dem Pi werkelte. Dieses hatte bereits mit rpi-update einen neueren Kernel erhalten und nun musste es also noch auf Debian 12 gebracht werden. Doch bevor das passierte, brachte ich mit einem
sudo apt update && sudo apt dist-upgrade
das System auf den aktuellen Stand.
Solltet ihr hier sein, um diesen Erfahrungsbericht zu nutzen, um auch einen Umzug vom Raspberry Pi 3 auf den Raspberry Pi 5 zu machen, möchte ich an dieser Stelle erwähnen, dass es wichtig ist, dass ihr euch ein Backup oder ein Image von eurem System anlegt, damit ihr wieder zurückwechseln könnt, sollte im folgenden etwas kaputtgehen! Backups sind immer wichtig und sinnvoll! Wenn ihr diesem Bericht folgt, dann macht genau an dieser Stelle ein komplettes Backup. Noch ist das System heil! Ich wiederhole diesen Hinweis später noch einmal.
Danach änderte ich mit folgendem Befehl die Paketquellen von Bullseye auf Bookworm:
sudo sed -i'.bak' 's/bullseye/bookworm/g' /etc/apt/sources.list
Das ist der Befehl, den ich vage in Erinnerung hatte und gefunden haben ich diesen in folgenden Blog-Artikel: Update Debian 11 auf 12 Bookworm.
Dieser Befehl wäre ausreichend, wenn ich keine zusätzlichen Paketquellen zu meinem Debian 11 hinzugefügt hätte. Da ich allerdings gerne mit meinem System experimentiere, weswegen ich auch noch weitere Paketquellen hinzugefügt habe, brauche ich noch einen zweiten Befehl, der auch diese Paketquellen anpasst:
sudo sed -i'.bak' 's/bullseye/bookworm/g' /etc/apt/sources.list.d/*
Danach öffnete ich mit:
sudo nano /etc/apt/sources.list
noch einmal die Datei, welche die Hauptpaketquellen enthält und ergänzte die einzelnen Zeilen mit non-free-firmware. Das ganze sah dann so aus:
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
# Uncomment deb-src lines below then 'apt-get update' to enable 'apt-get source'
#deb-src http://deb.debian.org/debian bookworm main contrib non-free
#deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free
#deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free
Nachdem ich das erledigt hatte, konnte ich mit
sudo apt update && sudo apt dist-upgrade
den Upgrade-Prozess starten. Dieser lief dann einige Zeit, immerhin mussten viele neue Pakete heruntergeladen und installiert werden.
Mein Raspberry läuft hier als Server, sodass ich nur über SSH darauf zugreife und ich keine Desktop-Umgebung starte. Ich erwähne das, weil ich nicht weiß, ob es damit genauso einfach funktioniert. Wenn wer diesen Artikel nutzt, um ebenfalls auf einen RPi5 umzuziehen und dort dann auch die Desktop-Umgebung nutzt, darf gerne einmal in den Kommentaren erzählen, ob das problemlos funktioniert.
Nachdem das Upgrade durchgelaufen war, startete ich den Raspberry neu und schaute, ob noch alles läuft. Es gab einige Programme, die dann in einem anderen Ordner lagen, weswegen hier eventuell eigene Scripte angepasst werden müssten. Bei mir war es der DDClient, um die DYNDNS-Einträge erneuern zu lassen. Mit dem Befehl which ddclient lässt sich hier der neue Pfad leicht herausfinden, um die eigenen Scripte anzupassen. Das gilt für andere Programme natürlich ebenso.
Nachdem alles lief, musste ich noch überlegen, wie ich den Kernel, der für den RPi5 optimiert wurde, ins System bekomme. Die Lösung war dann am Ende verdammt einfach. Ich beschreibe hier jetzt den Weg, wie ich es gemacht hätte, wenn ich die Lösung sofort gewusst hätte. Ich habe am Ende ein wenig länger gebraucht, um die Lösung zu finden, aber es ist am Ende genau die Lösung, die ich genutzt habe. Der Unterschied war nur, dass ich den Raspberry an dieser Stelle schon ausgeschaltet hatte und den Kernel dann von meinem Rechner aus in das /boot/-Verzeichnis kopiert habe.
Hätte ich es in der Konsole auf dem Raspberry direkt erledigt, wäre ich mit:
cd /boot/
in den boot-Ordner gewechselt und hätte hier mit
sudo wget https://github.com/raspberrypi/firmware/raw/master/boot/kernel_2712.img
dann das optimierten Kernel-IMG „kernel_2712.img“ abgelegt. Das ist der optimierte Kernel für den Raspberry Pi 5, den ich natürlich auch benutzen wollte. Mit einem:
sudo rpi-update
installierte ich dann noch den aktuellsten Kernel, beziehungsweise prüfte ich, ob der aktuellste Kernel installiert war und damit waren die Vorbereitungen abgeschlossen. Den github-Link solltet ihr, wenn ihr ihn verwenden wollt, noch einmal prüfen. Der könnte sich mit der Zeit natürlich verändern.
In den meisten Anleitungen im Internet findet ihr die Anmerkung, dass das rpi-update nicht unbedingt genutzt werden soll, wenn es nicht nötig ist. Möchte das hier natürlich auch kurz erwähnen, denn es besteht natürlich die Möglichkeit, dass euer System danach nicht mehr so läuft, wie ihr es gerne hättet. Wenn ihr meinen Erfahrungsbericht nutzt, um vom Raspberry Pi 3 auf den Raspberry Pi 5 zu wechseln, dann bedenkt bitte immer, dass dabei auch etwas kaputtgehen kann. Macht also unbedingt vorher ein Backup von eurem System!
Ihr könnt übrigens schon auf den RPi5 wechseln, bevor ihr den optimierten Kernel installiert. Solange im /boot/-Verzeichnis das „kernel8.img“ vorhanden ist, startet der RPi5. Ich habe das getestet und den optimierten Kernel erst danach installiert. Was ich damit sagen will, an dieser Stelle ist der Umzug fertig und ihr könnt die Festplatte an den RPi5 anstecken und die neue Hardware genießen.
Bevor ihr das macht, könntet ihr aber noch die boot-Partition von 256 auf 512 MB erweitern. Es ist aber nicht unbedingt notwendig, wird vom rpi-update-Prozess aber so vorgeschlagen. Je nachdem, wie groß eure/r Festplatte/SSD/USB-Stick ist, dauert es eine Weile, denn ihr müsst die andere Partition ja verkleinern und verschieben, um dann die boot-Partition vergrößern zu können.
Und da gleich noch ein zweiter Tipp: Gparted wollte bei mir die FAT32-Partition – in diesem Format ist die boot-Partition formatiert – nicht vergrößern. Die einfache Lösung ist, den Inhalt der boot-Partition kurz auf einen anderen Datenträger zu verschieben, die komplette boot-Partition (nur diese) dann neu in FAT32 zu formatieren und dann den Inhalt wieder reinkopieren. Ihr könnt es aber auch lassen und einfach die „kernel7.img“ und die kernel7l.img“-Dateien aus der boot-Partition löschen. Dann habt ihr auch nur 80 MB an Daten dort liegen.
Ergänzung: Die boot-Partition wird in der Datei /etc/fstab jetzt als /boot/firmware eingebunden. Ich habe das bisher noch nicht angepasst und das System läuft derzeit ohne Probleme. Es könnte aber sein, dass es bei zukünftigen Aktualisierungen deswegen zu Fehlermeldungen kommt. Also behaltet das im Hinterkopf.
Update: Ich habe jetzt die fstab angepasst. Das System läuft weiterhin problemlos. Es ist aber wohl für alle wichtig, die auf normalen Wege ihren Kernel und somit die Firmware aktualisieren und nicht über rpi-update.