postfixとopendkimを設定する過程で、スケーラビリティのためにDebian jessie(oldstable)をアップグレードすることにしました。それ以来、opendkimを正しく起動できません。
私が期待するのは、/etc/default/opendkimの構成を尊重する必要があるということです。特に、RUNDIRとSOCKETの設定は、サフィックス付きの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=
ただし、再起動しても、「service opendkim start」または「/etc/init.d/opendkim start」を実行すると、/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/でsystemdスクリプトを実行する/lib/lsb/init-functionsにあるLSB init関数が含まれているためです。を読んだ。 init-functions.d/40-systemd、実行を "systemctl start opendkim"にリダイレクトします。
これは、/etc/systemd/system/multi-user.target.wants/opendkim.serviceからユニットファイルを読み取り、その中のExecStart行を実行することを意味します。
また、lsb init関数を含める前に、環境変数_SYSTEMCTL_SKIP_REDIRECTを設定してsystemctlリダイレクトをスキップできることも読みました。
今opendkimを設定する正しい方法は何ですか?
ㅏ。 /etc/default/opendkimも編集し、/etc/init.d/opendkimに_SYSTEMCTL_SKIP_REDIRECTを追加する必要がありますか?
b。 /etc/systemd/system/multi-user.target.wants/opendkim.service の systemctl 単位ファイルはどのように生成されます。つまり、私は何も間違っていませんでしたか?
氏。または、ExecStart行を直接編集する必要がありますか?
答え1
上記のいずれもありません。
- 深く考えないでください
_SYSTEMCTL_SKIP_REDIRECT
。これは内部メカニズムであり、あなたの仕事ではありません。 - ユニットファイルはこの場所にありません。これはシンボリックリンクです。システム単位ファイルは
/lib/systemd/system/opendkim.service
。 - システム単位ファイルを編集しないでください。これはDebianのOpenDKIMパッケージで提供されており、変更しないでください。
- 一般的に言えば、質問に対する誤った答えは悪いアドバイスになるのが良い経験則です。ここにあります。
OpenDKIMの人々が貢献しました。opendkim.service
システムファイル。/etc/sysconfig
Debianとそのシステムではなく、RedHatとそのシステムに合わせているので、/etc/default
まったく目立たない。/etc/default/opendkim
それを修正する代わりに、Debianの人々は提供しました。その他 opendkim.service
システムファイルDebianパッケージでOpenDKIMが提供するバージョンを置き換えるために使用されます。サービスユニットはORを読み取らず、/etc/sysconfig/opendkim
OpenDKIMが使用するソケットの位置は固定されています/etc/default/opendkim
。AF_LOCAL
それが人々が得るものです/lib/systemd/system/opendkim.service
。
/lib/systemd/system/opendkim.service
だから誰かが編集していると思うかもしれません。一つはそうではありません。 systemdルールは、パッケージが提供するサービス単位ファイルを編集しないことです/lib/systemd
。 systemdがこのサービスを変更する方法は、/etc/systemd/system/opendkim.service.d/
ディレクトリにオーバーレイINIファイルを追加することです。これには、オーバーライドするパッケージによって提供されるサービス単位部分の断片が含まれます。
したがって、そのような作品を作るだけで十分だと思うかもしれません。一つはそうではありません。 Debian の人々が提供する名前が「ジェネレータ」のプログラムopendkim.service.generate
ファイルの内容に基づいて上書きし、必要に応じてこのようなフラグメントを自動的に作成/etc/default/opendkim
します。User
Group
ExecStart
問題は、Debianの人々がこのジェネレータをsystemdに正しく接続していないことです。これは実際ではないシステムプログラムにない特定の形式と特定の種類の出力を持つジェネレータです。また、Debian パッケージのインストールおよびアンインストールプロセスへのリンクもありません。/lib/opendkim/opendkim.service.generate
手動で実行してから明示的に実行する必要がありますsystemctl daemon-reload
。
追加読書
- ジョージ・グリトン(2017-04-25)。 systemdサービスは起動時にopendkim.confソケットを上書きします。。 Debian のバグ #861169.