Usando variáveis em um script de inicialização systemd

4

Eu criei scripts de init para o SysVinit e systemd para distribuir com um de nossos pacotes de software (ele deve executar um daemon de segundo plano não interativo para um serviço de rede). O instalador pergunta ao usuário se ele deseja instalar o serviço; em caso afirmativo, o usuário e o diretório home dos daemons são criados e o script correto (dependendo do nome da imagem do processo 1) é copiado para o local correto.

Como alguns detalhes dependem da configuração específica do usuário ou da política da empresa (para onde instalar a ferramenta? Qual deve ser o usuário daemons? Onde deve ser seu diretório home?), usei placeholders como %%TOOL_USER%% e my O script de configuração substitui os via sed. O material automático funciona bem para o CentOS e o Debian, então já estou bastante feliz.

Mas é claro que todo sistema é um pouco diferente, então o cliente pode optar por instalar manualmente o serviço (por exemplo, se ele não usa syslog, ou geralmente tem um alto nível de segurança, que é o caso de alguns de nossos clientes). Nesse caso, ele precisa adaptar o script de inicialização.

No caso do sysv init isto é fácil, já que este é basicamente um shell script e eu acabei de colocar três variáveis

user=%%TOOL_USER%%
executable=%%TOOL_EXEC%%
working_dir=%%TOOL_HOME%%

no topo, junto com algumas dicas de configuração.

Para o systemd, por outro lado, não encontrei a possibilidade de definir e referenciar variáveis personalizadas , então tudo que posso fazer é instruir o usuário a substituir todas as ocorrências de %%TOOL_*%% com o valor apropriado. Embora eu geralmente goste do modo como os novos scripts systemd funcionam, eu preferiria uma abordagem mais segura como o meu script de inicialização; agora o usuário pode perder uma ocorrência. Qualquer coisa que eu possa ter perdido?

Como referência, consultei os documentos systemd.service do freedesktop.org .

    
por ArchimedesMP 28.08.2017 / 18:20

1 resposta

0

Você pode usar EnvironmentFile= , documentado em man systemd.exec , para declarar um arquivo onde as variáveis de ambiente são armazenadas. O EnvironmentFile pode ser algo que seu conjunto de ferramentas gera com base em variáveis, em que o arquivo systemd pode ser gerenciado manualmente.

Seu aplicativo precisará ser capaz de responder adequadamente quando as variáveis de ambiente estiverem definidas.

    
por 28.08.2017 / 19:45

Tags