Após dois anos desde a formação do último lançamento significativo, foi publicado o gerenciador de serviços GNU Shepherd 0.9 (anteriormente dmd), que está sendo desenvolvido pelos desenvolvedores da distribuição GNU Guix System como uma alternativa ao sistema de inicialização SysV-init, que suporta dependências. O daemon gerenciador e as utilidades do Shepherd são escritos na linguagem Guile (uma das implementações da linguagem Scheme), que também é utilizada para definir configurações e parâmetros de inicialização dos serviços. O Shepherd já está sendo aplicado na distribuição GuixSD GNU/Linux e também está destinado a ser utilizado no GNU/Hurd, mas pode funcionar em qualquer sistema operacional compatível com POSIX para o qual a linguagem Guile esteja disponível.
O Shepherd realiza o trabalho de iniciar e parar serviços, levando em consideração as inter-relações entre os serviços, definindo e iniciando dinamicamente serviços dos quais um serviço selecionado depende. O Shepherd também suporta a definição de conflitos entre serviços e evita sua execução simultânea. O projeto pode ser utilizado tanto como o sistema de inicialização principal (init com PID 1) quanto de forma isolada para gerenciar processos em segundo plano de usuários individuais (por exemplo, para iniciar tor, privoxy, mcron, etc.) com execução sob os direitos desses usuários.
Principais novidades:
- Foi implementada a concepção de serviços temporários (transient), que são automaticamente desativados após a conclusão devido ao término do processo ou chamada do método 'stop', o que pode ser necessário para serviços sintetizados que não podem ser reiniciados após a conclusão.
- Foi adicionada a procedência 'make-inetd-constructor' para a criação de serviços semelhantes ao inetd.
- Foi adicionada a procedência 'make-systemd-constructor' para a criação de serviços ativados por atividade de rede (no estilo da ativação de soquete systemd).
- Foi adicionada uma procedência para iniciar o serviço em segundo plano — 'start-in-the-background'.
- Os parâmetros ':supplementary-groups', '#:create-session' e '#:resource-limits' foram adicionados à procedência 'make-forkexec-constructor'.
- Foi garantido funcionamento sem bloqueio durante a espera por arquivos PID.
- Para serviços sem o parâmetro '#:log-file', a saída foi encaminhada para o syslog, e para serviços com o parâmetro '#:log-file', os logs foram gravados em um arquivo separado com a marcação de tempo. Logs de processos sem privilégios do shepherd são salvos no diretório $XDG_DATA_DIR.
- O suporte para a construção com Guile 2.0 foi encerrado. Problemas foram resolvidos ao usar versões Guile 3.0.5-3.0.7.
- Agora, é necessária a biblioteca Fibers 1.1.0 ou uma versão mais recente para funcionar.
Fonte: opennet.ru
