Wenn Sie nicht unter einem Stein gelebt haben, oder noch schlimmer - Ihnen ist es egal, wie Linux funktioniert, müssen Sie von systemd gehört haben, dem (relativ) neuen init-System, das die alte und veraltete SysV-init ersetzt, die kürzlich von den meisten großen Linux-Systemen übernommen wurde Distributionen.

Was ist ein Init-System?

Wenn Ihr Linux-Rechner startet, wird zuerst ein "eingebauter" Code ausgeführt, der zuerst vom BIOS oder UEFI geladen wird, gefolgt vom Bootloader, der entsprechend seiner Konfiguration einen Linux-Kernel lädt. Der Kernel lädt Treiber und startet als allerersten Job den Init-Prozess, dem als erster die PID (Process ID) 1 zugewiesen wird.

Aus der Sicht des Anwenders sieht das so aus, als würde man Netzwerke und Datenbanken usw. starten, aber in Wirklichkeit findet unter der Haube ein ziemlich komplexer Prozess statt. Dienste werden gestartet, gestoppt und neu gestartet, oft parallel zueinander. Einige werden unter anderen Privilegien als andere ausgeführt, Dienststatus werden gemeldet und protokolliert, und viele andere Aufgaben werden ausgeführt, die den unterschiedlichen Teil Ihres Systems zum Funktionieren bringen und mit seinen Benutzern und der Umgebung interagieren können.

Wie dies umgesetzt wird, ist jedoch alles andere als einheitlich, und hier hört es wirklich auf, einheitlich und klar definiert zu sein.

Das alte Init-System

Das von den meisten Mainstream-Linux-Distributionen bis vor kurzem verwendete init-System war System V init (oder kurz SysV init), das seinen Namen von UNIX System V (Ausgeprägtes "System Five"), dem ersten kommerziell erhältlichen UNIX-System, abgeleitet hat. System V OS hatte eine spezielle Möglichkeit, seinen Init-Prozess auszuführen, und SysV init hat dies über die Jahre hinweg treu gehalten.

Und es ist viele Jahre her. UNIX System V wurde ursprünglich im Jahr 1983 veröffentlicht, was den init SysV init zu einem über 30 Jahre alten Ansatz macht, Linux-Maschinen zu starten.

Die Notwendigkeit für eine Veränderung

Wie bereits erwähnt, ist SysV init veraltet und längst überfällig. Einige der Gründe dafür sind:

  • SysV init verwendet / sbin / init, um den Init-Prozess zu starten, aber init selbst hat eine sehr begrenzte Rolle. init macht wenig mehr als das Starten von /etc/init.d/rc, entsprechend der Konfiguration, die aus / etc / inittab gelesen wird, die wiederum Skripte ausführt, um die eigentliche Arbeit des init-Prozesses zu erledigen. Dies geschieht, wenn es nicht explizit paneelisiert wird (wie bei startpar auf Debian), sequentiell, wobei ein Skript nach dem anderen beginnt, wodurch der gesamte Prozess langsam wird, da jedes Skript auf den Abschluss des vorherigen warten muss.
  • SysV init hat keinen Zugriff auf die PID oder die Prozesse, die sie (indirekt) gestartet hat. Es liest nur PIDs und ordnet sie auf eine umständliche und komplizierte Weise den tatsächlichen Prozessen zu.
  • Für Systemadministratoren, die versuchen, die Umgebung zu ändern, unter der ein bestimmter Prozess starten würde, ist es mit SysV init ziemlich schwierig. (Um dies zu erreichen, müssen sie das Init-Feld modifizieren, das dafür verantwortlich ist, den gegebenen Prozess zu starten.)
  • Es gibt bestimmte Funktionen, die für jeden Dienst gelten, den SysV nicht implementiert, aber jeder Prozess müsste sich stattdessen selbst implementieren, etwa indem er sich selbst "dämmt" (ein Systemdämon wird), was ein aufwendiger und langer Prozess ist. Anstatt diese Schritte einmal durchzuführen, benötigt SysV, dass jeder Prozess die Aufgabe selbst erledigt.
  • SysV überlässt auch externen Programmen bestimmte Funktionen und weiß nichts über Dienste, die von diesen gestartet werden.

