Configurando os parâmetros do script init do pacote opendkim do Debian com os scripts init.d e systemctl presentes

2

No meio de mim, configurando o postfix e o opendkim, decidi atualizar o Debian jessie (oldstable) para esticar. Desde então, não consigo fazer o opendkim iniciar corretamente.

O que eu espero é que a configuração em / etc / default / opendkim seja honrada, em particular que as configurações RUNDIR e SOCKET devam ser colocadas dentro do postfix chroot:

# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with
# postfix in a chroot:
RUNDIR=/var/spool/postfix/var/run/opendkim
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
SOCKET=local:$RUNDIR/opendkim.sock
USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=

No entanto, independentemente de eu reinicializar, executar "service opendkim start" ou "/etc/init.d/opendkim start", o / var / run / opendkim é usado como RUNDIR, e assim o arquivo pid e o soquete são colocados nos locais errados:

/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

Eu li que isso acontece porque o arquivo /etc/init.d/opendkim (como todos os outros arquivos init debian) inclui as funções init do LSB em / lib / lsb / init-functions, que executa o script systemd em /lib/lsb/init-functions.d/40-systemd, que por sua vez redireciona a execução para "systemctl start opendkim"

Isso significa que o arquivo de unidade em /etc/systemd/system/multi-user.target.wants/opendkim.service é lido e a linha ExecStart dentro dele é executada

Eu também li que posso pular o redirecionamento systemctl configurando a variável env _SYSTEMCTL_SKIP_REDIRECT antes que as funções init do lsb sejam incluídas.

Qual é a maneira correta de configurar o opendkim agora?

a. Ainda devo editar / etc / default / opendkim e adicionar o _SYSTEMCTL_SKIP_REDIRECT ao /etc/init.d/opendkim?

b. Como é gerado o arquivo de unidade systemctl em /etc/systemd/system/multi-user.target.wants/opendkim.service, e é suposto ser inteligente o suficiente para incluir minha configuração? ou seja, eu não estou errado?

c. Ou devo editar a linha ExecStart diretamente?

    
por Bingu Bingme 04.07.2017 / 10:56

1 resposta

2

Nenhuma das opções acima.

  • Não se preocupe com _SYSTEMCTL_SKIP_REDIRECT . Esse é um mecanismo interno que não é da sua conta.
  • O arquivo da unidade não está nesse local. Esse é um link simbólico. O arquivo de unidade do systemd é /lib/systemd/system/opendkim.service .
  • Não edite o arquivo de unidade do systemd. É fornecido pelo pacote OpenDKIM para o Debian e não deve ser modificado.
  • Em geral, é uma boa regra geral que uma resposta mal colocada como comentário sobre a questão seja um conselho inadequado; e é aqui.

As pessoas do OpenDKIM fornecem um arquivo opendkim.service para systemd . Ele é voltado para RedHat e seu sistema /etc/sysconfig , e não para o Debian e seu sistema /etc/default , e assim não toma conhecimento de /etc/default/opendkim .

Em vez de consertar, o pessoal do Debian fornece outro opendkim.service arquivo para systemd que é usado no lugar do pacote fornecido pelo OpenDKIM nos pacotes Debian. Essa unidade de serviço não lê /etc/sysconfig/opendkim ou /etc/default/opendkim e efetua o hardwire da localização do soquete AF_LOCAL que o OpenDKIM usa. Isso é o que se recebe como /lib/systemd/system/opendkim.service .

Pode-se pensar que alguém edite /lib/systemd/system/opendkim.service , portanto. Um não. A regra systemd é que não se editam arquivos da unidade de serviço fornecidos pelo pacote em /lib/systemd . A maneira do systemd de modificar este serviço é adicionar um arquivo INI de substituição no diretório /etc/systemd/system/opendkim.service.d/ . Contém um trecho da parte da unidade de serviço fornecida pelo pacote que você deseja substituir.

Alguém poderia pensar que um simplesmente cria um trecho, portanto. Um não. O pessoal do Debian forneceu um programa "gerador" chamado opendkim.service.generate que cria automaticamente um snippet desse tipo a partir do conteúdo do arquivo /etc/default/opendkim , substituindo User , Group e ExecStart conforme apropriado.

O problema é que o pessoal do Debian não conectou este gerador adequadamente ao systemd. Não é realmente um gerador systemd , que tem uma forma específica e tem um tipo específico de saída que este programa não possui. Também não está ligado ao processo de instalação e remoção de pacotes Debian. Você precisa executar /lib/opendkim/opendkim.service.generate manualmente, seguido por um systemctl daemon-reload explícito.

Leitura adicional

por 04.07.2017 / 15:02