Systemd – Was Sie wissen müssen

Es sei denn, Sie leben unter einem Stein oder, schlimmer noch – Sie interessieren sich nicht sonderlich dafür, wie Linux funktioniert, dann müssen Sie von systemd gehört haben, dem (relativ) neuen Init-System, das das alte und veraltete SysV-Init ersetzt hat, das kürzlich von den meisten großen Linux-Distributionen übernommen wurde.

Was ist ein Init-System?

Wenn Ihre Linux-Maschine hochfährt, wird zunächst ein gewisser “eingebauter” Code ausgeführt, der zuerst vom BIOS oder UEFI geladen wird, gefolgt vom Bootloader, der gemäß seiner Konfiguration einen Linux-Kernel lädt. Der Kernel lädt Treiber und startet als seine erste Aufgabe den Init-Prozess, der als Erster die PID (Process ID) 1 zugewiesen bekommt.

Aus der Sicht des Benutzers sieht das so aus, als würden Netzwerk und Datenbanken usw. gestartet, aber in Wirklichkeit findet im Hintergrund ein recht komplexer Prozess statt. Dienste werden gestartet, gestoppt und neu gestartet, oft parallel zueinander. Einige werden mit unterschiedlichen Berechtigungen als andere ausgeführt, der Status der Dienste wird gemeldet und protokolliert, und viele weitere Aufgaben werden durchgeführt, die die verschiedenen Teile Ihres Systems funktionsfähig machen und es ermöglichen, mit Benutzern und der Umgebung zu interagieren.

systemd-linux-boot

Wie das jedoch umgesetzt wird, ist alles andere als einheitlich, und hier endet das Ganze, gemeinsam und gut definiert.

Das alte Init-System

Das Init-System, das bis vor Kurzem von den meisten gängigen Linux-Distributionen verwendet wurde, war System V Init (oder kurz SysV Init), das seinen Namen von UNIX System V (auch “System Five” ausgesprochen) ableitet, dem ersten kommerziell verfügbaren UNIX-System. Das System V-Betriebssystem hatte eine spezielle Art, seinen Init-Prozess auszuführen, und SysV Init hat sich über die Jahre hinweg daran gehalten.

systemd-sysvinit

Und das sind viele Jahre. UNIX System V wurde ursprünglich 1983 veröffentlicht, was SysV Init zu einem über 30 Jahre alten Ansatz zur Hochfahren von Linux-Maschinen macht.

Der Bedarf an einer Veränderung

Wie bereits festgestellt wurde, ist SysV Init veraltet und schon lange überfällig, ersetzt zu werden. Einige Gründe hierfür sind:

  • SysV Init verwendet /sbin/init, um den Init-Prozess zu starten, aber Init hat selbst eine sehr begrenzte Rolle. Init startet kaum mehr als /etc/init.d/rc, gemäß der Konfiguration, die aus /etc/inittab gelesen wird, was wiederum Skripte ausführt, um die eigentliche Arbeit des Init-Prozesses zu erledigen. Dies, es sei denn, es wird ausdrücklich parallelisiert (wie mit startpar in Debian), passiert sequenziell, wobei ein Skript nach dem anderen gestartet wird, was den gesamten Prozess verlangsamt, da jedes Skript auf den Abschluss des vorherigen warten muss.
  • SysV Init hat keinen Zugriff auf die PID oder die Prozesse, die es (indirekt) gestartet hat. Es liest nur PIDs und verknüpft sie auf umständliche und komplizierte Weise mit tatsächlichen Prozessen.
  • Für Systemadministratoren, die versuchen, die Umgebung zu ändern, unter der ein bestimmter Prozess gestartet werden soll, ist es mit SysV Init recht schwierig. (Um dies zu erreichen, müssen sie das Init-Skript ändern, das für das Starten des gegebenen Prozesses verantwortlich ist.)
  • Es gibt bestimmte Funktionalitäten, die für jeden Dienst gemeinsam sind und die SysV nicht implementiert, die jedoch jeder Prozess selbst implementieren müsste, wie beispielsweise “Daemonisieren” (zum Systemdaemon werden), was ein aufwendiger und langwieriger Prozess ist. Anstatt diese Schritte einmal zu implementieren, verlangt SysV von jedem Prozess, die Arbeit selbst zu erledigen.
  • SysV lässt auch bestimmte Funktionalitäten externen Programmen über und weiß nichts über Dienste, die von diesen gestartet werden.

All dies und viele weitere Entwurfsfehler oder vielmehr das veraltete Systemdesign von SysV haben die Schaffung eines modernen Init-Systems längst überfällig gemacht.

