letsencrypt更新后mail-receiver日志错误

Continuing the discussion from Self-hosted mail-receiver update following Let's Encrypt root certificate change:

After updating mail-receiver to latest ./launcher logs mail-receiver errors out after

postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
<20>Oct  1 06:10:33 postfix/postfix-script[86]: warning: symlink leaves directory: /etc/postfix/./makedefs.outStarting Postfix

and doesn’t show any other events (incoming emails, rejected emails, …).

I’ve encountered some issues with custom postfix settings (which worked flawlessly prior to recent update) and need to debug, which is difficult without logs.

have you tried these steps

1 个赞

I do see the same errors warnings but Postfix is happily running and accepting mails after that.

Sometimes the logs don’t seem to flush immediately so you might need to wait for a while before you get some output. But that’s unrelated to the warnings.

So is it actually crashing for you?

Ditto, with vanilla settings. But I had to temporarily disable additional postfix rule

  POSTCONF_smtpd_client_restrictions: 'regexp:/etc/postfix/shared/client_access_regex'

which worked perfectly before the upgrade (uses regex rules to reject spammers). The real issue is that with this setting enabled, postfix starts rejecting all incoming email, but I can’t see why from the logs!

A while maybe, but it’s been hours and still nothing in logs (neither accepted nor rejected emails are shown, and there is inbound traffic).

You were right, there are other log entries in the output, but the output itself is garbled:

./launcher logs mail-receiver output begins with a <HEAD>:

/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Operating environment:
HOSTNAME=discourse-mail-receiver
LANGUAGE=en_US.UTF-8
MAIL_DOMAIN=...
...
...
Setting smtpd_tls_security_level to 'may'
postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out

followed by a single line of log entries, and ending with the <HEAD> repeated six more times:

<HEAD>
Single line of log entries without line breaks..............................................................................................................................................................................................
<HEAD>
<HEAD>
<HEAD>
<HEAD>
<HEAD>
<HEAD>

I was only looking at the end of the output, and there was always seemingly just the <HEAD> without any other entries.

Definitely something wrong with the rendering of the log via ./launcher logs mail-receiver.

I believe I figured this one out, there is a maillog_file line missing in the Dockerfile. Temp fix: added

  POSTCONF_maillog_file: '/dev/stdout'

to mail-receiver.yml and rebuilt, but this should probably be fixed in the docker image

RUN >/etc/postfix/main.cf \
+	&& postconf -e maillog_file=/dev/stdout \
	&& postconf -e smtputf8_enable=no \
...

So after adding this, the error is gone, and the logs are working? If so, would you mind submitting a PR to make that change?

1 个赞

https://github.com/discourse/mail-receiver/pull/12

感谢 @md-misko - 我已合并 PR 并更新了 Dockerhub 上的 discourse/mail-reciever:release 标签。

我确定您已经知晓,但万一其他人看到此主题,您可以通过运行以下命令来更新您的邮件接收器版本:

docker pull discourse/mail-receiver:release
cd /var/discourse
./launcher rebuild mail-receiver
3 个赞

您有什么方法可以测试当前运行的映像是否是最新版本吗?

有点绕……但我想这应该可以:

# 首先,确保你本地有最新的基础镜像
docker pull discourse/mail-receiver:release

# 获取基础镜像的顶层
BASE_IMAGE_HASH=$(docker history discourse/mail-receiver:release -q | head -n 1)

# 获取**正在运行**版本的镜像层
RUNNING_IMAGE_HASH=$(docker container inspect mail-receiver -f "{{.Image}}")
RUNNING_IMAGE_LAYERS=$(docker history $RUNNING_IMAGE_HASH -q)

# 检查运行镜像的层是否包含当前的基础镜像:
[[ "$RUNNING_IMAGE_LAYERS" == *"$BASE_IMAGE_HASH"* ]] && echo "Up to date"

如果你的镜像是最新的,它将打印“Up to date”。否则,最后一行将不打印任何内容,并以非零状态退出。

2 个赞

太棒了。这看起来是一个通用的解决方案,我以前只找到过一次性的解决方案。我需要花点时间才能弄清楚。我不知道要查找 RUNNING_IMAGE_LAYERS

我在一个已升级的实例和一个未升级的实例上进行了测试,它似乎表现符合预期。

非常感谢!

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.