Raspberry Pi OS 10 Buster auf 11 Bullseye In-Place Aktualisierung ohne Neuinstallation

Als Video ansehen
Bereitgestellt über YouTube

Raspberry Pi OS 10 Buster auf 11 Bullseye In-Place Aktualisierung ohne Neuinstallation

Im vorherigen Beitrag habe ich das neue Raspberry Pi OS 11 vorgestellt und am Ende zwei mögliche Wege gezeigt, wie man es bekommt. Hier möchte ich euch die zweite Variante zeigen, nämlich ein In-Place Upgrade. Dadurch wird ein vorhandener Raspberry Pi mit laufender Version 10 auf 11 aktualisiert – ohne das Raspberry Pi inklusive aller Programme neu installieren zu müssen. Vom Effekt her ist dies vergleichbar mit dem Upgrade von z.B. Windows 7 auf Windows 10.

Achtung: Das solltest du vor dem Upgrade unbedingt wissen!

Wie bereits bei der Vorstellung von Raspberry Pi OS 11 erwähnt, wird das In-Place Upgrade NICHT offiziell seitens der Raspberry Pi Organisation unterstützt und auch nicht empfohlen! Es kann funktionieren, aber es kann auch schief gehen. Im schlechtesten Falle startet das Betriebssystem nicht mehr. Je mehr du installiert und angepasst hast, um so wahrscheinlicher wird es zu Problemen kommen.

Falls du Drittanbieter-Software installiert hast, unbedingt vorher prüfen, ob diese das neue Raspberry Pi OS 11 unterstützen! Dies ist möglicherweise nicht bei allen Programmen der Fall. Achte insbesondere auf Drittanbieter-Paketquellen sowie allen Programmen, die du vielleicht an der Paketverwaltung vorbei installiert hast. Da dies stark davon abhängt, was du individuell auf deinem Pi installiert hast, ist es nicht möglich, auf Details einzugehen. Das musst du im Einzelfall für jedes deiner Systeme selbst prüfen und entscheiden. Gerade dann, wenn dein Pi vielleicht schon etwas „verbastelt“ ist weil vieles ausprobiert wurde, macht eine Neuinstallation gegebenenfalls durchaus Sinn. Auch wenn auf deinem Pi viele verschiedene Programme direkt (also ohne Docker) installiert sind, solltest du über eine frische Installation nachdenken.

Sofern du dennoch ein In-Place Upgrade durchführen möchtest, solltest du VORHER Sicherungskopien anlegen und diese am besten auch auf Funktionsfähigkeit überprüfen. Meine Empfehlung ist, ein Abbild der SD-Karte anzulegen – am besten unter Linux, da es unter Windows vereinzelt zu Problemen kommen kann. Du brauchst also eine zweite Micro-SD Karte, diese kosten nur wenige Euro. Zusätzlich würde ich alle wichtige Anwendungsdaten separat sichern. Sollte das Upgrade schief laufen und du kannst die auftretenden Probleme nicht reparieren, wechselst du einfach zurück auf die andere Speicherkarte – dann funktioniert alles erst einmal wieder mit Raspberry Pi OS 10 Buster. So lässt sich das Upgrade gefahrlos ausprobieren. Bei einer Image-Sicherung würde ich sicherheitshalber prüfen, ob diese funktioniert – also das Image auf eine zweite Speicherkarte schreiben und den Pi davon starten.

Meine Testumgebung

Ich nutze im folgenden einen Raspberry Pi 4 mit 4 GB Arbeitsspeicher, auf dem ein frisches Raspberry Pi OS 10 Buster installiert wurde. Nach dem Aktualisieren der Paketquellen und Pakete wurde der Apache2 Webserver zusammen mit PHP installiert. Entsprechend der Paketverwaltung ist das unter Buster noch PHP 7.3:

Dieser Pi wird im Folgenden auf Raspberry Pi OS 11 aktualisiert, wodurch uns PHP 7.4 über die offiziellen Paketquellen zur Verfügung steht.

Vorbereitung

Wir benötigen Zugriff auf die Konsole des Pi, entweder direkt oder per SSH. Für den Fall, dass das Update schief läuft, solltet ihr am besten physischen Zugriff auf den Pi haben – sowie die Möglichkeit, Bildschirm und Tastatur anzuschließen.

Zunächst prüfen wir, welche Version des Raspberry Pi OS installiert ist. Dies geschieht am einfachsten mit dem standardmäßig vorinstallierten Werkzeug lsb_release. Ohne Anpassungen funktioniert das hier gezeigte Upgrade nur von Version 10 auf 11.

