letsencryptアップデート後のメール受信者ログエラー

Self-hosted mail-receiver update following Let’s Encrypt root certificate change の議論を続けます:

mail-receiver を最新バージョンに更新した後、./launcher logs mail-receiver で以下のエラーが発生します。

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

その後、他のイベント(受信メール、拒否されたメールなど)が表示されません。

最近の更新以前は問題なく動作していたカスタム Postfix 設定でいくつかの問題が発生しており、ログがないとデバッグが困難です。

これらの手順を試してみましたか?

「いいね!」 1

同じエラー警告が表示されているようですが、その後もPostfixは正常に動作し、メールを受け付けています。

ログが即座にフラッシュされないことがあり、出力が得られるまで少し待つ必要がある場合があります。ただし、これは警告とは無関係です。

実際にはクラッシュしているのでしょうか?

私も同様で、バニラの設定のままです。ただし、追加の Postfix ルールを一時的に無効にしなければなりませんでした。

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

これはアップグレード前は完璧に機能していました(スパマーを拒否するために正規表現ルールを使用)。真の問題は、この設定を有効にすると、Postfix がすべての受信メールを拒否してしまうことです。しかし、ログからはその理由がわかりません!

少し待つのは構いませんが、すでに数時間経過してもログには何も表示されていません(受信も拒否も表示されず、実際には受信トラフィックがあります)。

おっしゃる通り、出力には他のログエントリも含まれていますが、出力自体が破損しています:

./launcher logs mail-receiver の出力は \u003cHEAD\u003e で始まります:

/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

その後、単一のログエントリ行が続き、最後に \u003cHEAD\u003e がさらに 6 回繰り返されて終了します:

\u003cHEAD\u003e
Single line of log entries without line breaks..............................................................................................................................................................................................
\u003cHEAD\u003e
\u003cHEAD\u003e
\u003cHEAD\u003e
\u003cHEAD\u003e
\u003cHEAD\u003e
\u003cHEAD\u003e

私は出力の末尾だけを見ていましたが、そこには常に他のエントリなしに \u003cHEAD\u003e だけが表示されているように見えました。

明らかに ./launcher logs mail-receiver によるログのレンダリングに問題があります。

これについて解決策を見つけました。Dockerfile に maillog_file の行が抜けています。一時的な対処として、mail-receiver.yml に以下を追加して再ビルドしましたが、これは Docker イメージ側で修正すべきでしょう。

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

この変更を加えた後、エラーが消え、ログが正常に機能していますか?もしそうであれば、その変更を反映するPR(プルリクエスト)の提出をお願いできますか?

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

「いいね!」 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.