Errores de registro de mail-receiver después de la actualización de letsencrypt

Continuando la discusión de Actualización del receptor de correo autoalojado tras el cambio del certificado raíz de Let’s Encrypt:

Tras actualizar mail-receiver a la última versión, ./launcher logs mail-receiver muestra un error después de:

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

y no muestra ningún otro evento (correos entrantes, correos rechazados, etc.).

He encontrado algunos problemas con configuraciones personalizadas de Postfix (que funcionaban perfectamente antes de la actualización reciente) y necesito depurar, lo cual es difícil sin los registros.

¿Has probado estos pasos?

1 me gusta

Veo los mismos errores advertencias, pero Postfix sigue funcionando correctamente y aceptando correos después de eso.

A veces los registros no parecen volcar inmediatamente, por lo que es posible que tengas que esperar un rato antes de obtener alguna salida. Pero eso no tiene relación con las advertencias.

¿Entonces, ¿realmente se está bloqueando en tu caso?

Lo mismo, con la configuración por defecto. Pero tuve que desactivar temporalmente una regla adicional de Postfix:

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

que funcionaba perfectamente antes de la actualización (utiliza reglas de expresión regular para rechazar spammers). El problema real es que, con esta configuración activada, Postfix empieza a rechazar todos los correos entrantes, ¡pero no puedo ver por qué en los registros!

Quizás un rato, pero han pasado horas y aún no hay nada en los registros (no se muestran correos aceptados ni rechazados, y hay tráfico entrante).

Tenías razón, hay otras entradas de registro en la salida, pero la salida en sí está distorsionada:

La salida de ./launcher logs mail-receiver comienza 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

seguido de una sola línea de entradas de registro, y termina con el <HEAD> repetido seis veces más:

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

Solo estaba mirando el final de la salida, y siempre parecía haber solo el <HEAD> sin ninguna otra entrada.

Definitivamente hay algo mal con la renderización del registro a través de ./launcher logs mail-receiver.

Creo que he resuelto esto: falta una línea maillog_file en el Dockerfile. Solución temporal: añadí

  POSTCONF_maillog_file: '/dev/stdout'

a mail-receiver.yml y reconstruí, pero esto debería corregirse probablemente en la imagen de Docker

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

¿Así que después de añadir esto, el error desapareció y los registros funcionan? De ser así, ¿te importaría enviar un PR para realizar ese cambio?

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

1 me gusta

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

Gracias @md-misko - He fusionado la PR y he incrementado la etiqueta discourse/mail-reciever:release en Dockerhub.

Estoy seguro de que ya lo sabes, pero en caso de que alguien más se encuentre con este tema, puedes actualizar tu versión del receptor de correo ejecutando:

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

¿Tienes alguna idea de cómo probar que la imagen en ejecución actual está ejecutando la última versión?

Un poco complicado… pero creo que esto debería funcionar:

# Primero, asegúrate de tener la última imagen base localmente
docker pull discourse/mail-receiver:release

# Obtén la capa superior de la imagen base
BASE_IMAGE_HASH=$(docker history discourse/mail-receiver:release -q | head -n 1)

# Obtén las capas de la versión **en ejecución**
RUNNING_IMAGE_HASH=$(docker container inspect mail-receiver -f "{{.Image}}")
RUNNING_IMAGE_LAYERS=$(docker history $RUNNING_IMAGE_HASH -q)

# Comprueba si las capas de la imagen en ejecución incluyen la imagen base actual:
[[ "$RUNNING_IMAGE_LAYERS" == *"$BASE_IMAGE_HASH"* ]] && echo "Actualizado"

Esto imprimirá “Actualizado” si estás al día. De lo contrario, la última línea no imprimirá nada y saldrá con un estado distinto de cero.

2 Me gusta

Oh. Eso es brillante. Y parece que es una solución general para la que anteriormente solo había encontrado soluciones puntuales. Me habría llevado un tiempo darme cuenta. RUNNING_IMAGE_LAYERS es lo que no sabía que debía buscar.

Lo probé en una instancia que había sido actualizada y en otra que no, y parece que se comporta como se esperaba.

¡Muchas gracias!

3 Me gusta

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