$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10

Sollte lsb_release eine andere Version als 10 ausgeben, fahrt nicht vor – es sei denn, ihr wisst was zu tun ist. Vor dem In-Place Upgrade von 10 auf 11 sollten die Paketquellen und sämtliche Pakete auf die jeweils aktuellste stabile Version aktualisiert werden:

sudo apt update
sudo apt upgrade

Nun die Paketquellen anpassen, damit diese auf Bullseye statt Buster referenzieren. Dafür ersetzt man einfach den Releasename in der Paketquellen-Liste. Automatisiert funktioniert es mit sed:

sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list

Dies sollte man auch für alle eigenständig eingetragenen Paketquellen im sources.list.d Ordner durchführen. Beachtet allerdings, dass Drittanbieter-Paketquellen Bullseye unterstützen müssen, falls ihr solche eingebunden habt! Das sollte vorher geprüft werden. Unterstützt die Paketquelle (derzeit) nur Buster, bleibt nur Warten oder auf andere Wege (z.B. Docker) ausweichen. Sofern Raspberry Pi OS 11 unterstützt wird, könnt ihr auch dort alle Vorkommen ersetzen:

sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list.d/*.list

Vor dem eigentlichen Updateprozess aktualisieren wir die Paketquellen, welche nun auf Version 11 verweisen. Anschließend werden zwei neue Pakete installiert:

sudo apt update
sudo apt install libgcc-8-dev gcc-8-base

Dabei zeigt apt-listchanges einige Änderungen an. Es macht Sinn, einen Blick darauf zu werfen. Mit einem q für quit lässt sich die Liste schließen und die Installation läuft weiter. Die Nachfrage zum Neustarten mit <Yes> bestätigen.

Starten des Upgrades von Raspberry Pi OS 10 auf 11

Damit sind die Vorbereitungen abgeschlossen und wir können das Upgrade starten:

sudo apt full-upgrade

Eine lange Paketliste erscheint, die ihr begutachten solltet. Vor allem die zu entfernenden (REMOVED) Pakete. Sie sind unter Raspberry Pi OS 11 nicht mehr verfügbar. Beispielsweise ist hier PHP 7.3 aufgelistet, weil diese Pakete auf 7.4 aktualisiert wurden und ein neues Paket mit entsprechendem Name verfügbar ist. In der Regel werden die meisten Pakete aktualisiert und sind daher als upgraded gelistet.

$ sudo apt full-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  bsdmainutils g++-8 geoip-database libbind9-161 libdns1104 libdns1110 libevent-2.1-6 libfl2 libfreetype6-dev libgeoip1 libicu63 libisc1100 libisc1105 libisccc161 libisccfg163 libisl19
  libjim0.77 liblua5.2-0 liblwres161 libmpdec2 libncursesw5 libperl5.28 libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib libpython3.7 libpython3.7-minimal libpython3.7-stdlib
  libstdc++-8-dev libusb-0.1-4 perl-modules-5.28 python-pkg-resources python2 python2-minimal python2.7 python2.7-minimal python3.7-minimal usb.ids
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  libapache2-mod-php7.3 libpcre2-posix0 libpolkit-backend-1-0 libpython-stdlib php7.3 php7.3-cli php7.3-common php7.3-json php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-readline
  ...
391 upgraded, 64 newly installed, 17 to remove and 0 not upgraded.
Need to get 298 MB of archives.
After this operation, 264 MB of additional disk space will be used.

Wenn euch der Umfang dieser Änderungen klar ist und ihr damit einverstanden seid, bestätigt mit y. Da es sich um mehrere hundert Pakete handelt, dauert der Vorgang einige Zeit – auch in Abhängigkeit von eurer Internetverbindung. Eine ungefähre Einschätzung: Mein Testsystem benötigte mit schneller Internetverbindung (150 Mbit/s) ungefähr 13 Minuten für das reine Upgrade, also apt full-upgrade. Vor allem auf älteren Pis dauert es entsprechend länger.

Nachfragen zu modifizierten Konfigurationsdateien

Wenn ihr selbst oder ein installiertes Programm eine Konfigurationsdatei verändert hat und ein Paket dies mit einer abweichenden Standard-Version ersetzen möchte, merkt das die Paketverwaltung in der Regel. Es erscheint eine Meldung, die euch zum Handeln auffordert:

Hier solltet ihr keinesfalls blind Zustimmen oder Ablehnen, dies kann Probleme mit euren Programmen oder gar dem Betriebssystem verursachen! Sondern erst einmal mit D die Unterschiede aufzeigen lassen. Ein Minus () zeigt euch an, was in der neueren Standard-Datei verglichen mit eurer vorhandenen fehlt und das Plus (+) steht für hinzugefügte Inhalte.

In diesem Beispiel wurde die Standard-Shell für neue Benutzer von Bash auf SH geändert. Außerdem die SKEL-Variable nun auskommentiert. An dieser Stelle müsst ihr entscheiden, welche Version genutzt werden soll: Y für die neue Standard-Version im Paket mit den analysierten Änderungen, oder N um die lokale Datei zu behalten. Bei Unsicherheiten ggf. in der Dokumentation der jeweiligen Anwendung nachschauen, um die Konsequenzen abschätzen zu können.

Finale Anpassungen in der /boot/config.txt

Wurde das Upgrade abgeschlossen, muss noch eine Änderung in der Datei /boot/config.txt vorgenommen werden. Sie enthält Einstellungen für das Bios-Ersatzsystem des Pi. Um die Änderungen des Grafiktreibers in Raspberry Pi OS 11 händisch vorzunehmen, die Datei mit einem Texteditor eurer Wahl (z.B. nano oder vim) öffnen. Kommentiert folgende Zeilen aus, in dem eine Raute # an den Anfang gesetzt wird:

# dtoverlay=vc4-fkms-v3d

Anschließend suchen wir nach dem Bereich [all] und fügen darunter folgende Zeile ein:

dtoverlay=vc4-kms-v3d

fkms wurde hierbei durch kms ersetzt.

Pfad für DHCP-Dienst reparieren

Die Datei /etc/systemd/system/dhcpcd.service.d/wait.conf wird mit einem ungültigen Pfad erzeugt. Dadurch kann der DHCP-Dienst beim nächsten Neustart nicht gestartet werden. DHCP weist dem Pi eine IP-Adresse zu, falls keine statische gesetzt wurde. Statt dies händisch zu korrigieren, gibt es einen einfacheren Weg, um diese Datei mit dem korrekten Pfad neu erstellen zu lassen: Öffnet die Raspberry Pi Konfiguration

sudo raspi-config

und navigiert zu 1 System Options > S6 Network at Boot. Die Frage, ob wir auf die Netzwerkverbindung beim booten warten möchten, mit <Yes> bestätigen und anschließend <Ok>.

Die Raspberry Pi Konfiguration verlassen, in dem per Tab-Taste zu <Finish> navigiert wird.

Erster Test mit Raspberry Pi OS 11 Bullseye

Nun sind die wichtigsten Schritte geschafft und wir können den Pi neu starten:

sudo reboot

Der erste Start kann länger dauern als sonst. Hat alles funktioniert, sollte uns lsb_release bestätigen, dass wir nun ein Raspberry Pi OS in Version 11 verwenden:

$ lsb_release -dr
Description:    Raspbian GNU/Linux 11 (bullseye)
Release:        11

Sowohl Apache2 als auch PHP wurden ebenfalls erfolgreich aktualisiert:

$ apache2ctl  -v
Server version: Apache/2.4.51 (Raspbian)
Server built:   2021-10-07T17:49:44

Abschließende Aufräumarbeiten

Wie ihr zuvor beim Upgrade gesehen habt, sind einige der installierten Pakete z.B. durch Abhängigkeiten nicht mehr benötigt. Es macht daher Sinn, diese Pakete zu entfernen und damit den Pi zu bereinigen:

sudo apt autoremove

Fazit und weiteres Vorgehen

Für das weitere Vorgehen solltet ihr nun eure Anwendungen prüfen: Funktioniert alles? Läuft das System stabil? Enthalten die Logs Fehler? Ob und wenn ja welche Probleme hier auf euch zukommen, kommt stark auf eure individuelle Umgebung an. Sind diese (noch) nicht lösbar, greift bei Bedarf auf euer gesichertes Image zurück. Bei Problemen kann ggf. auch der Upgrade-Thread im RPI-Forum hilfreich sein. Dort werden vereinzelt Probleme diskutiert, die durch das Upgrade entstanden sind.

Grundsätzlich ist es inoffiziell möglich, das Raspberry Pi OS In-Place zu aktualisieren. Ich hoffe, euch hat dieser Beitrag geholfen, um eine mögliche Alternative zur Neuinstallation aufzuzeigen.

Leave a Reply