L'objectif est double :
Sympa est prévu pour ça et nous aurons assez peu de choses à faire. L'idée est similaire à celle des domaines virtuels d'Apache. Allons-y progressivement.
Nous commençons par créer dans /etc/sympa
un sous répertoire que nous nommerons comme le domaine de listes à créer. Exemple :
mkdir /etc/sympa/lists.machin.net
Dans ce répertoire, il faudra créer un fichier nommé robot.conf
assez similaire à /etc/sympa/sympa.conf
Faisons simple :
## This is a sample config file for a Virtual Robot in Sympa ## This hostname will be compared with 'SERVER_NAME' ENV var in wwsympa.fcgi ## To deduce which Virtual Robot is being queried http_host lists.machin.net ## Listmasters email addresses listmaster sysop@machin.net ## Title for the ML service ## It is displayed as a title in the web interface title Les listes de machin.net create_list listmaster ## The default action when entering the web interface ## Can be 'lists', 'home' or 'which' default_home home
Rendons sympa propriétaire de tout ceci :
chown -R sympa:sympa /etc/sympa/lists.machin.net
La première étape est finie. Le fichier est assez compréhensible. Les options indiquées dedans viennent surcharger ou compléter celles qui sont dans /etc/sympa/sympa.conf
. Ainsi, sysop@machin.net
sera « listmaster » @lists.machin.net mais attention, le ou les listmasters définis dans le domaine principal (ici @lists.nain-t.net) le seront aussi @lists.machin.net. En revanche, sysop@machin.net
ne sera pas listmaster dans le domaine principal, ni dans les autres domaines virtuels, sauf mension contraire dans les robots.conf (ou sympa.conf).
Le domaine principal est hiérarchiquement supérieur à tous les domaines virtuels que nous pourrons créer par la suite.
SI vous allez faire un tour dans /var/lib/sympa/expl
, vous constaterez que sympa y range des choses concernant les lites du domaine principal. Suivant la même logique nous allons y créer un répertoire du nom de notre nouveau domaine :
mkdir /var/lib/sympa/expl/lists.machin.net chown sympa:sympa /var/lib/sympa/expl/lists.machin.net
Sympa pourra y stocker ses petites affaires concernant les listes @lists.machin.net
Il faut que le domaine machin.net soit enregistré sur nos DNS de manière à ce qu'ils sachent :
Voici un exemple minimal pour la zone machin.net :
$ttl 38400 @ IN SOA cyrus. sysop.bts.net. ( 2008060702 10800 3600 604800 38400 ) machin.net. IN NS cyrus.machin.net. MX 10 cyrus cyrus.machin.net. IN A 192.168.10.7 lists.machin.net. MX 10 cyrus lists IN A 192.168.10.7
Il faut que notre Apache réponde correctement à http://lists.machin.net
Pour ça, il suffit d'ajouter le paramètre ServerAlias lists.machin.net
à notre serveur virtuel et demander à l'Apache de relire sa configuration :
apache2ctl graceful
A ce niveau, nous pouvons envisager de créer des listes @lists.machin.net, mais la diffusion des messages ne se fera pas, Postfix n'est pas encore complètement au courant.
Il est déjà informé de deux choses :
lists.machin.net
est acquise, puisque elle va venir par la base MySQL de sympa ;#------------------------------ test0: list alias created 04 Jul 2008 test0: "| /usr/lib/sympa/bin/queue test0@lists.nain-t.net" test0-request: "| /usr/lib/sympa/bin/queue test0-request@lists.nain-t.net" test0-editor: "| /usr/lib/sympa/bin/queue test0-editor@lists.nain-t.net" #test0-subscribe: "| /usr/lib/sympa/bin/queue test0-subscribe@lists.nain-t.net" test0-unsubscribe: "| /usr/lib/sympa/bin/queue test0-unsubscribe@lists.nain-t.net" test0-owner: "| /usr/lib/sympa/bin/bouncequeue test0@lists.nain-t.net" #------------------------------ liste0: list alias created 04 Jul 2008 lists.machin.net-liste0: "| /usr/lib/sympa/bin/queue liste0@lists.machin.net" lists.machin.net-liste0-request: "| /usr/lib/sympa/bin/queue liste0-request@lists.machin.net" lists.machin.net-liste0-editor: "| /usr/lib/sympa/bin/queue liste0-editor@lists.machin.net" #lists.machin.net-liste0-subscribe: "| /usr/lib/sympa/bin/queue liste0-subscribe@lists.machin.net" lists.machin.net-liste0-unsubscribe: "| /usr/lib/sympa/bin/queue liste0-unsubscribe@lists.machin.net" lists.machin.net-liste0-owner: "| /usr/lib/sympa/bin/bouncequeue liste0@lists.machin.net"
Dans le domaine principal, test0
correspond bien à la partie utilisateur de l'adresse test0@lists.nain-t.net
. Ce n'est en revanche pas le cas dans notre domaine virtuel où il faudra faire correspondre lists.machin.net-liste0
à la partie utilisateur de liste0@lists.machin.net
L'astuce consiste à utiliser une « expression régulière » que Postfix consultera pour reconnaître ces alias virtuels. Nous créons donc par exemple un fichier /etc/postfix/sympa_virtual_regexp
qui contiendra cette ligne :
/^(.*)@lists\.machin\.net$/ lists.machin.net-$1
Vous ne lisez pas les expressions régulière dans le texte ? Dommage…
Tout ce qui commence (^
) par n'importe quel motif ((.*)
) suivi de @lists.machin.net
sans plus rien après ($
) sera remplacé par lists.machin.net-
suivi du premier (et unique) motif ($1
) trouvé dans la partie gauche. Exemple :
Dans liste0@lists.machin.net
, le motif, c'est liste0
. Le tout sera donc remplacé par lists.machin.net-liste0
, nous retombons bien sur nos pattes.
Il ne nous reste plus qu'à modifier dans le main.cf
le paramètre virtual_alias_maps
comme ceci :
virtual_alias_maps = mysql:/etc/postfix/db/virtual-alias.cf, regexp:/etc/postfix/sympa_virtual_regexp
Et à demander à Postfix de relire sa configuration. Tout devrait maintenant être opérationnel.
Ces cinq étapes ne seront à refaire qu'à chaque création d'un nouveau domaine virtuel. Par la suite la gestion des listes dans ces domaines virtuels ne nécessitera aucune modification sur Postfix ni sur Cyrus, qui n'est pas concerné.
Compte tenu de la souplesse de Postfix, d'autres approches sont possibles bien entendu, mais elles nécessiteront beaucoup plus d'interventions sur la configuration de Postfix, à moins de modifier le script alias_manager.pl
fourni avec Sympa, et probablement d'autres scripts aussi.