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
