Eu gostaria de migrar alguns scripts de init do OpenRC para o systemd, mas acho que é um problema geral de manipulação de variáveis de ambiente no systemd.
Arquivos originais do OpenRC
Existe um ficheiro, por ex. /etc/conf.d/fooservice
com conteúdo
# value of FOO variable
# you can override default value by uncomenting this line
# FOO=value1
# value of BAR variable
BAR=value2
No script de inicialização original /etc/init.d/fooservice
, havia
FOO=${FOO:-default_foo_value}
BAR=${BAR:-default_bar_value}
O resultado foi $FOO==default_foo_value
e $BAR==value2
Arquivos systemd migrados
Agora tenho o arquivo de serviço systemd /usr/lib/systemd/system/fooservice.service
, que contém
[Service]
EnvironmentFile=/etc/conf.d/fooservice
ExecStart=/usr/bin/fooservice $FOO $BAR
Mas há um problema que $FOO
não está inicializado em default_foo_value
Existe uma maneira de dizer ao systemd para usar o valor padrão se não houver valor no arquivo de ambiente? Existe uma maneira de usar o arquivo de ambiente intermediário com valores padrão ou vários arquivos de ambiente encadeados?
SOLUÇÃO:
Isso não é bom. O arquivo /etc/conf.d/fooservice
pode ser incompatível porque é "shell script" e o systemd espera "arquivo de ambiente". Na atribuição de valor básico, parece semelhante, mas não é a mesma coisa.
A solução preferida para isso pelo Gentoo é colocar tudo em arquivo de serviço e arquivo de configuração do serviço e não usar o arquivo conf.d
adicional.
SOLUÇÃO DE TRABALHO, MAS NÃO PREFERIDA:
Use isso apenas como uma maneira rápida de executar o serviço OpenRC como um sistema.
/usr/lib/systemd/system/fooservice.service
agora contém
[Service]
Environment="FOO=default_foo_value"
Environment="BAR=default_bar_value"
EnvironmentFile=/etc/conf.d/fooservice
ExecStart=/usr/bin/fooservice $FOO $BAR