====== Domaines virtuels Sympa ====== ===== Le but ===== L'objectif est double : * pouvoir créer des listes de diffusion dans les domaines de messagerie que nous gérons. Par exemple, si nous avons aussi à gérer les domaines @machin.net et @chose.net, il faut que nous puissions créer des listes @lists.machin.net et @lists.chose.net, comme nous l'avons fait avec @lists.nain-t.net ; * offrir une interface de gestion des listes propre à chaque domaine. 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. ===== La méthode ===== ==== Etape 1 ==== 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. ==== Etape 2 ==== 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 ==== Etape 3 ==== Il faut que le domaine machin.net soit enregistré sur nos DNS de manière à ce qu'ils sachent : * résoudre lists.machin.net ; * indiquer un MX pour le domaine machin.net ; * indiquer un MX pour le sous-domaine lists.machin.net. 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 ==== Etape 4 ==== 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 ==== Etape 5 ==== 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 : * la destination ''lists.machin.net'' est acquise, puisque elle va venir par la base MySQL de sympa ; * les alias dans /etc/mail/sympa.aliases vont être automatiquement créés par le script cgi, mais voyons un peu... #------------------------------ 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. ==== Bilan ==== 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.