All das und viele weitere Designfehler, oder eher das veraltete Systemdesign von SysV, hat die Erstellung eines modernen Init-Systems überfällig gemacht.

Geben Sie Systemd ein

Es gab viele Versuche, ein alternatives Init-System zu erstellen, von dem systemd nur eines ist. Ubuntu verwendete früher sein eigenes Init-System namens "upstart". Gentoo benutzt immer noch OpenRC. Andere Init-Systeme umfassen initng, busybox-init, runit und Mudur und andere.

Der Grund, warum systemd ein klarer Gewinner ist, ist, dass es von den meisten großen Distributionen übernommen wurde. RHL und CentOS gingen natürlich den Systemweg, da Fedora 2011 die erste Distribution war, die Systemd offiziell einführte. Aber systemd ist wirklich das einzige Init-System geworden, um sie alle zu beherrschen, als Debian 8 offiziell zu systemd wechselte und Ubuntu und Derivate mitbrachte, die anfängliche Opposition von Canonical (oder genauer Mark Shuttleworth) gegenüber systemd überwindend.

Wie ist Systemd anders?

  • 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 behält dabei ihre Abhängigkeiten im Auge. Es kann sogar einen Prozess als Antwort auf die Abhängigkeitsanforderungen eines anderen Prozesses starten.
  • Zusätzlich zum Starten und Stoppen von Prozessen während der Startzeit kann Systemd auch jederzeit gestartet werden, wenn das System als Reaktion auf bestimmte Triggerereignisse wie etwa wenn ein Gerät angeschlossen ist.
  • Es erfordert auch keine Prozesse, um sich selbst zu dämonisieren. Im Gegensatz zu SysV init kann systemd Dienste ausführen, ohne den langen Prozess des Daemons durchmachen zu müssen.
  • Im Gegensatz zu SysV init kennt und verfolgt systemd alle Prozesse, einschließlich PIDs, und das Abrufen von Informationen über Prozesse ist für Systemadministratoren unter Systemd wesentlich einfacher.
  • Systemd unterstützt Container, bei denen es sich im Grunde um isolierte Serviceumgebungen handelt, ohne dass virtuelle Maschinen erforderlich sind. Dies hat ein großes Potenzial für sicherere und einfachere Systemdesigns in der Zukunft.

Natürlich sind dies nur einige der Hauptvorteile. Für eine vollständige Diskussion über die Vorteile von Systemd sollten Sie Debian 8's "Systemd Position Statement" lesen

Kontroverse

Natürlich wurde Systemd nicht von allen begrüßt. In der Tat, viele haben und immer noch stirnrunzeln darüber, es monolithisch und umständlich, einige sogar beschuldigen es der "Windows-Weg" der alles zentralisiert zu haben. Viele argumentieren, dass es nicht "der Linux-Weg" ist, und sicherlich scheint systemd nicht in Übereinstimmung mit POSIX-Standards zu sein, und wenn wir systemd als ein Toolkit (jenseits nur der Binärdatei) betrachten, ist es definitiv hugae.

Dennoch ist Systemd eindeutig ein Fortschritt, und obwohl es nicht perfekt ist, wurde ein Großteil der Kritik von seinem ursprünglichen Autor und Entwickler Lennart Pöttering angesprochen. Es ist definitiv eine dringend benötigte Weiterentwicklung und ein Schritt vom alten Init-System. Linus Torvalds, der Schöpfer von Linux, scheint systemd nicht zu sehr zu stören, und wer sind wir, um mit "The Creator" zu argumentieren.

Fazit

Nachdem Systemd von allen gängigen Linux-Distributionen übernommen wurde, bleibt es bestehen. Was Systemadministratoren aus welchen Gründen auch immer sagen mögen, Systemd ist die Zukunft des Mainstream-Linux, ob einzelne Benutzer es mögen oder nicht, was angesichts seiner besonderen Vorteile nicht unbedingt eine schlechte Sache ist.

Für den durchschnittlichen Benutzer bringt es schnellere Boot-Zeiten und wahrscheinlich zuverlässigere Systeme mit sich, während in Zukunft verteilende Distributionen "kompatibler" miteinander werden können. Auf der Nutzerseite werden wir definitiv von dem aktuelleren und aktuelleren Systemdesign profitieren, das es auf unseren Desktops bringt.