ADMIN
2024
02
2024-01-30T12:00:00
Softwareverteilung und Patchmanagement
PRAXIS
054
Open-Source-Tipp
IoT
Linux
Fedora IoT
Leichtgewicht
von Thorsten Scherf
Veröffentlicht in Ausgabe 02/2024 - PRAXIS
Für Edge- und IoT-Systeme gelten besondere Anforderungen an das Betriebssystem, da dieses zumeist mit weitaus weniger Ressourcen seine Arbeit verrichten muss als auf klassischen Systemen in einem Rechenzentrum. Der Open-Source-Tipp in diesem Monat beleuchtet, ob die Linux-Distribution "Fedora IoT" diesen Anforderungen gerecht wird und welche Besonderheiten sie im Vergleich zum klassischen Fedora mitbringt.

Wie auch Fedora CoreOS [1] und Fedora Silverblue [2] arbeitet Fedora IoT [3] mit immutable Images auf Basis von OSTree [4]. Während CoreOS für den Einsatz einer vollständigen Kubernetes-Platform entwickelt wurde und Silverblue für die Nutzung auf einer Workstation mit einem grafischen Desktop daherkommt, ist der primäre Einsatzort von Fedora IoT auf Edge-, System-on-Chip- (SoC) und natürlich IoT-Systemen vorgesehen.
Minimale Hardwareanforderungen
Selbstverständlich enthält die Distribution die Podman Container-Engine für den Betrieb von Container-Workloads auf den Systemen. Insofern sind die Anforderungen speziell an die Hardware im Vergleich zu CoreOS, das für den Einsatz in Kubernetes Clustern ausgelegt ist, eher gering. Das eigentliche Fedora-IoT-Image ist gerade einmal 4 GByte groß und kommt mit einem Arbeitsspeicher von 1 GByte aus.
Wieviel Sie aber tatsächlich benötigen, hängt natürlich von den Workloads ab, die Sie auf dem System laufen lassen. Auf einem Edge-Device mit mehreren Container-Applikationen werden Sie sicherlich mehr Speicher benötigen als beispielsweise auf einem Raspberry Pi. In jedem Fall stehen Images für Geräte der x86_64- und aarch64-(arm64)-Architektur zum Download [5] zur Verfügung.
Wie auch Fedora CoreOS [1] und Fedora Silverblue [2] arbeitet Fedora IoT [3] mit immutable Images auf Basis von OSTree [4]. Während CoreOS für den Einsatz einer vollständigen Kubernetes-Platform entwickelt wurde und Silverblue für die Nutzung auf einer Workstation mit einem grafischen Desktop daherkommt, ist der primäre Einsatzort von Fedora IoT auf Edge-, System-on-Chip- (SoC) und natürlich IoT-Systemen vorgesehen.
Minimale Hardwareanforderungen
Selbstverständlich enthält die Distribution die Podman Container-Engine für den Betrieb von Container-Workloads auf den Systemen. Insofern sind die Anforderungen speziell an die Hardware im Vergleich zu CoreOS, das für den Einsatz in Kubernetes Clustern ausgelegt ist, eher gering. Das eigentliche Fedora-IoT-Image ist gerade einmal 4 GByte groß und kommt mit einem Arbeitsspeicher von 1 GByte aus.
Wieviel Sie aber tatsächlich benötigen, hängt natürlich von den Workloads ab, die Sie auf dem System laufen lassen. Auf einem Edge-Device mit mehreren Container-Applikationen werden Sie sicherlich mehr Speicher benötigen als beispielsweise auf einem Raspberry Pi. In jedem Fall stehen Images für Geräte der x86_64- und aarch64-(arm64)-Architektur zum Download [5] zur Verfügung.
Hybrides Image- und Paketmanagement
Interessant ist, dass sämtliche OSTree-basierten Fedora-Distributionen ein hybrides Modell für das Image- und Paketmanagement einsetzen. Verantwortlich hierfür ist rpm-ostree [6], das die beiden Bibliotheken libostree (Image-System) und libdnf (RPM-Package-System) miteinander kombiniert. Dies hat zur Konsequenz, dass Sie sowohl Images als auch reguläre RPM-Pakete auf diesen Systemen einsetzen können.
Images stehen auf Fedora-IoT-Systemen als Dateisystembaum bereit. Dieser wird als Root-Dateisystem im Read-only-Modus unterhalb des Verzeichnisses "/ostree" zur Verfügung gestellt, um davon das System booten zu können. Führen Sie ein Update des Systems durch oder installieren Sie zusätzliche Pakete, erzeugen Sie letztendlich einen neuen Layer für dieses Image. Dies hat zur Folge, dass Sie im gleichen Verzeichnis einen zusätzlichen Dateisystembaum vorfinden. Um diesen zu aktivieren, müssen Sie das System nach der Installation der neuen Pakete einmal neu booten.
Mithilfe von Hardlinks wird das neue Dateisystem als eine Art Kopie des alten Baums dargestellt, enthält jedoch die aktualisierten oder zusätzlich installierten RPM-Pakete. Das folgende Beispiel für das "/etc"-Verzeichnis zeigt, dass der Inode für diesen Ordner innerhalb und außerhalb des "/ostree"-Verzeichnisses identisch ist:
ls -1di
/ostree/boot.1/fedora-iot/f45f08a74fd958069ab3c25946dec1552ff5824d35ea43c0315346486b109b2c/0/etc/ /etc
302352 /etc
302352 /ostree/boot.1/fedora-iot/f45f08a74fd958069ab3c25946dec1552ff5824d35ea43c0315346486b109b2c/0/etc/
Somit ist ein Update immer eine atomare Funktion, was wiederrum bedeutet, dass ein Rollback zu einem älteren Image zu jeder Zeit möglich ist. Benutzerdaten bleiben zwischen den Updates natürlich erhalten, da diese ausserhalb des Dateisystembaums eines Images vorgehalten werden. Mit "/usr" existiert ein Verzeichnis, das einen schreibenden Zugriff ermöglicht.
Mit rpm-ostree zu neuen Paketen
Auf allen OSTree-basierten Fedora-Systemen können Sie zusätzliche RPM-Pakete mithilfe des Tools rpm-ostree installieren. Durch diesen Vorgang erzeugen Sie also, wie soeben beschrieben, einen neuen Dateisystembaum im Verzeichnis "/ostree". Nach einem Reboot stehen die neuen Pakete aus diesem Baum zur Verfügung. Die OSTree-Architektur können Sie sich dabei wie Git für Binärdateien vorstellen. Wie auch bei Git werden alle Dateien und Verzeichnisse mit einer Checksumme versehen und Repositories dienen zur Verwaltung der Daten. Diese können ebenfalls unterschiedliche Branches enthalten, wobei OSTree von Refs (references) statt von Branches spricht.
Das Standard-Repository, aus dem Sie Updates für das Fedora-IoT-Image erhalten, zeigen Sie mit dem folgenden Befehl an:
ostree remote list -u
fedora-iot https://ostree.fedoraproject.org/iot
Das nachfolgende Listing zeigt einen Überblick der in diesem Repository enthaltenen Refs. Ein OSTree-Respository kann mehrere Branches, oder Refs, zur Verfügung stellen:
ostree remote refs fedora-iot
fedora-iot:fedora/devel/aarch64/iot
fedora-iot:fedora/devel/armhfp/iot
fedora-iot:fedora/devel/x86_64/iot
fedora-iot:fedora/rawhide/aarch64/iot
fedora-iot:fedora/rawhide/armhfp/iot
fedora-iot:fedora/rawhide/x86_64/iot
fedora-iot:fedora/stable/aarch64/iot
fedora-iot:fedora/stable/armhfp/iot
fedora-iot:fedora/stable/x86_64/iot
Um zwischen den einzelnen Branches zu wechseln, können Sie ebenfalls das rpm-ostree-Tool einsetzen:
rpm-ostree rebase -b <ref>
Welches Image auf Ihrem System aktuell zur Verfügung steht, erfahren Sie mit
ostree admin status
* fedora-iot f08d1ba14a654ade511a777bd725b17d1218de5fbe68797940d7983c4821ba4c.0
Version: 40.20231116.0
origin refspec: fedora-iot:fedora/rawhide/x86_64/iot
GPG: Signature made Thu Nov 16 16:21:57 2023 using RSA key ID 0727707EA15B79CC
GPG: Good signature from <"Fedora fedora-40-primary@ fedoraproject.org>"
Sie können anstatt OSTree alternativ auch rpm-ostree hierfür verwenden:
rpm-ostree install composer-cli osbuild-composer
Die Ausgabe sieht dann lediglich etwas anders aus. Führen Sie nun ein Update durch oder installieren Sie zusätzliche Pakete und rufen erneut OSTree auf, taucht in der Ausgabe ein zweiter Eintrag auf:
ostree admin status
* fedora-iot 899a22063a73e2c690e9fb8dac7adf28a0bc35ac45d3c1b5642809a407b0570f.0
Version: 40.20231116.0
origin: <unknown origin type>
fedora-iot f08d1ba14a654ade511a777bd725b17d1218de5fbe68797940d7983c4821ba4c.0 (rollback)
Version: 40.20231116.0
origin refspec: fedora-iot:fedora/rawhide/x86_64/iot
GPG: Signature made Thu Nov 16 16:21:57 2023 using RSA key ID 0727707EA15B79CC
GPG: Good signature from "Fedora <fedora-40-primary@fedoraproject.org>":
Das folgende Beispiel veranschaulicht, wie Sie herausfinden, welche Dateien sich im neuen Image im Vergleich zum vorherigen verändert haben beziehungsweise welche neuen hinzugekommen sind. Der Einfachheit halber zeigen wir nur die Anzahl der Unterschiede zwischen den beiden Images:
ostree diff
f08d1ba14a654ade511a777bd725b17d1218de5fbe68797940d7983c4821ba4c 899a22063a73e2c690e9fb8dac7adf28a0bc35ac45d3c1b5642809a407b0570f|wc -l
1490
Automatische Updates
Möchten Sie das Image automatisch auf dem aktuellen Stand halten, können Sie hierfür eine Update-Policy in der Datei "/etc/rpm-ostreed.conf" definieren. Die Konfigurationsoption AutomaticUpdatePolicy" kennt dazu vier unterschiedliche Einstellmöglichkeiten: "none (default)", "check", "stage" und "apply". Verwenden Sie check, erscheint ein Hinweis über verfügbare Update in der Statusausgabe des rpm-ostree-Services, die Sie sich mittels systemctl status rpm-ostreed
anzeigen lassen können. Der Unterschied zwischen stage und apply besteht darin, dass stage alle Updates auf Ihr System lädt, aber keinen Reboot durchführt. Möchten Sie auch diesen Schritt automatisieren, verwenden Sie stattdessen apply.
Fazit
Fedora IoT stellt eine komplette Linux-Distribution mit der Podman-Container-Engine speziell für den Einsatz auf Edge-, SoC- und IoT-Geräten bereit. Durch das hybride Image- und Paket-Managementsystem rpm-ostree können Sie leicht zwischen verschiedenen Deployments wechseln, da jede Änderung an dem System-Image eine atomare Aktion darstellt. Im nächsten Monat zeigen wir im Open-Source-Tipp, wie Sie eigene Images auf Basis von Fedora IoT erzeugen, um diese dann im Anschluss auf Ihre Systemen zu verteilen.
(dr)