Nach etwa drei Jahren Entwicklung wurde die Version 4.0 des Initialisierungssystems Finit (Fast init) veröffentlicht, das als einfache Alternative zu SysV init und systemd entwickelt wurde. Das Projekt basiert auf Arbeiten, die durch Reverse Engineering des Initialisierungssystems fastinit entstanden sind, das in der Linux-Firmware von Netbooks wie dem EeePC verwendet wird und für seinen sehr schnellen Bootprozess bekannt ist. Das System zielt in erster Linie darauf ab, das Booten schlanker und eingebetteter Systeme zu ermöglichen, kann jedoch auch in herkömmlichen Desktop- und Serverumgebungen eingesetzt werden. Beispiele für Einsatzszenarien wurden für Void Linux, Alpine Linux und Debian GNU/Linux vorbereitet. Der Code des Projekts ist in C geschrieben und wird unter der MIT-Lizenz veröffentlicht.
Finit unterstützt Ausführungslevel (Runlevel) im Stil von SysV-Init, überwacht die Funktionsfähigkeit von Hintergrundprozessen (automatischer Neustart des Dienstes im Fehlerfall), führt einmalige Handler aus, startet Dienste unter Berücksichtigung von Abhängigkeiten und beliebigen Bedingungen und ermöglicht das Anheften zusätzlicher Handlers zur Ausführung vor oder nach dem Dienst. Zum Beispiel kann der Dienst so konfiguriert werden, dass er nur nach dem Erhalt eines Netzwerkzugangs oder nachdem ein anderer Dienst wie syslogd gestartet wurde, ausgeführt wird. Einschränkungen werden mit Cgroups v2 gesetzt.
Um die Funktionalität zu erweitern und an die eigenen Bedürfnisse anzupassen, können Plugins verwendet werden, für die ein Hook-System bereitgestellt wird, das die Anheftung von Handlern an verschiedene Phasen des Ladevorgangs und der Ausführung von Diensten sowie die Bindung an externe Ereignisse ermöglicht. Beispielsweise sind Plugins für die Unterstützung von D-Bus, ALSA, Netlink, resolvconf, Hotplug von Geräten, Überprüfung der Verfügbarkeit und das Laden von Kernelmodulen, die Verarbeitung von PID-Dateien und die Konfiguration der Umgebung für den X-Server vorbereitet.
Es wird die Nutzung von Standard-Skripten zur Aktivierung von Diensten unterstützt, die für SysV init entwickelt wurden (/etc/rc.d und /etc/init.d werden nicht verwendet, aber die Unterstützung für /etc/inittab kann über ein Plugin realisiert werden), sowie von rc.local-Skripten, Umgebungsvariablen-Dateien und Netzwerkeinstellungen in /etc/network/interfaces, ähnlich wie in Debian und BusyBox. Die Einstellungen können entweder in einer einzelnen Konfigurationsdatei /etc/finit.conf definiert oder auf mehrere Dateien im Verzeichnis /etc/finit.d verteilt werden.
Die Verwaltung erfolgt über die Standardwerkzeuge initctl und run-parts, die es ermöglichen, Dienste basierend auf den Ausführungsebenen zu aktivieren und zu deaktivieren sowie selektiv einen Teil der Dienste zu starten. Finit umfasst auch eine eingebaute Implementierung von getty (Terminal-Management und Benutzeranmeldung), einen Watchdog zur Überwachung der Funktionsfähigkeit und einen Wiederherstellungsmodus nach einem Ausfall mit integriertem sulogin zur Ausführung einer isolierten Kommandozeile.

Zu den Änderungen, die in der Version Finit 4.0 hinzugefügt wurden (Version 3.2 wurde aufgrund von Änderungen, die die Abwärtskompatibilität beeinträchtigen, übersprungen):
- Das separate Reboot-Utility wurde durch einen symbolischen Link auf initctl ersetzt, analog zu den Utilities halt, shutdown, poweroff und suspend.
- Es wurde eine Fortschrittsanzeige für den Abschluss von Operationen implementiert.
- Die Funktionsweise der Befehle „inictl cond set|clear COND“ wurde geändert, um Aktionen an verschiedene Ereignisse zu binden. Zur Identifikation von Diensten wird die Syntax anstelle der Bindung an den Pfad verwendet.
- Die integrierte Implementierung wurde entfernt. Server inetd, bei Bedarf kann xinetd installiert werden.
- Unterstützung für cgroups v2 wurde hinzugefügt, um Dienste in separaten cgroups zu starten.
- Ein Wiederherstellungsmodus mit eigenem suslogin wurde hinzugefügt.
- Unterstützung für Start-/Stopp-Skripte von SysV init wurde hinzugefügt.
- Pre:script und post:script-Handler wurden hinzugefügt, die eigene Aktionen vor oder beim Starten des Dienstes angeben lassen.
- Unterstützung für env:file mit Umgebungsvariablen wurde hinzugefügt.
- Die Möglichkeit, beliebige PID-Dateien zu überwachen, wurde hinzugefügt.
- Die Möglichkeit, Aufgaben und Dienste mit relativen Pfaden zu starten, wurde hinzugefügt.
- In initctl wurde die Option „-b“ für die Ausführung von Aktionen im nicht-interaktiven Modus (Batchmodus) hinzugefügt.
- Der integrierte Watchdog wurde durch eine separate Version namens watchdogd ersetzt.
- Ein Plugin zur automatischen Lade von Kernelmodulen für während des Betriebs angeschlossene Geräte wurde hinzugefügt.
- Ein Plugin zur Verarbeitung von /etc/modules-load.d/ wurde hinzugefügt.
- Die Unterstützung für das automatische Neustarten von Diensten nach Änderungen an den Einstellungen wurde hinzugefügt, wodurch die manuelle Ausführung des Befehls „initctl reload“ unnötig wird. Standardmäßig deaktiviert und erfordert eine Neubau mit „./configure —enable-auto-reload“.
- Die Möglichkeit zur Protokollierung von sicherheitsrelevanten Operationen wurde hinzugefügt, wie z.B. das Ändern des Runlevels, das Starten und Stoppen von Diensten sowie Dienstfehlern.
- Die Unterstützung von /etc/network/interfaces wurde verbessert.
Quelle: opennet.ru
