Foi lançado um significativo update do gerenciador de serviços s6-rc 0.5.3.0, destinado a gerenciar o lançamento de scripts de inicialização e serviços considerando suas dependências. A ferramenta s6-rc pode ser utilizada tanto em sistemas de inicialização quanto para organizar o lançamento de serviços arbitrários em resposta a eventos que refletem mudanças no estado do sistema. Oferece rastreamento completo da árvore de dependências e o lançamento ou encerramento automático de serviços para alcançar o estado especificado. O código é escrito em C e é distribuído sob a licença ISC.
O gerenciador de serviços s6-rc, que pode ser considerado um análogo ao sysv-rc ou OpenRC, inclui um conjunto de utilitários para iniciar e parar processos de longa duração (daemons) ou scripts de inicialização que terminam imediatamente. Durante a execução, são consideradas as dependências entre os componentes, garantindo o lançamento paralelo de scripts e serviços não conflitantes e assegurando que a sequência de execução dos scripts se repita em diferentes execuções. Todas as mudanças de estado são processadas levando em conta as dependências, garantindo que não sejam violadas (por exemplo, ao iniciar um serviço, as dependências necessárias para o seu funcionamento serão automaticamente iniciadas, e ao parar, os serviços dependentes serão também parados).
Em vez de níveis de execução (runlevel), o s6-rc propõe um conceito mais universal de pacotes (bundles), permitindo agrupar serviços com base em características arbitrárias e tarefas a serem realizadas. Para aumentar a eficiência, utiliza uma base de dados de dependências compilada, criada pela ferramenta s6-rc-compile com base no conteúdo dos diretórios com arquivos para iniciar/parar serviços. Para análise e manipulação do banco de dados, são oferecidas as ferramentas s6-rc-db e s6-rc-update. O sistema suporta scripts de inicialização compatíveis com sysv-init e pode importar informações sobre dependências do sysv-rc ou OpenRC.
Entre as vantagens do s6-rc, destaca-se a implementação compacta, que não contém nada além dos componentes necessários para resolver tarefas diretas e que consome um mínimo de recursos. Ao contrário de outros gerenciadores de serviços, o s6-rc suporta a construção proativa (em modo offline) do gráfico de dependências para o conjunto de serviços existente, permitindo realizar uma análise de dependências intensiva separadamente, e não durante a carga ou alteração de estado. Além disso, o sistema não é monolítico e é dividido em uma série de módulos separados e substituíveis, cada um dos quais, de acordo com a filosofia Unix, resolve apenas uma tarefa específica.
Em conjunto com as utilitários s6, que monitoram o funcionamento de processos (análogos ao daemontools e runit), a ferramenta permite controlar simultaneamente o funcionamento de serviços em execução prolongada, por exemplo, reiniciando-os em caso de encerramentos acidentais, e garantindo a execução de uma sequência de comandos de forma reproduzível, repetindo-se em diferentes execuções. Suportam-se, entre outras, funcionalidades como ativação do serviço ao acessar o socket (iniciar o manipulador ao acessar a porta de rede), registro de eventos do processo (substituição do syslogd) e concessão controlada de privilégios adicionais (análoga ao sudo).
Está disponível ao mesmo tempo a versão do pacote s6-linux-init 1.0.7.0, que oferece uma implementação do processo init para construir sistemas de inicialização prontos para sistemas operacionais baseados no núcleo Linux, nos quais são utilizadas as utilidades s6 e s6-rc para gerenciar serviços e scripts de inicialização. Neste contexto, s6 e s6-rc não estão vinculados ao s6-linux-init e, se desejado, podem ser utilizados com quaisquer sistemas de inicialização.
Além disso, o projeto oferece:
- s6-networking — conjunto de utilitários para criação de serviços de rede, semelhante ao ucspi.
- s6-frontend — camada para recriar a funcionalidade do daemontools e runit sobre o s6.
- s6-portable-utils — conjunto de utilitários Unix típicos, como cut, chmod, ls, sort e grep, otimizados para consumir recursos mínimos e fornecidos sob a licença ISC.
- s6-linux-utils — conjunto de utilitários vinculados ao Linux, como chroot, freeramdisk, logwatch, mount e swapon.
- s6-dns — um conjunto de bibliotecas e utilitários para clientes que substituem as utilidades DNS padrão do BIND e djbdns.
Na nova versão do s6-rc, o utilitário s6-rc-compile implementou a leitura de dados sobre dependências e conjuntos de serviços a partir de diretórios, em vez de arquivos. O uso de diretórios simplifica a adição de serviços ao banco de dados com informações sobre dependências durante a instalação de programas através do gerenciador de pacotes, pois permite evitar modificações em arquivos. O suporte ao antigo formato baseado em arquivos foi mantido para garantir a compatibilidade. Na nova versão do s6-linux-init, a opção "-S" foi adicionada ao utilitário s6-linux-init-maker para sincronização de dados em contêineres.
Fonte: opennet.ru
