web-dev-qa-db-ja.com

init.dスクリプトとsystemctlスクリプトの両方が存在する状態でDebianのopendkimパッケージのinitスクリプトパラメータを設定する

Postfixとopendkimを設定している最中に、Debian jessie(oldstable)をstretchにアップグレードすることにしました。それ以来、opendkimを正しく起動することができません。

私が期待しているのは、/ etc/default/opendkimの設定を尊重する必要があることです。特に、RUNDIRとSOCKETの設定をpostfixchroot内に配置する必要があります。

# 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=

ただし、再起動するかどうかに関係なく、「serviceopendkimstart」または「/etc/init.d/opendkimstart」を実行すると、代わりに/ var/run/opendkimがRUNDIRとして使用されるため、pidファイルとソケットはに配置されます。間違った場所:

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

これは、/ etc/init.d/opendkimファイル(他のすべてのdebian initファイルと同様)に/ lib/lsb/init-functionsにLSBinit関数が含まれており、/ libにsystemdスクリプトが実行されているためです。 /lsb/init-functions.d/40-systemd。これにより、実行が「systemctlstartopendkim」にリダイレクトされます。

これは、/ etc/systemd/system/multi-user.target.wants/opendkim.service内のユニットファイルが読み取られ、その中のExecStart行が実行されることを意味します。

また、lsb init関数が含まれる前に、env変数_SYSTEMCTL_SKIP_REDIRECTを設定することで、systemctlリダイレクトをスキップできることも読みました。

今opendkimを設定する正しい方法は何ですか?

a。それでも/ etc/default/opendkimを編集して、_SYSTEMCTL_SKIP_REDIRECTを/etc/init.d/opendkimに追加する必要がありますか?

b。 /etc/systemd/system/multi-user.target.wants/opendkim.serviceのsystemctlユニットファイルはどのように生成されますか?それは私の構成を含めるのに十分賢いはずですか?つまり、私は何か問題はありませんか?

c。または、ExecStart行を直接編集する必要がありますか?

3
Bingu Bingme

上記のどれでもない。

  • _SYSTEMCTL_SKIP_REDIRECTをいじらないでください。それはあなたのビジネスではない内部メカニズムです。
  • ユニットファイルはその場所にありません。それはシンボリックリンクです。 systemdユニットファイルは/lib/systemd/system/opendkim.serviceです。
  • Systemdユニットファイルを編集しないでください。これはDebian用のOpenDKIMパッケージによって提供され、変更されることは想定されていません。
  • 一般に、質問へのコメントとして見当違いの回答は不適切なアドバイスになることは大体の目安です。そしてそれはここにあります。

OpenDKIMの人々は systemd用のopendkim.serviceファイル を提供します。これは、Debianとその/etc/sysconfigシステムではなく、RedHatとその/etc/defaultシステムを対象としているため、/etc/default/opendkimにはまったく注意を払いません。

Debianの人々はそれを修正するのではなく、 anotheropendkim.service file for systemd を提供します。これはOpenDKIM-Debianパッケージで提供されます。そのサービスユニットは、/etc/sysconfig/opendkimまたは/etc/default/opendkimのいずれも読み取らず、OpenDKIMが使用するAF_LOCALソケットの場所を配線します。それが/lib/systemd/system/opendkim.serviceとして得られるものです。

したがって、/lib/systemd/system/opendkim.serviceを編集していると思うかもしれません。 1つはしません。 systemdのルールでは、/lib/systemd内のパッケージ提供のサービスユニットファイルは編集しません。このサービスを変更するsystemdの方法は、オーバーライドINIファイルを/etc/systemd/system/opendkim.service.d/ディレクトリに追加することです。これには、パッケージ提供のサービスユニットの一部のスニペットが含まれています。オーバーライド。

したがって、そのようなスニペットを作成するだけだと思う​​かもしれません。 1つはしません。 Debianの人々は opendkim.service.generate という名前の「ジェネレータ」プログラムを提供しました。これは、/etc/default/opendkimファイルの内容からそのようなスニペットを自動的に作成し、必要に応じてUserGroup、およびExecStartをオーバーライドします。 。

問題は、Debianの人々がこのジェネレーターをsystemdに適切に配線していないことです。これは実際にはsystemdジェネレーターではなく、特定の形式を持ち、このプログラムにはない特定の種類の出力を持っています。また、Debianパッケージのインストールおよび削除プロセスに接続されていません。 /lib/opendkim/opendkim.service.generateを手動で実行してから、明示的なsystemctl daemon-reloadを実行する必要があります。

参考文献

4
JdeBP