Mailman 3
Mailman 3 est encore en cours de déploiement, cette documentation risque d'évoluer dans les jours à venir.
Sommaire
Mailman 3 est le service de listes de diffusions utilisé au Crans. Il vient remplacer Mailman 2, après près de 20 ans de bons et loyaux services.
Mailman est déployé sur le serveur mailman. L'interface web de Mailman est disponible sur https://lists.crans.org/ (à venir) ou sur https://mailman.crans.org/.
Les listes de diffusion sont dans le domaine @lists.crans.org (certaines ont des alias @crans.org).
Installation
Le reste ci-dessous est obsolète et tiré de la page de Mailman 2. C'est en cours de réécriture.
Convention de nommage
Avant de créer une liste, merci de vérifier que son nom vérifie la convention de nommage décrite sur cette page.
Administration
Tous les scripts d'administration sont dans /usr/lib/mailman/bin/, certains de ces scripts ont des liens dans /usr/sbin afin de pouvoir les lancer directement.
Créer une nouvelle mailing liste
Il est d'usage que les mailing lists soient créées suite à une demande sur la ML nounou, histoire de garder une trace de qui a demandé quoi.
chove@redisdead% sudo newlist
et on répond aux questions :
Donner le nom de la liste : ma-liste Entrez l'adresse courriel du gestionnaire de la liste : chove@crans.org Mot de passe initial de la liste ma-liste : Tapez sur Entrée pour aviser le propriétaire de ma-liste...
Mailman va créer tout seul les alias dont il a besoin dans /etc/postfix/mailman-aliases.
Pour générer un mot de passe, on peut utiliser mkpasswd
Supprimer une liste
chove@redisdead% sudo rmlist ma-liste
Faire démourrir une liste
Récupérer sur zephyr /var/lib/mailman/lists/${nomdeliste} , /var/lib/mailman/archives/private/${nomdeliste} (si on veut récupérer les archives, mais non obligatoire), /var/lib/mailman/data/aliases, /var/lib/mailman/data/virtual-mailman via l'interface de backuppc (creds dans cranspasswords). Récupérer les entrées de la liste dans le backup d'aliases et virtual-mailman avec les stanzas et les remettre dans les fichiers qui vont bien (vous pouvez utiliser vimdiff). Extraire les archives en root pour conserver les bonnes permissions pour /var/lib/mailman/lists/${nomdeliste} et /var/lib/mailman/archives/private/${nomdeliste} puis copier les dossiers au bon endroit sur redisdead.
Puis :
sudo postmap /var/lib/mailman/data/aliases && sudo postmap /var/lib/mailman/data/virtual-mailman
Quelques scripts d'administration utiles
- Changer le mot de passe d'une liste
% sudo change_pw -l la_liste
Cette commande génère un mot de passe aléatoire et l'envoie aux propriétaires de la liste en question.
- Lister les abonnés d'une liste
% sudo list_members -o fichier_de_sortie la_liste
- Lister les abonnements d'une adresse mail
% sudo find_member address@example.com
- Ajouter ou supprimer des membres d'une liste
% sudo add_members -r fichier_contenant_les_adresses la_liste % sudo remove_members -f fichier_contenant_les_adresses la_liste
Les deux commandes suivantes sont cronnées et contenues dans /usr/lib/mailman/cron/. Elles ne sont en général que très peu exécutées manuellement.
- Envoyer un rappel du mot de passe des abonnés d'une liste
% sudo ./mailpasswds -l la_liste
- Envoyer les digests d'une liste (utile par exemple avant de relancer mailman)
% sudo ./senddigests -l la_liste
Invoquer les deux scripts précédents sans options traite l'action demandée sur l'ensemble des listes.
- Voir quelles sont les MLs plus utilisées (et donc potentiellement supprimables)
% sudo /usr/scripts/utils/old_ml.py 01/01/2011
Paramétrer une liste
Pour paramétrer une liste, on peut soit utiliser l'interface web : http://lists.crans.org/admin/ma-liste ; soit utiliser les scripts sur redisdead (dans /var/lib/mailman/bin/).
Si on veut utiliser l'interface web, on peut utiliser le mot de passe général de mailman disponible sur vert.
Développement
On peut ajouter à mailman de nouvelles features spéciales crans assez aisément car les fonctions de mailman sont bien séparées dans des scripts différents.
Configuration Générale
La configuration se trouve dans /etc/mailman/mm_cfg.py. Un lien symbolique pointe vers ce fichier depuis /usr/lib/mailman/Mailman/mm_cfg.py. Les scripts importent ce dernier. mm_cfg.py commence par importer toutes les variables définies dans Defaults. Regarder ce fichier donne des idées de ce que l'on redéfinit dans mm_cfg.py.
Configuration Postfix
C'est le serveur mail postfix sur readisdead qui reçoit tous les mails des mailinglists et qui les transmet à mailman. La méthode utilisée pour transmettre les mails est d'utiliser un transport postfix pipe qui pipe les mails destinés aux ML dans le programme /var/lib/mailman/bin/postfix-to-mailman.py. Des commentaires au début dudit fichier détaillent l'installation. En voici une copie :
# This script is meant to be called as a postfix transport pipe. # It catches all mail to a virtual domain, eg "lists.example.com". It # looks at the recipient for each mail message and decides if the mail # is addressed to a valid list or not, and optionally bounces the # message with a helpful suggestion if it's not addressed to a # list. It decides if it is a posting, a list command, or mail to the # list administrator, by checking for the -admin, -owner, -request, # -join, -leave, -subscribe and -unsubscribe addresses. It will # recognize a list as soon as the list is created, there is no need to # add _any_ aliases for any list. It recognizes mail to postmaster, # abuse and mailer-daemon, and routes those mails to DEB_LISTMASTER as # defined in mm_cfg.py # INSTALLATION: # # Install this file as /var/lib/mailman/bin/postfix-to-mailman.py # # To configure a virtual domain to connect to mailman, edit Postfix thusly: # # /etc/postfix/main.cf: # relay_domains = ... lists.example.com # relay_recipient_maps = ... hash:/var/lib/mailman/data/virtual-mailman # transport_maps = hash:/etc/postfix/transport # mailman_destination_recipient_limit = 1 # # /etc/postfix/master.cf # mailman unix - n n - - pipe # flags=FR user=list # argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user} # # /etc/postfix/transport: # lists.example.com mailman: # # /etc/mailman/mm_cfg.py # MTA = None # So that mailman skips aliases generation # POSTFIX_STYLE_VIRTUAL_DOMAINS = ['lists.example.com'] # # alias for postmaster, abuse and mailer-daemon # DEB_LISTMASTER = 'postmaster@example.com' # # Replace lists.example.com above with the name of the domain to be # connected to Mailman. Note that _all_ mail to that domain will go to # Mailman, so you don't want to put the name of your main domain # here. Typically a virtual domain lists.domain.com is used for # Mailman, and domain.com for regular email. # # The recipient map allows Postfix to know which addresses exists. # Thus, if someone tries to send a (spam?) message to an undefined # address in the domain connected to Mailman, Postfix will just refuse # it instead of sending a (backscatter?) bounce. # # When you are done, restart Postfix, and run /usr/lib/mailman/bin/genaliases # to generate the initial recipient map for the existing mailing-lists.
Configuration d'une mailing-list
Chaque mailing-list peut avoir ses propres variables locales. Elles ne redéfinissent pas automatiquement les variables de mm_cfg.py, mais dans certains des scripts, la configuration globale n'est utilisée que si la mailing-list ne définit pas aussi la variable. Ces variables sont stockées automatiquement par mailman. Le plus simple pour connaitre ou modifier ces dernières est de lancer un script personnel avec la commande "sudo /usr/lib/mailman/bin/config_list -i $CHEMIN_VERS_LE_SCRIPT $NOM_DE_LA_LISTE". mlist est alors la liste demandée.
Handler
Lorsque mailman reçoit un mail, il le fait passer dans un pipeline de Handler. Chacun a sa fonction, allant du nettoyage d'entêtes, à l'envoi à tous les abonnées, en passant par un filtre à spams. Le script gérant cela est /usr/lib/mailman/Mailman/Queue/IncomingRunner.py, les handlers se trouvent dans /usr/lib/mailman/Mailman/Handler. Pour faire son propre handler le plus simple est de partir d'un déjà existant et de s'aider de cette faq. Le plus important est d'ajouter le handler soit dans mm_cfg.py dans la liste GLOBAL_PIPELINE, soit dans la variable pipeline d'une mailing list pour qu'elle soit la seul à utiliser ce handler. Si cette variable n'existe pas déjà, ne pas oublier de copier GLOBAL_PIPELINE dans pipeline (voir /usr/scripts/mailman/config_list_spamassassin_crans).
Gui
L'interface web est aussi gérée en python, par les scripts de Mailman/Cgi. L'interface administrative fait aussi appel aux scripts de Mailman/Gui qui correspondent chacun à un onglet. Attention, l'ajout d'un script dans ce dossier ne suffit pas à le faire apparaître dans l'interface. Il faut l'ajouter dans les imports de Mailman/Gui/__init__.py et dans le fichier mm_cfg.py dans la liste ADMIN_CATEGORIES. Un script de Gui consiste surtout à donner le titre de la catégorie
def GetConfigCategory(self): return 'spamassassin', _('En test :SpamAssassin options...')
et à renvoyer une liste de 6-uplets :
def GetConfigInfo(self, mlist, category, subcat=None): if category <> 'spamassassin': return None return [( , , , , , ),( , , , , , )]
- Le nom de la variable à modifier
- Le type de variable (nombre : mm_cfg.Number, texte : , multiline : ,...)
- La taille de la zone
- 0
_(Ma définition qui apparait à coté de la zone)
_(Ma définition plus précise si la personne demande plus d'informations)
Mailman s'occupe de tout le reste. Voir les scripts pour plus d'informations.
Normalement les textes sont tous en anglais et il y a un système de traduction que l'on peut utiliser pour traduire en français. Mais le plus simple semble d'écrire directement en français.