Die erste öffentliche Veröffentlichung des Nitro-Projekts wurde veröffentlicht, das ein minimalistisches Initialisierungssystem mit Funktionen zur Prozessüberwachung entwickelt. Das Projekt wird von Leah Neukirchen, einer der Paketbetreuerinnen im Void Linux-Distribution, vorangetrieben. Der Code ist in der Programmiersprache 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 reibungslose Ausführung von Anwendungen im Benutzerspace überwacht und bei Fehlern Aufgaben neu startet. Es wird Unterstützung für Linux und FreeBSD geboten, und der Einsatz in Umgebungen auf Basis der Standard-C-Bibliothek Musl ist möglich. Zu den Anwendungsbereichen werden eingebettete Systeme, RAM-Disk-Images (initramfs), Container (Docker/Podman/LXC/Kubernetes) sowie Arbeitsstationen und Serversysteme genannt. Zur Verwaltung von Diensten und zur Interaktion mit dem Init-Prozess wird das Kommandozeilenwerkzeug nitroctl bereitgestellt.
Statt zusammengesetzter Initialisierungsskripten verwendet Nitro ein Modell, bei dem jede Funktion in ein eigenes Skript ausgelagert wird. Für jeden Dienst wird im Verzeichnis /etc/nitro ein Unterverzeichnis erstellt, in dem folgende Skripte platziert werden können: setup — enthält Befehle, die vor dem Start des Dienstes ausgeführt werden; run — definiert das Startverfahren des Dienstes; finish — umfasst Befehle, die nach der Beendigung des Dienstes ausgeführt werden. Zur Protokollierung wird ein symbolischer Link mit dem Namen log verwendet, der auf einen anderen Dienst zeigt, an den die Ausgabe umgeleitet wird. Um den Autostart eines Dienstes zu deaktivieren, genügt es, im entsprechenden Verzeichnis eine Datei mit dem Namen „down“ zu erstellen, und um den Dienst zu ignorieren, sollte ein „@“-Symbol zum Verzeichnisnamen hinzugefügt werden.
Der Autor des Projekts hebt die folgenden Vorteile von Nitro im Vergleich zu anderen Initialisierungssystemen hervor:
- Der gesamte Zustand wird im RAM gespeichert, was die Arbeit in Umgebungen mit schreibgeschützten Partitionen erleichtert.
- Eine Architektur basierend auf Ereignisverarbeitung, die kein Polling verwendet.
- Keine Speicherzuweisungen während des Betriebs (alle Puffer werden beim Start zugewiesen).
- Begrenzte Verwendung von Dateideskriptoren während des Betriebs.
- Lieferung in Form einer selbständigen ausführbaren Datei und eines Dienstprogramms zur Systemverwaltung.
- Das Fehlen von Kompilierungsphasen in der Konfiguration – der Betrieb des Dienstes wird durch einfache Skripte im zugehörigen Verzeichnis des Dienstes bestimmt.
- Vorhandensein einer Funktion zum Neustart von Diensten nach einem Ausfall.
- Vorhandensein eines Protokollierungssystems, das sowohl standardmäßig als auch selektiv für einzelne Dienste aktiviert werden kann.
- Möglichkeit zum Aufbau einer Protokollverarbeitungs-Chain, die mehrere Dienste umfasst.
- Die Funktionalität hängt nicht von der Genauigkeit der Systemuhrzeit ab.
- Unterstützung des Starts unter FreeBSD über /etc/ttys.
- Möglichkeit zum Erstellen einer kompakten, statisch kompilierten ausführbaren Datei unter Verwendung von musl libc.
Quelle: opennet.ru
