これはすべてDebianテストに関するものです(=現在のところストレッチ)。opendkim
を設定しようとしていますが、必要なソケットを使用しません。
man opendkim.conf
によると、Socket
は/etc/opendkim.conf
で設定できます。
Jessieボックスに表示されているように、ファイル/etc/default/opendkim
の作成も試みましたが、それも機能しませんでした。
そのため、/etc/opendkim.conf
に次の行を入力してみました。
Socket inet:39172@localhost
さて、/etc/init.d/opendkim
によると、このファイルは読み込まれます:
if [ -f /etc/opendkim.conf ]; then
CONFIG_SOCKET=`awk '$1 == "Socket" { print $2 }' /etc/opendkim.conf`
fi
私には、それは今のところ良さそうです。しかし、すぐ後に続く次のスニペットは、現在読み込まれている情報をダンプするようです:
# This can be set via Socket option in config file, so it's not required
if [ -n "$SOCKET" -a -z "$CONFIG_SOCKET" ]; then
DAEMON_OPTS="-p $SOCKET $DAEMON_OPTS"
fi
DAEMON_OPTS="-x /etc/opendkim.conf -u $USER -P $PIDFILE $DAEMON_OPTS"
私はこれが何をすることになっているのか本当にわかりません。 $CONFIG_SOCKET
が実際にopendkim
の起動に使用されることはありませんか?では、なぜ最初から構成ファイルから読み取られているのですか?
/etc/systemd/system/multi-user.target.wants/opendkim
というファイルもあり、設定が読み込まれていないようです。
重要な場合:opendkim
を再起動するには、service opendkim restart
と入力します。
ソケットが読み取られたかどうかを確認するための私のチェックは次のとおりです:telnet localhost 39172
はConnection refused
を言い、/var/log/syslog
は次を言います:
opendkim[8343]: OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
私の質問は:Debian Testing/Stretchでopendkimのソケットをどのように構成する必要がありますか?
これはおそらく、上記のスクリプトがどのように機能するかについての謎も解決します。
正しく構成していますが、これは構成を無視するDebian Stretchの未解決のバグです。
参照: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864162
もちろん、systemdユニットの編集はベストプラクティスではありません。ここに私たちが行くべき方法があります:
Sudo systemctl edit opendkim
そして挿入:
[Service]
ExecStart=
ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/spool/postfix/opendkim/opendkim.sock
(二重のExecStartに注意してください-これはタイプミスではありません)
上記のファイル/etc/systemd/system/multi-user.target.wants/opendkim
を編集して解決しました。これがベストプラクティスかどうかはわかりませんが、構成がハードコーディングされているように見えるため、他に選択肢はありませんでした。
ファイルの内容(現在、ランダムポート39172の代わりにUNIXソケットを使用しています):
[...]
ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/spool/postfix/var/run/opendkim/opendkim.sock
[...]
ディレクトリ/var/spool/postfix/var/run/opendkim
を作成し、opendkim:opendkim
に所有権を付与する必要がありました。ファイルを変更した後、systemctl daemon-reload
とservice opendkim restart
を実行したところ、新しいソケットが認識されました。次に、権限を変更し(Umask 002
の/etc/opendkim.conf
)、postfixがmilterにアクセスできるようになりました。