System… was?

systemd ist heute für jeden Linux-Admin ein gängiger Standard, wenn es darum geht, Dienste und Systemeinstellungen unter Linux zu verwalten oder bei Problemen zu analysieren. Dabei handelt es sich um eine umfangreiche Sammlung aus Programmen, Daemons und Bibliotheken, die gemeinsam den Start, das Management und das Herunterfahren eines Linux-Systems steuern.

Systemd strukturiert seine Aufgaben in sogenannte Units und fasst mehrere einzelne Units wiederum zu Targets zusammen. Das ermöglicht ein flexibles und performantes System zur Steuerung des gesamten Systemstarts und vieler Hintergrunddienste.

Zentrales Herzstück von systemd ist der systemd-Init-Prozess. Er erhält die Prozess-ID 1 und ist damit der allererste Prozess, der im Userspace und damit auch in der letzten Phase des Bootvorgangs eines auf systemd basierenden Linux-Systems ausgeführt wird.

Alle folgenden Prozesse im Startvorgang gehen auf den systemd-Init-Prozess zurück. Ein Init-System ist also dafür verantwortlich, den Systemstart zu organisieren und grundlegende Dienste als Voraussetzung für den weiteren Ablauf bereitzustellen. Als PID 1 übernimmt systemd genau diese Aufgabe. Es organisiert und überwacht den Start nachfolgender Dienste und sorgt so dafür, dass das System in einem konsistenten Zustand bleibt. Wo kommt systemd also das erste mal in Aktion?


Der Linux-Boot-Prozess im Überblick

Bevor systemd aktiv wird, durchläuft ein Linux-System bekannterweise vier grundlegende Boot-Phasen.

Phase 1: UEFI

Nach dem Einschalten führt das UEFI den POST durch und prüft grundlegende Hardware. Läuft alles fehlerfrei, startet die nächste Phase.

Phase 2: Bootloader

UEFI lädt den Bootloader aus der EFI-Systempartition (ESP). Unter Linux ist das meist GRUB, der den zu startenden Kernel auswählt.

Phase 3: Linux-Kernel

Der Kernel wird in den RAM geladen, initialisiert die Hardware, mountet das Root-Dateisystem und startet /sbin/init – in modernen Systemen ein Symlink auf systemd.

Phase 4: systemd

Systemd übernimmt und startet alle notwendigen Dienste anhand definierter Abhängigkeiten, darunter Netzwerk, Mountpoints, Hintergrundprozesse, Benutzerumgebungen und alle enabled Unit-Files (Autostart).


Systemd lernen und verstehen

Experimente mit systemd empfand ich als lehrreich, aber ich spreche aus eigener Erfahrung: Man sollte wissen, was man tut. Wenn man sich verbastelt, kann ein System leicht in einem kaputten Zustand landen. Daher möchte ich an dieser Stelle eine praktische Webseite vorstellen, das mir schon vor langer Zeit empfohlen wurde.

Ein praktisches Tool zum Lernen von systemd

Eine praktische Einführung in systemd, die mir bereits vor langer Zeit von einem Freund empfohlen wurde, ist:

systemd-by-example.com

Die Seite stammt von Sebastian Jambor.

Wie der Name schon sagt, hilft dieses Projekt dabei, systemd anhand von Beispielen zu lernen und zu verstehen. Die virtuelle Umgebung ermöglicht es, systemd interaktiv direkt im Browser zu erkunden. Beispiele können erstellt werden, ohne das eigene System zu gefährden.

In den ersten Lektionen kann man die vierte Phase des Startvorgangs nachvollziehen, manipulieren, eigene Units schreiben und vieles mehr. Damit eignet sich die Seite perfekt, um systemd Schritt für Schritt zu begreifen und gleichzeitig selbst zu experimentieren.

Besonders hilfreich ist, dass das Tool einen mithilfe einer virtuellen Umgebung durch die erste Lektion führt, in der der grundlegende Aufbau des systemd-Init-Prozesses erklärt wird.

Es gibt insgesamt vier Teile, die alle auf einer Podman-basierten Ubuntu-VM getestet werden können.

Zusätzlich bieten begleitende Artikel eine hervorragende Ergänzung zur interaktiven Lernumgebung und führen Schritt für Schritt tiefer in den Aufbau und die Funktionsweise von systemd ein.

Vielen Dank an dieser Stelle für die tolle Arbeit und das großartige Tool!