Dopo circa tre anni di sviluppo, è stata pubblicata la versione 4.0 del sistema di inizializzazione Finit (Fast init), sviluppato come un'alternativa semplice a SysV init e systemd. Il progetto si basa su esperienze acquisite tramite il reverse engineering del sistema di inizializzazione fastinit, utilizzato nel firmware Linux dei netbook EeePC e noto per il suo rapido processo di avvio. Il sistema è principalmente orientato a garantire il caricamento di sistemi compatti e embedded, ma può essere utilizzato anche in ambienti desktop e server convenzionali. Esempi di scenari di implementazione sono stati preparati per Void Linux, Alpine Linux e Debian GNU/Linux. Il codice del progetto è scritto in C e distribuito con licenza MIT.
Finit supporta livelli di esecuzione (runlevel) in stile SysV init, monitoraggio della disponibilità dei processi in background (riavvio automatico del servizio in caso di guasto), esecuzione di gestori one-shot, avvio di servizi tenendo conto delle dipendenze e condizioni arbitrarie, e aggiunta di gestori personalizzati da eseguire prima o dopo l'esecuzione del servizio. Ad esempio, è possibile configurare l'avvio di un servizio solo dopo l'accesso alla rete o dopo l'avvio di un altro servizio, come syslogd. Per la definizione delle restrizioni vengono utilizzati i Cgroups v2.
Per espandere la funzionalità e adattarla alle proprie esigenze, è possibile utilizzare plugin che forniscono un sistema di hook per attaccare gestori a diverse fasi di avvio e esecuzione dei servizi, nonché per gestire eventi esterni. Ad esempio, sono stati preparati plugin per supportare D-Bus, ALSA, netlink, resolvconf, rilevamento a caldo dei dispositivi, verifica della disponibilità e caricamento dei moduli del kernel, gestione dei file PID e configurazione dell'ambiente per X-server.
È supportato l'uso di script standard per l'avvio dei servizi, creati per SysV init (/etc/rc.d e /etc/init.d non vengono utilizzati, ma il supporto per /etc/inittab può essere implementato tramite un plugin), così come script rc.local, file con variabili di ambiente e impostazioni di rete /etc/network/interfaces, come in Debian e BusyBox. Le configurazioni possono essere definite in un unico file di configurazione /etc/finit.conf oppure distribuite su più file nella directory /etc/finit.d.
La gestione avviene tramite strumenti standard come initctl e run-parts, che consentono di attivare e disattivare i servizi in base ai livelli di esecuzione, nonché di avviare selettivamente solo alcuni servizi. Finit include anche un'implementazione integrata di getty (gestione del terminale e accesso degli utenti), un watchdog per monitorare la disponibilità e una modalità di ripristino dopo guasto con sulogin integrato per avviare una shell di comando isolata.

Tra le modifiche apportate nella versione Finit 4.0 (la versione 3.2 è stata saltata a causa di modifiche che compromettono la compatibilità retroattiva):
- L'utilità reboot è stata sostituita da un collegamento simbolico a initctl, analogamente alle utilità halt, shutdown, poweroff e suspend.
- È stata implementata un'indicazione del progresso nell'esecuzione delle operazioni.
- È stato modificato il funzionamento dei comandi «initctl cond set|clear COND» per legare azioni a diversi eventi. Per identificare i servizi viene utilizzata la sintassi invece del collegamento ai percorsi .
- È stata rimossa l'implementazione integrata server inetd, per cui è possibile installare xinetd se necessario.
- È stata aggiunta la supporto per cgroups v2 per avviare servizi in cgroup separati.
- È stata aggiunta una modalità di ripristino dopo guasto con il proprio suslogin.
- È stata aggiunta la supporto per script start/stop da SysV init.
- Sono stati aggiunti gestori pre:script e post:script, che consentono di specificare azioni proprie da eseguire prima o durante l'avvio di un servizio.
- È stato aggiunto il supporto per env:file con variabili di ambiente.
- È stata aggiunta la possibilità di monitorare file PID arbitrari.
- È stata aggiunta la possibilità di avviare task e servizi utilizzando percorsi relativi.
- In initctl è stata aggiunta l'opzione «-b» per eseguire azioni in modalità non interattiva (batch mode).
- Il watchdog integrato è stato sostituito da una versione separata chiamata watchdogd.
- È stato aggiunto un plugin per il caricamento automatico dei moduli del kernel per dispositivi connessi durante il funzionamento.
- È stato aggiunto un plugin per la gestione di /etc/modules-load.d/.
- È stata aggiunta la supporto per il riavvio automatico dei servizi dopo la modifica delle configurazioni, permettendo di evitare l'esecuzione manuale del comando «initctl reload». Di default è disabilitato e richiede una ricompilazione con «./configure --enable-auto-reload».
- È stata aggiunta la possibilità di mantenere un log delle operazioni che influiscono sulla sicurezza, come cambiamenti di runlevel, avvio e arresto di servizi, guasti di servizi.
- È stata migliorata la supporto per /etc/network/interfaces.
Fonte: opennet.ru
