Die erste öffentliche Version des Projekts Nitro wurde veröffentlicht, das ein minimalistisches Initialisierungssystem mit Funktionen zur Prozessausführungskontrolle entwickelt. Das Projekt wird von Leah Neukirchen, einer Maintainerin der Pakete im Void Linux-Distribution, vorangetrieben. Der Code ist in C geschrieben und wird unter der 0BSD-Lizenz verbreitet.
Nitro kann sowohl als Init-Prozess (pid 1) als auch als unprivilegierter Prozess verwendet werden, der die unterbrechungsfreie Ausführung von Anwendungen im Benutzermodus überwacht und Aufgaben im Falle von Fehlern neu startet. Es wird sowohl unter Linux als auch unter FreeBSD unterstützt, und es ist möglich, in Umgebungen zu arbeiten, die auf der Standard-C-Bibliothek Musl basieren. Zu den Anwendungsbereichen gehören eingebettete Systeme, ramdisk-Images (initramfs), Container (Docker/Podman/LXC/Kubernetes) sowie Workstations und Serversysteme. Zur Verwaltung der Dienstesteuerung und zur Interaktion mit dem Init-Prozess wird das Kommandozeilenwerkzeug nitroctl zur Verfügung gestellt.
Anstelle zusammengesetzter Initialisierungsskripte verwendet Nitro ein Modell, bei dem jede Funktion in ein separates Skript ausgelagert wird. Für jeden Dienst wird im Verzeichnis /etc/nitro ein Unterverzeichnis erstellt, in dem folgende Skripte abgelegt werden können: setup — enthält Befehle, die vor dem Start des Dienstes ausgeführt werden; run — definiert das Start-Szenario des Dienstes; finish — umfasst die Befehle, die nach Abschluss des Dienstes ausgeführt werden. Zur Protokollführung wird ein symbolischer Link mit dem Namen log verwendet, der auf einen anderen Dienst verweist, an den die Ausgabe umgeleitet wird. Um die automatische Startfunktion des Dienstes zu deaktivieren, genügt es, im Verzeichnis eine Datei namens „down“ zu erstellen, und zur Ignorierung des Dienstes sollte ein „@“ vor den Verzeichnisnamen gesetzt werden.
Der Projektleiter hebt folgende Vorteile von Nitro im Vergleich zu anderen Initialisierungssystemen hervor:
- Der gesamte Zustand wird im RAM gehalten, was die Arbeit in Umgebungen mit schreibgeschützten Partitionen vereinfacht.
- Eine Architektur, die auf Ereignisverarbeitung basiert, ohne Polling zu verwenden.
- Es finden keine Speicherzuweisungen während des Betriebs statt (alle Puffer werden beim Start zugewiesen).
- Eingeschränkte Nutzung von Dateideskriptoren während des Betriebs.
- Bereitstellung in Form einer einzigen, eigenständigen ausführbaren Datei und einer Systemverwaltungsanwendung.
- Fehlende Phasen der Konfigurationskompilierung — die Funktionsweise des Dienstes wird durch einfache Skripte im dienstbezogenen Verzeichnis bestimmt.
- Vorhandensein einer Funktion zum Neustart von Diensten nach einem Ausfall.
- Vorhandensein eines Logging-Mechanismus, der sowohl standardmäßig als auch selektiv für bestimmte Dienste aktiviert werden kann.
- Möglichkeit, eine Logverarbeitungs-Kette zu erstellen, die mehrere Dienste umfasst.
- Betrieb ist unabhängig von der Genauigkeit der Systemuhren.
- Unterstützung für den Start in FreeBSD über /etc/ttys.
- Möglichkeit, in Form einer kompakten, statisch kompilierten ausführbaren Datei unter Verwendung von musl libc zu bauen.
Quelle: opennet.ru
