Erros de log do Mail-receiver após atualização do letsencrypt

Continuando a discussão de Atualização do receptor de e-mail auto-hospedado após a mudança do certificado raiz do Let’s Encrypt:

Após atualizar o mail-receiver para a versão mais recente, ./launcher logs mail-receiver apresenta erro após:

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

e não mostra nenhum outro evento (e-mails recebidos, e-mails rejeitados, …).

Encontrei alguns problemas com configurações personalizadas do Postfix (que funcionavam perfeitamente antes da atualização recente) e preciso depurá-los, o que é difícil sem os logs.

você já tentou esses passos

1 curtida

Vejo os mesmos erros avisos, mas o Postfix está funcionando tranquilamente e aceitando e-mails depois disso.

Às vezes, os logs não parecem ser atualizados imediatamente, então você pode precisar esperar um pouco antes de obter alguma saída. Mas isso não tem relação com os avisos.

Então, ele está realmente travando para você?

O mesmo aqui, com configurações padrão. Mas precisei desabilitar temporariamente uma regra adicional do Postfix:

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

que funcionava perfeitamente antes da atualização (usa regras regex para rejeitar spammers). O problema real é que, com essa configuração ativada, o Postfix começa a rejeitar todos os e-mails de entrada, mas não consigo entender o motivo pelos logs!

Talvez um tempo, mas já se passaram horas e ainda não há nada nos logs (nem e-mails aceitos nem rejeitados são exibidos, e tráfego de entrada).

Você estava certo, há outras entradas de log na saída, mas a própria saída está corrompida:

A saída de ./launcher logs mail-receiver começa com um <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

seguida por uma única linha de entradas de log e terminando com o <HEAD> repetido seis vezes mais:

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

Eu só estava olhando para o final da saída, e parecia haver sempre apenas o <HEAD> sem qualquer outra entrada.

Definitivamente há algo errado com a renderização do log via ./launcher logs mail-receiver.

Acredito que descobri o problema: falta uma linha maillog_file no Dockerfile. Solução temporária: adicionei

  POSTCONF_maillog_file: '/dev/stdout'

ao arquivo mail-receiver.yml e reconstruí, mas isso provavelmente deve ser corrigido na imagem do Docker

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

Então, após adicionar isso, o erro desapareceu e os logs estão funcionando? Se sim, você se importaria de enviar um PR para fazer essa alteração?

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

1 curtida

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

Obrigado @md-misko - Eu mesclei o PR e atualizei a tag discourse/mail-reciever:release no Dockerhub.

Tenho certeza de que você já está ciente, mas caso alguém mais encontre este tópico, você pode atualizar sua versão do receptor de e-mail executando:

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

Você tem alguma ideia de como testar se a imagem em execução atual está executando a versão mais recente?

Um pouco complicado… mas acho que isso deve funcionar:

# Primeiro, certifique-se de ter a imagem base mais recente localmente
docker pull discourse/mail-receiver:release

# Obtenha a camada superior da imagem base
BASE_IMAGE_HASH=$(docker history discourse/mail-receiver:release -q | head -n 1)

# Obtenha as camadas da versão **em execução**
RUNNING_IMAGE_HASH=$(docker container inspect mail-receiver -f "{{.Image}}")
RUNNING_IMAGE_LAYERS=$(docker history $RUNNING_IMAGE_HASH -q)

# Verifique se as camadas da imagem em execução incluem a imagem base atual:
[[ "$RUNNING_IMAGE_LAYERS" == *"$BASE_IMAGE_HASH"* ]] && echo "Atualizado"

Isso imprimirá “Atualizado” se você estiver atualizado. Caso contrário, a última linha não imprimirá nada e sairá com um status diferente de zero.

2 curtidas

Ah. Isso é brilhante. E parece ser uma solução geral para a qual eu anteriormente só encontrava soluções pontuais. Levaria um tempo para eu descobrir isso. O RUNNING_IMAGE_LAYERS é o que eu não sabia que deveria procurar.

Testei em uma instância que havia sido atualizada e em uma que não havia sido, e parece se comportar como esperado.

Muito obrigado!

3 curtidas

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