Após cerca de três anos de desenvolvimento, foi lançado o sistema de inicialização Finit 4.0 (Fast init), desenvolvido como uma alternativa simples ao SysV init e ao systemd. O projeto é baseado em trabalhos realizados através da engenharia reversa do sistema de inicialização fastinit, utilizado no firmware Linux de netbooks EeePC e notável por seu processo de inicialização extremamente rápido. O sistema é principalmente voltado para garantir a inicialização de sistemas compactos e embutidos, mas também pode ser utilizado em ambientes de desktop e servidores convencionais. Exemplos de cenários para implementação foram preparados para Void Linux, Alpine Linux e Debian GNU/Linux. O código do projeto foi escrito em C e é distribuído sob a licença MIT.
O Finit suporta níveis de execução (runlevel) no estilo do SysV init, monitoramento da integridade de processos em segundo plano (reinício automático do serviço em caso de falha), execução de manipuladores únicos, inicialização de serviços com base em dependências e condições arbitrárias, bem como a anexação de manipuladores adicionais para serem executados antes ou após a execução do serviço. Por exemplo, é possível configurar a inicialização de um serviço somente após a disponibilidade de acesso à rede ou após o início de outro serviço, como o syslogd. Restrições são aplicadas usando Cgroups v2.
Para expandir a funcionalidade e adaptações às suas necessidades, podem ser utilizados plugins, para os quais foi fornecido um sistema de hooks, permitindo anexar manipuladores a diferentes estágios da inicialização e execução de serviços, bem como garantir a vinculação a eventos externos. Por exemplo, foram preparados plugins para suporte a D-Bus, ALSA, netlink, resolvconf, conexão a quente de dispositivos, verificação de disponibilidade e carregamento de módulos do kernel, manipulação de arquivos PID e configuração de ambiente para o servidor X.
O uso de scripts padrão para inicialização de serviços, criados para o SysV init, é suportado (os diretórios /etc/rc.d e /etc/init.d não são usados, mas o suporte a /etc/inittab pode ser implementado por meio de um plugin), assim como scripts rc.local, arquivos com variáveis de ambiente e configurações de rede em /etc/network/interfaces, como em Debian e BusyBox. As configurações podem ser definidas em um único arquivo de configuração /etc/finit.conf ou distribuídas em vários arquivos no diretório /etc/finit.d.
O gerenciamento é feito através de uma ferramenta padrão initctl e run-parts, permitindo ativar e desativar serviços vinculados a níveis de inicialização, bem como iniciar selecionadamente parte dos serviços. O Finit também inclui uma implementação embutida do getty (gerenciamento de terminal e entrada de usuários), um watchdog para monitoramento de funcionamento e um modo de recuperação de falhas com um sulogin embutido para iniciar um shell de comando isolado.

Entre as mudanças adicionadas na versão Finit 4.0 (a versão 3.2 foi pulada devido a alterações que quebram a compatibilidade retroativa):
- A utilidade reboot foi substituída por um link simbólico para initctl, assim como as utilidades halt, shutdown, poweroff e suspend.
- Foi implementada a indicação de progresso na execução das operações.
- A operação dos comandos "inictl cond set|clear COND" foi alterada para vincular ações a vários eventos. Para identificação de serviços, foi utilizado a sintaxe em vez de vinculação a caminhos .
- A implementação embutida foi removida. servidor inetd, que pode ser substituído pelo xinetd, se necessário.
- Foi adicionada a suporte a cgroups v2 para executar serviços em grupos cgroup separados.
- Foi adicionado um modo de recuperação de falhas com seu próprio suslogin.
- Foi adicionada a suporte a scripts de start/stop do SysV init.
- Foram adicionados manipuladores pre:script e post:script, permitindo especificar suas ações que serão realizadas antes ou ao iniciar o serviço.
- Foi adicionada a suporte a env:file com variáveis de ambiente.
- Foi adicionada a capacidade de monitorar arquivos PID arbitrários.
- Foi adicionada a capacidade de iniciar tarefas e serviços utilizando caminhos relativos.
- No initctl, foi adicionada a opção "-b" para executar ações em modo não interativo (batch mode).
- O watchdog embutido foi substituído por uma versão separada chamada watchdogd.
- Foi adicionado um plugin para carregamento automático de módulos do kernel para dispositivos conectados durante a operação.
- Foi adicionado um plugin para processamento de /etc/modules-load.d/.
- Foi adicionada a suporte para reinicialização automática de serviços após alterações nas configurações, permitindo evitar a execução manual do comando "initctl reload". Por padrão, essa opção está desativada e requer recompilação com "./configure --enable-auto-reload".
- Foi adicionada a capacidade de manter um log de operações que impactam a segurança, como alterações de runlevel, início e parada de serviços, falhas de serviços.
- Foi melhorada a suporte a /etc/network/interfaces.
Fonte: opennet.ru
