Po około trzech latach prac opublikowano wersję 4.0 systemu inicjalizacji Finit (Fast init), opracowanej jako prosta alternatywa dla SysV init i systemd. Projekt jest oparty na pracach stworzonych przy inżynierii wstecznej systemu inicjalizacji fastinit, używanego w oprogramowaniu Linux netbooków EeePC, który charakteryzuje się bardzo szybkim procesem uruchamiania. System głównie skupia się na zapewnieniu uruchamiania kompaktnych i wbudowanych systemów, ale może być także stosowany w typowych środowiskach desktopowych i serwerowych. Przykłady scenariuszy wdrożeniowych są przygotowane dla Void Linux, Alpine Linux oraz Debian GNU/Linux. Kod projektu jest napisany w języku C i jest udostępniany na licencji MIT.
Finit wspiera poziomy wykonania (runlevel) w stylu SysV init, monitorowanie stanu procesów w tle (automatyczne ponowne uruchamianie usługi w przypadku awarii), wykonywanie jednorazowych programów, uruchamianie usług z uwzględnieniem zależności i warunków, oraz dołączanie dodatkowych programów do uruchamiania przed lub po wykonaniu usługi. Na przykład, można skonfigurować uruchamianie usługi tylko po uzyskaniu dostępu do sieci lub po uruchomieniu innej usługi, takiej jak syslogd. Do określania ograniczeń stosowane są Cgroups v2.
Aby rozszerzyć funkcjonalność i dostosować ją do własnych potrzeb, można używać wtyczek, dla których udostępniono system hooków, umożliwiających podpięcie obsługi do różnych etapów uruchamiania i wykonywania usług, a także zapewnienie powiązań z zewnętrznymi zdarzeniami. Na przykład, przygotowano wtyczki do obsługi D-Bus, ALSA, netlink, resolvconf, hotplugowanie urządzeń, sprawdzanie dostępności i ładowanie modułów jądra, przetwarzanie plików PID oraz konfigurowanie środowiska dla serwera X.
Obsługiwane jest użycie typowych skryptów do uruchamiania usług, stworzonych dla SysV init (/etc/rc.d i /etc/init.d nie są używane, ale wsparcie dla /etc/inittab może być zrealizowane poprzez wtyczkę), jak również skryptów rc.local, plików z zmiennymi środowiskowymi i ustawieniami sieci w /etc/network/interfaces, jak w Debianie i BusyBox. Ustawienia mogą być określone zarówno w jednym pliku konfiguracyjnym /etc/finit.conf, jak i rozdzielone na kilka plików w katalogu /etc/finit.d.
Zarządzanie odbywa się za pomocą standardowych narzędzi initctl i run-parts, umożliwiających aktywację i dezaktywację usług w związku z poziomami uruchamiania, a także wyborcze uruchamianie części usług. Finit zawiera również wbudowaną implementację getty (zarządzanie terminalem i logowaniem użytkowników), watchdog do monitorowania wydajności oraz tryb odzyskiwania po awarii z wbudowanym sulogin, umożliwiającym uruchomienie odizolowanej powłoki poleceń.

Wśród zmian dodanych w wersji Finit 4.0 (wersja 3.2 została pominięta z powodu wprowadzenia zmian, które zaburzały kompatybilność wstecz):
- Odświeżona usługa reboot zastąpiona została symbolicznym linkiem do initctl, podobnie jak w przypadku usług halt, shutdown, poweroff i suspend.
- Zaimplementowano wskaźnik postępu dla wykonywanych operacji.
- Zmodyfikowano działanie poleceń „initctl cond set|clear COND” w celu powiązania działań z różnymi zdarzeniami. Do identyfikacji usług zastosowano składnię zamiast powiązania z ścieżkami .
- Usunięto wbudowaną implementację serwera inetd, w razie potrzeby można zainstalować xinetd.
- Dodano wsparcie dla cgroups v2 do uruchamiania usług w oddzielnych cgroup.
- Wprowadzono tryb odzyskiwania po awarii z własnym suslogin.
- Dodano wsparcie dla skryptów start/stop z SysV init.
- Dodano obsługę pre:script i post:script, które pozwalają określić własne działania wykonywane przed lub w trakcie uruchamiania usługi.
- Dodano wsparcie dla env:file z zmiennymi środowiskowymi.
- Dodano możliwość śledzenia dowolnych plików PID.
- Dodano możliwość uruchamiania zadań i usług z użyciem relatywnych ścieżek.
- Do initctl dodano opcję „-b” do wykonywania działań w trybie nieinteraktywnym (batch mode).
- Wbudowany watchdog został zastąpiony oddzielną wersją watchdogd.
- Dodano wtyczkę do automatycznego ładowania modułów jądra dla urządzeń podłączanych w trakcie pracy.
- Dodano wtyczkę do przetwarzania /etc/modules-load.d/.
- Dodano wsparcie dla automatycznego ponownego uruchamiania usług po zmianie ustawień, co pozwala na uniknięcie ręcznego wykonania polecenia „initctl reload”. Domyślnie wyłączone i wymaga przeładowania z „./configure --enable-auto-reload”.
- Dodano możliwość prowadzenia logów operacji wpływających na bezpieczeństwo, takich jak zmiana runlevel, uruchamianie i zatrzymywanie usług, awarie usług.
- Udoskonalono wsparcie dla /etc/network/interfaces.
Źródło: opennet.ru
