Después de casi tres años de desarrollo, se ha publicado la versión 4.0 del sistema de inicialización Finit (Fast init), desarrollado como una alternativa sencilla a SysV init y systemd. El proyecto se basa en los trabajos realizados a partir de la ingeniería inversa del sistema de inicialización fastinit, utilizado en el firmware de Linux de las netbooks EeePC y notable por su proceso de arranque muy rápido. El sistema está dirigido principalmente a garantizar el arranque de sistemas compactos y embebidos, pero también puede aplicarse a entornos de escritorio y servidores comunes. Se han preparado ejemplos de implementación para Void Linux, Alpine Linux y Debian GNU/Linux. El código del proyecto está escrito en C y se distribuye bajo la licencia MIT.
Finit admite niveles de ejecución estilo SysV init, supervisión de procesos en segundo plano (reinicio automático del servicio en caso de fallo), ejecución de controladores de una sola vez, inicio de servicios teniendo en cuenta las dependencias y condiciones arbitrarias, así como la adición de controladores adicionales para ejecutarse antes o después de la ejecución del servicio. Por ejemplo, se puede configurar el inicio de un servicio solo después de que se disponga de acceso a la red o después de que se haya iniciado otro servicio, como syslogd. Se utilizan Cgroups v2 para definir las limitaciones.
Para ampliar la funcionalidad y adaptarlo a sus necesidades, se pueden usar plugins, para los cuales se proporciona un sistema de hooks que permiten adjuntar un controlador a diferentes etapas del arranque y ejecución de servicios, así como asegurar la vinculación a eventos externos. Por ejemplo, se han preparado plugins para el soporte de D-Bus, ALSA, netlink, resolvconf, conexión en caliente de dispositivos, comprobación de disponibilidad y carga de módulos del núcleo, procesamiento de archivos PID y configuración del entorno para el servidor X.
Se admite el uso de scripts típicos para el inicio de servicios, creados para SysV init (/etc/rc.d y /etc/init.d no se utilizan, pero el soporte para /etc/inittab puede implementarse a través de un plugin), así como scripts rc.local, archivos con variables de entorno y configuraciones de red en /etc/network/interfaces, como en Debian y BusyBox. Las configuraciones pueden definirse en un solo archivo de configuración /etc/finit.conf o distribuirse entre varios archivos en el directorio /etc/finit.d.
La gestión se realiza a través de la herramienta estándar initctl y run-parts, que permite activar y desactivar servicios en función de los niveles de inicio, así como iniciar selectivamente algunos servicios. Finit también incluye una implementación integrada de getty (gestión de terminal y acceso de usuarios), watchdog para supervisar la disponibilidad y un modo de recuperación después de fallos con sulogin integrado para iniciar un shell de comandos aislado.

Entre los cambios incluidos en la versión Finit 4.0 (la versión 3.2 se omitió debido a cambios que rompen la compatibilidad):
- La utilidad individual reboot ha sido reemplazada por un enlace simbólico a initctl, similar a las utilidades halt, shutdown, poweroff y suspend.
- Se ha implementado la indicación del progreso de las operaciones.
- Se ha cambiado el funcionamiento de los comandos «inictl cond set|clear COND» para vincular acciones a diversos eventos. Se ha utilizado la sintaxis para identificar servicios en lugar de vincularse a rutas .
- Se ha eliminado la implementación integrada. servidores inetd, en el que se puede instalar xinetd si es necesario.
- Se ha añadido soporte para cgroups v2 para ejecutar servicios en cgroups separados.
- Se ha añadido un modo de recuperación después de fallos con su propio suslogin.
- Se ha añadido soporte para scripts start/stop de SysV init.
- Se han añadido manejadores pre:script y post:script, que permiten especificar acciones personalizadas que se realizan antes o al iniciar el servicio.
- Se ha añadido soporte para env:file con variables de entorno.
- Se ha añadido la posibilidad de supervisar archivos PID arbitrarios.
- Se ha añadido la posibilidad de iniciar tareas y servicios utilizando rutas relativas.
- Se ha añadido la opción «-b» a initctl para realizar acciones en modo no interactivo (batch mode).
- El watchdog integrado ha sido reemplazado por una versión separada llamada watchdogd.
- Se ha añadido un plugin para cargar automáticamente módulos del kernel para dispositivos conectados durante el funcionamiento.
- Se ha añadido un plugin para procesar /etc/modules-load.d/.
- Se ha añadido soporte para reiniciar automáticamente servicios después de cambios de configuración, permitiendo evitar la ejecución manual del comando «initctl reload». Por defecto está desactivado y requiere recompilación con «./configure --enable-auto-reload».
- Se ha añadido la posibilidad de llevar un registro de las operaciones que afectan a la seguridad, como cambios en el runlevel, inicio y parada de servicios, y fallos de servicios.
- Se ha mejorado el soporte para /etc/network/interfaces.
Fuente: opennet.ru
