Intro

Crear listas con mailman es ago que al final se aprende a hacer. Sin embargo, hay momentos en los que es necesario cambiar una lista de correo de nombre (doy fe de ello). En este tutorial trataré de recoger la forma de hacerlo.

 

Distintos métodos

En la web del manual de mailman (estoy usando la versión 2.1.15) hay una sección dedicada a ésto:

4.70. How do I change the name of (rename) a list?

En esencia se ofrecen tres posibilidades :

  • Crear una nueva lista y usar las aplicaciones de línea de comandos para transferir la configuración y los miembros de la lista
  • Usar el script clone_list
  • Mover los archivos

Como ninguno de los tres terminaba de convencerme, seguí indagando y encontré esta entrada en el blog de Chris Lamb: Renaming a Mailman list

Está feo de copiar todo lo de un blog en tu entrada, pero una vez reconocido al Cesar lo que es del Cesar (véase los enlaces al blog de Chris Lamb) vamos a copiar las instrucciones aquí no sea que el señor Lamb se aburra de mantener su blog y nos quedemos sin la información.

Definimos las variables para evitar liarnos de mala manera:

$ OLD=old-list-name
$ NEW=new-list-name
$ set -u

Después paramos mailman y para aseguramos de que la nueva lista no existe ejecutamos el comando siguiente. No nos debeoms de preocupar por los mensajes que entren a la lista tras parar mailman, porque nuestro MTA se hará cargo de ellos hasta que el qrunner vuelva a estar activo. El comando para comprobar que la lista nueva no existe es:

# test -a /var/lib/mailman/archives/private/${NEW} && echo '*** That mailing list name already exists. ***'

Ahora movemos los datos de la lista y regeneramos los archivos para esta lista:

# mv /var/lib/mailman/lists/${OLD} /var/lib/mailman/lists/${NEW}
# mv /var/lib/mailman/archives/private/${OLD} /var/lib/mailman/archives/private/${NEW}
# mv /var/lib/mailman/archives/private/${OLD}.mbox /var/lib/mailman/archives/private/${NEW}.mbox
# mv /var/lib/mailman/archives/private/${NEW}.mbox/${OLD}.mbox /var/lib/mailman/archives/private/${NEW}.mbox/${NEW}.mbox
# /usr/lib/mailman/bin/arch ${NEW}
En el blog de Lamb utiliza Debian (o Ubuntu) como servidor para mailman y emplea sudo para los comandos de root. Yo prefiero emplear la cuenta de root directamente (hasta que me cargue algo y entonces me arrepentiré de haberla usado y empezaré a emplear sudo). También varía la ruta para el directorio bin de mailman, que en su máquina es /var/lib y en la nuestra /usr/lib

Lo siguiente es no perder los correos que se enviasen a la antigua lista por si queda algún despistado por ahí. Ésto se hace añadiendo aliases a la tabla /etc/aliases que luego se gestionarán a su vez mediante los aliases de mailman:

$ sudo cp /etc/aliases `mktemp aliases-backup.XXXX`
$ sudo printf "\\n# '${OLD}' -> '${NEW}' mailing list rename \\n" | sudo tee --append /etc/aliases
$ echo "${OLD}: ${NEW}" | sudo tee --append /etc/aliases
$ for SUFFIX in admin bounces confirm join leave owner request subscribe unsubscribe; do echo "${OLD}-${SUFFIX}: ${NEW}-${SUFFIX}" | sudo tee --append /etc/aliases; done

Por último habría que ir a la web de administración de la lista y cambiar lo siguiente:

  • General / real_name: NEW
  • General / subject_prefix: «[NEW] » (or similar)
  • Privacy / Recipient filters / acceptable_aliases: Add OLD

Error de actualización de real_name

Porque todo no puede ser guay, guay, al final del proceso cuando quise cambiar el real_name de la lista para que apareciese con el nuevo nombre en la web y los mensajes que se envían, el sistema arrojó un error y no me permitió cambiarlo. La solución la da un tal Matt en los comentarios al blog de Lamb. Está descrita en la web del manual del mailman bajo el título cPanel issue (por eso no la vi a la primera). Pasa por emplear el comando withlist de mailman de la siguiente forma:

$ bin/withlist -l newname
 Loading list newname (locked)
 The variable `m' is the newname MailList instance
 >>> m.real_name
 'OldName'
 >>> m.real_name = 'NewName'
 >>> m.Save()
 >>>
 Unlocking (but not saving) list: newname
 Finalizing
 $

Bueno, pues eso ha sido todo.