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行を直接編集する必要がありますか?
上記のどれでもない。
_SYSTEMCTL_SKIP_REDIRECT
をいじらないでください。それはあなたのビジネスではない内部メカニズムです。/lib/systemd/system/opendkim.service
です。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
ファイルの内容からそのようなスニペットを自動的に作成し、必要に応じてUser
、Group
、およびExecStart
をオーバーライドします。 。
問題は、Debianの人々がこのジェネレーターをsystemdに適切に配線していないことです。これは実際にはsystemdジェネレーターではなく、特定の形式を持ち、このプログラムにはない特定の種類の出力を持っています。また、Debianパッケージのインストールおよび削除プロセスに接続されていません。 /lib/opendkim/opendkim.service.generate
を手動で実行してから、明示的なsystemctl daemon-reload
を実行する必要があります。