Après environ trois ans de développement, la version 4.0 du système d'initialisation Finit (Fast init) a été publiée. Ce projet se développe comme une alternative simple à SysV init et systemd. Il est basé sur des travaux réalisés par l'ingénierie inverse du système d'initialisation fastinit, utilisé dans le firmware Linux des netbooks EeePC, reconnu pour son très rapide processus de démarrage. Le système vise principalement à assurer le démarrage de systèmes compacts et embarqués, mais peut également être utilisé dans des environnements de bureau et de serveur ordinaires. Des exemples de scénarios d'implémentation ont été préparés pour Void Linux, Alpine Linux et Debian GNU/Linux. Le code du projet est écrit en C et distribué sous licence MIT.
Finit prend en charge les niveaux d'exécution de type SysV init, le suivi de l'état des processus d'arrière-plan (redémarrage automatique du service en cas d'échec), l'exécution de gestionnaires uniques, le démarrage de services en tenant compte des dépendances et des conditions arbitraires, et l'attachement de gestionnaires supplémentaires pour le lancement avant ou après l'exécution du service. Par exemple, il est possible de configurer le démarrage d'un service uniquement après l'accès au réseau ou après le démarrage d'un autre service, tel que syslogd. Les restrictions sont appliquées via Cgroups v2.
Pour étendre les fonctionnalités et les adapter à vos besoins, des plugins peuvent être utilisés, pour lesquels un système de hooks est fourni, permettant d'attacher un gestionnaire à différentes étapes du démarrage et de l'exécution des services, ainsi que d'assurer un lien avec des événements externes. Par exemple, des plugins ont été préparés pour le support de D-Bus, ALSA, netlink, resolvconf, le branchement à chaud des dispositifs, la vérification de la disponibilité et le chargement des modules du noyau, la gestion des fichiers PID et la configuration de l'environnement pour le serveur X.
L'utilisation de scripts standard pour démarrer des services, créés pour SysV init, est prise en charge (les répertoires /etc/rc.d et /etc/init.d ne sont pas utilisés, mais le support de /etc/inittab peut être implémenté via un plugin), ainsi que des scripts rc.local, des fichiers de variables d'environnement et des paramètres réseau /etc/network/interfaces, comme dans Debian et BusyBox. Les configurations peuvent être définies dans un fichier de configuration unique /etc/finit.conf ou réparties sur plusieurs fichiers dans le répertoire /etc/finit.d.
La gestion s'effectue via l'outil standard initctl et run-parts, permettant d'activer et de désactiver des services en fonction des niveaux de démarrage, ainsi que de lancer sélectivement certains services. Finit comprend également une implémentation intégrée de getty (gestion du terminal et connexion des utilisateurs), un watchdog pour surveiller la fonctionnalité et un mode de récupération après un échec avec un sulogin intégré pour démarrer un shell de commande isolé.

Parmi les changements ajoutés dans la version Finit 4.0 (la version 3.2 a été omise en raison de modifications cassant la rétrocompatibilité) :
- L'utilitaire indépendant reboot a été remplacé par un lien symbolique vers initctl, similaire aux utilitaires halt, shutdown, poweroff et suspend.
- Une indication de progression pour l'exécution des opérations a été mise en œuvre.
- Le fonctionnement des commandes « inictl cond set|clear COND » a été modifié pour lier des actions à divers événements. La syntaxe est utilisée pour identifier les services au lieu d'être liée à des chemins .
- L'implémentation intégrée a été supprimée. de serveurs inetd, pour lequel xinetd peut être installé si nécessaire.
- Ajout du support de cgroups v2 pour exécuter des services dans des cgroups distincts.
- Ajout d'un mode de récupération après un échec avec son propre suslogin.
- Ajout du support pour les scripts start/stop de SysV init.
- Ajout des gestionnaires pre:script et post:script, permettant de spécifier ses propres actions exécutées avant ou lors du lancement d'un service.
- Ajout du support pour env:file avec des variables d'environnement.
- Ajout de la possibilité de suivre des fichiers PID arbitraires.
- Ajout de la possibilité de lancer des tâches et des services en utilisant des chemins relatifs.
- Une option « -b » a été ajoutée à initctl pour exécuter des actions en mode non interactif (mode batch).
- Le watchdog intégré a été remplacé par une version distincte, watchdogd.
- Ajout d'un plugin pour le chargement automatique des modules du noyau pour les appareils connectés pendant l'exécution.
- Ajout d'un plugin pour traiter /etc/modules-load.d/.
- Ajout du support pour le redémarrage automatique des services après modification des configurations, permettant d'éviter l'exécution manuelle de la commande « initctl reload ». Par défaut désactivé et nécessite une recompilation avec « ./configure —enable-auto-reload ».
- Ajout de la possibilité de tenir un journal des opérations impactant la sécurité, telles que le changement de runlevel, le démarrage et l'arrêt des services, ainsi que les échecs de services.
- Amélioration du support de /etc/network/interfaces.
Source : opennet.ru
