Eine Tutorialreihe zur Einrichtung einer Rollbackfunktion in Arch Linux unter Nutzung von Unified Kernel Images und systemd-boot.
Inhaltsverzeichnis
- Einleitung (das ist dieser Artikel)
- Teil 1: Unified Kernel Image & systemd-boot einrichten in Arch Linux
- Teil 2: Automatische Btrfs Snapshots mit `snapper` und Co.
- Teil 3: Arch Linux Bootbare Btrfs Snapshots mit UKIs
Einleitung
Auf meiner Arch Linux Installation mit Btrfs Dateisystem nutzte ich als Rollbacksystem für eine lange Zeit grub-btrfs, um im Falle eines nicht mehr bootenden Systems einen alten Snapshot eines funktionierenden Systemzustands zu booten und das System auf diesen zurückzusetzen. Als mir auffiel, dass ich diese Funktionalität kaum benötige, bin ich auf systemd-boot und Unified Kernel Images (UKI) umgestiegen – unter anderem auch im Kontext von Secure Boot (ich empfehle sbctl, vereinfacht die Einrichtung immens und signiert UKIs automatisch) , aber auch, um mich mit neuen Konzepten vertraut zu machen.
Die Rollbackfunktion liess ich liegen. Ironischerweise geschah es dann doch: Mit Upgrade auf die Systemd Version 259 wollte mit aktiviertem TPM mein Laptop nicht mehr booten (Details). Der Fix war einfach: TPM in der UEFI Firmware deaktivieren und auf Systemd Version 260 warten. Dennoch hinterliess dieser Vorfall bei mir Spuren. Daraufhin habe ich nach einer ähnlichen Lösung wie grub-btrfs gesucht, die mit systemd-boot und UKIs kompatibel ist. Da ich kein passendes, direkt umsetzbares Setup gefunden habe, habe ich mir nach etwas Recherche eine eigene Lösung gebaut und ein Tutorial verfasst. Zuerst war es ein längeres Dokument, welches alle Schritte beinhaltete, die einzelnen Teile aber etwas ungenau beschrieb. Danach habe ich mich doch entschieden, es aufzuspalten und die einzelnen Teile etwas detaillierter zu beschreiben.
Die einzelnen Teile sind in sich geschlossene Tutorials für den jeweiligen Abschnitt.
Setup
Dieses Dokument dient als Einleitung. Ziel dieses Setups: Bootbare Btrfs Snapshots über systemd-boot und Unified Kernel Images, ähnlich wie grub-btrfs. Startet das System nicht mehr, wird im Bootmenü ein funktionierender Snapshot gewählt, gebootet und anschliessend ein Rollback durchgeführt. Nach einem Neustart ist das System wiederhergestellt.
Kurze übersicht: (wird in den nächsten Teilen detaillierter beschrieben). Um direkt einen Snapshot über eine UKI zu booten, muss dem Kernel der Parameter rootflags= übergeben werden, der die ID des zu mountenden Btrfs Subvolumes (Snapshot) als Option für die Root Subvolume beinhaltet (rootflags=subvolid=x).
Auf diese Weise speichere ich die letzten 10 Systemzustände als eigene UKI auf der Efi System Partition (ESP) unter /efi, die automatisch im Bootmenü von systemd-boot als Einträge erscheinen. Vor jedem Upgrade erstellt snap-pac mit snapper einen Snapshot der Root Subvolume. Anschliessend erzeugt ein Pacman Hook eine neue UKI, die genau auf diesen Snapshot zeigt und löscht gleichzeitig alte Einträge. Danach wird das System normal aktualisiert.
Alternativ existiert die Möglichkeit, im initramfs selbst ein Menu zu implementieren welches dynamisch Snapshots laden kann. Ein Vorteil wäre, dass so Speicher in der ESP gespart wird (es wird nur eine UKI benötigt). Diese Variante habe ich allerdings nicht näher untersucht, da sie deutlich komplexer ist (viel Logik im early boot mit eigenem Hook) und ich mich nicht gut genug damit auskenne. Wäre technisch aber auch eine saubere Lösung.
Benötigte Pakete:
snapper, Grundbaustein, Snapshot Managersnap-pac, Erstellt vor und nachpacmanOperationen Snapshots mitsnappersnapper-rollback(AUR): Optional, vereinfacht den Rollback auf einen älteren Snapshot
Anforderungen:
- UEFI Motherboard
- Ein Btrfs Dateisystem Layout wie im Arch Wiki Eintrag für Snapper beschrieben
- Kernel wird in
/bootgespeichert - ESP wird auf
/efigemountet - ESP mit einer empfohlenen Mindestgrösse von 500MB
- UKIs werden in
/efigespeichert
Die Tutorialreihe beschreibt die Einrichtung auf einem Arch Linux System. Der grundlegende Ablauf sollte unabhängig von der verwendeten Distro funktionieren. Du wirst allerdings Alternativen finden müssen:
- Eigene Hooks für deinen Paketmanager schreiben
- Ein anderes Tool für den Bau von UKIs finden (z.B.
systemd-ukify) - Script leicht anpassen
- Alternativen für
snap-pacundsnapper-rollbackfinden
Für fortgeschrittene Arch Benutzer geeignet (ich möchte auch Anfänger sagen). Die Tutorialreihe habe ich selbst genutzt, um mein Zweitgerät einzurichten. Es ist mittlerweile ca. 1-2 Monate im Gebrauch und ich konnte keine Mängel feststellen. Allfällige Fragen versuche ich so gut wie es geht in den Kommentaren zu beantworten.
Im nächsten und ersten Artikel wird der Ablauf beschrieben, um von einem traditionellen Boot Stack mit GRUB auf Unified Kernel Images & systemd-boot zu wechseln.
Quellen:
https://wiki.archlinux.org/title/Main_page