Errori nel log di Mail-receiver dopo l'aggiornamento di letsencrypt

Continuando la discussione da Aggiornamento del ricevitore di posta self-hosted a seguito della modifica del certificato radice di Let’s Encrypt:

Dopo aver aggiornato mail-receiver all’ultima versione, ./launcher logs mail-receiver restituisce un errore dopo

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 non mostra altri eventi (email in arrivo, email rifiutate, …).

Ho riscontrato alcuni problemi con le impostazioni personalizzate di Postfix (che funzionavano perfettamente prima del recente aggiornamento) e devo eseguire il debug, il che è difficile senza i log.

Hai provato questi passaggi?

1 Mi Piace

Vedo anch’io gli stessi errori avvisi, ma Postfix continua a funzionare serenamente e ad accettare le email dopo di ciò.

A volte i log non sembrano essere scritti immediatamente, quindi potrebbe essere necessario attendere un po’ prima di ottenere un output. Ma questo non è correlato agli avvisi.

Quindi, si verifica davvero un crash nel tuo caso?

Lo stesso, con impostazioni vanilla. Ma ho dovuto disabilitare temporaneamente una regola aggiuntiva di Postfix:

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

che funzionava perfettamente prima dell’aggiornamento (utilizza regole regex per rifiutare gli spammer). Il vero problema è che con questa impostazione abilitata, Postfix inizia a rifiutare tutte le email in arrivo, ma non riesco a capire il motivo dai log!

Forse un po’, ma sono passate ore e nei log non c’è ancora nulla (non vengono mostrate né email accettate né rifiutate, e c’è davvero traffico in entrata).

Avevi ragione, ci sono altre voci di log nell’output, ma l’output stesso è corrotto:

L’output di ./launcher logs mail-receiver inizia con un <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

seguito da una singola riga di voci di log e termina con il <HEAD> ripetuto sei volte ancora:

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

Stavo guardando solo la fine dell’output, e sembrava esserci sempre solo il <HEAD> senza altre voci.

C’è sicuramente qualcosa che non va nel rendering del log tramite ./launcher logs mail-receiver.

Credo di aver risolto il problema: manca una riga maillog_file nel Dockerfile. Soluzione temporanea: ho aggiunto

  POSTCONF_maillog_file: '/dev/stdout'

a mail-receiver.yml e ho ricompilato, ma questo dovrebbe essere corretto nell’immagine Docker

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

Quindi, dopo averla aggiunta, l’errore è sparito e i log funzionano correttamente? Se è così, potresti aprire una PR per apportare questa modifica?

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

1 Mi Piace

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

Grazie @md-misko - ho unito la PR e ho incrementato il tag discourse/mail-reciever:release su Dockerhub.

Sono sicuro che tu ne sia già a conoscenza, ma nel caso qualcun altro si imbatta in questo argomento, puoi aggiornare la tua versione del mail receiver eseguendo:

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

Hai qualche idea su come testare che l’immagine in esecuzione corrente stia eseguendo la versione più recente?

Un po’ contorto… ma penso che dovrebbe funzionare:

# Per prima cosa, assicurati di avere l'ultima immagine di base localmente
docker pull discourse/mail-receiver:release

# Ottieni il livello superiore dell'immagine di base
BASE_IMAGE_HASH=$(docker history discourse/mail-receiver:release -q | head -n 1)

# Ottieni i livelli della versione **in esecuzione**
RUNNING_IMAGE_HASH=$(docker container inspect mail-receiver -f "{{.Image}}")
RUNNING_IMAGE_LAYERS=$(docker history $RUNNING_IMAGE_HASH -q)

# Verifica se i livelli dell'immagine in esecuzione includono l'immagine di base corrente:
[[ "$RUNNING_IMAGE_LAYERS" == *"$BASE_IMAGE_HASH"* ]] && echo "Aggiornato"

Questo stamperà “Aggiornato” se sei aggiornato. Altrimenti, l’ultima riga non stamperà nulla e uscirà con uno stato diverso da zero.

2 Mi Piace

Oh. È fantastico. E sembra una soluzione generale per cui in precedenza avevo trovato solo soluzioni una tantum. Mi ci sarebbe voluto un po’ per capirlo. RUNNING_IMAGE_LAYERS è quello che non sapevo cercare.

L’ho testato su un’istanza che era stata aggiornata e su una che non lo era stata, e sembra che si comporti come previsto.

Grazie mille!

3 Mi Piace

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