这一切都在 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 测试/拉伸上配置 opendkim 的套接字?
这可能也解决了上面的脚本应该如何工作的谜团。
答案1
您配置正确,但这是 Debian Stretch 的一个未解决的错误,它会忽略配置:
答案2
当然,编辑 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 - 这不是拼写错误)
答案3
我通过编辑上述文件解决了这个问题/etc/systemd/system/multi-user.target.wants/opendkim
。我不知道这是否是最佳实践,但由于配置似乎是硬编码的,我没有其他选择。
文件的内容(我现在使用unix套接字而不是随机端口39172):
[...]
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。