Einführung von systemd

Es gab viele Versuche, ein alternatives Init-System zu schaffen, von denen systemd nur eines ist. Ubuntu hatte früher sein eigenes Init-System namens Upstart. Gentoo verwendet weiterhin OpenRC. Weitere Init-Systeme sind initng, busybox-init, runit und Mudur und andere.

Der Grund, warum systemd ein klarer Gewinner ist, liegt darin, dass es von den meisten großen Distributionen übernommen wurde. RHL und CentOS sind natürlich den systemd-Weg gegangen, da Fedora die erste Distribution war, die 2011 offiziell systemd übernommen hat. Aber systemd hat sich wirklich zum einen Init-System entwickelt, das sie alle herrscht, als Debian 8 offiziell zu systemd wechselte und damit Ubuntu und Abkömmlinge mit sich brachte und die anfängliche Opposition von Canonical (oder präziser gesagt Mark Shuttleworth) gegenüber systemd überwunden hat.

Wie unterscheidet sich systemd?

  • Systemd zielt darauf ab, einen einzigen, zentralisierten Weg zu bieten, um den Init-Prozess von Anfang bis Ende zu handhaben.
  • Es startet und stoppt Prozesse und Dienste und verfolgt dabei deren Abhängigkeiten. Es kann sogar einen Prozess als Antwort auf die Abhängigkeit eines anderen Prozesses starten.
  • Zusätzlich zum Starten und Stoppen von Prozessen während der Boot-Zeit kann Systemd auch jederzeit starten, wenn das System läuft, als Reaktion auf bestimmte Triggerereignisse, wie zum Beispiel, wenn ein Gerät eingesteckt wird.
  • Es erfordert auch nicht, dass Prozesse sich selbst daemonisieren. Im Gegensatz zu SysV Init kann systemd Dienste verwalten, die ohne den langen Prozess des “Daemon-Werdens” laufen.
  • Im Gegensatz zu SysV Init kennt und verfolgt systemd alle Prozesse, einschließlich der PIDs, und Informationen über Prozesse zu erhalten, ist für Systemadministratoren unter systemd viel einfacher.
  • Systemd unterstützt Container, die im Wesentlichen isolierte Dienstumgebungen sind, ohne die Notwendigkeit virtueller Maschinen. Dies hat großes Potenzial für sicherere und einfachere Systemdesigns in der Zukunft.

systemd-containers

Natürlich sind dies nur einige der wichtigsten Vorteile. Für eine vollständige Diskussion über die Vorteile von systemd sollten Sie die “Systemd-Positions-Erklärung” von Debian 8 lesen.

Kontroversen

Natürlich wurde systemd nicht von allen begrüßt. Tatsächlich haben viele es und tun dies immer noch mit Missmut, nennen es monolithisch und umständlich, einige beschuldigen es sogar, den “Windows-Weg” zu gehen, alles zu zentralisieren. Viele argumentieren, dass es nicht “der Linux-Weg” sei, und sicher scheint systemd nicht den POSIX-Standards zu entsprechen, und wenn wir systemd als Werkzeugkasten betrachten (über das Binärprogramm hinaus), ist es definitiv riesig.

systemd-infographic

Dennoch ist systemd eindeutig ein Schritt nach vorne, und obwohl es nicht perfekt ist, wurde ein Großteil der Kritik, die es erhalten hat, von seinem ursprünglichen Autor und Entwickler Lennart Poettering angesprochen. Es ist auf jeden Fall ein dringend benötigter Fortschritt und ein Schritt nach oben vom alten Init-System. Linus Torvalds, der Schöpfer von Linux, scheint sich nicht zu sehr um systemd zu kümmern, und wer sind wir, um mit “dem Schöpfer” zu argumentieren.

Fazit

Da es von allen großen Linux-Distributionen übernommen wurde, ist systemd hier, um zu bleiben. Was einige Systemadministratoren aus irgendwelchen Gründen sagen, systemd ist die Zukunft von mainstream Linux, ob einzelnen Benutzern es gefällt oder nicht, was, betrachtet man die besonderen Vorteile, nicht unbedingt eine schlechte Sache ist.

Für den durchschnittlichen Benutzer bringt es schnellere Bootzeiten und wahrscheinlich zuverlässigere Systeme, während in Zukunft Distributionen, die es annehmen, “kompatibler” miteinander werden können. Auf der Benutzerseite werden wir sicherlich von dem zeitgemäßeren und zeitgerechteren Systemdesign profitieren, das es auf unsere Desktops bringt.