I. Paramétrage de apache2



Documents pareils
Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

1 Configuration des Fichiers Hosts, Hostname, Resolv.conf

Configurer la supervision pour une base MS SQL Server Viadéis Services

Installation de la plate-forme Liberacces 2.0 «Intégrale» avec LiberInstall

Tutoriel de formation SurveyMonkey

Tutoriel compte-rendu Mission 1

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

Préparation d un serveur Apache pour Zend Framework

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

CASE-LINUX MAIL - ROUNDCUBE

Installer un domaine DNS

L installation a quelque peu changée depuis les derniers tutos, voici une actualisation.

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

Architecture de la plateforme SBC

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

Procédure d'installation

HowTo Installer egroupware 1.2 sur SME Serveur 7.0

Pratique et administration des systèmes

PPE GESTION PARC INFORMATIQUE

Installation d'un serveur sftp avec connexion par login et clé rsa.

Sous Thunderbird (Linux - Windows - Mac os X) Mise en fonction du répondeur automatique.

Installation de Zabbix

TP Service HTTP Serveur Apache Linux Debian

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

TP HTTP. Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

04/02/2014 Tutoriel. Lubuntu & glpi. thomas [NOM DE LA SOCIETE]

Request Tracker pour les Nuls. Yves Agostini - YVESAGO

Outils Logiciels Libres

Installation de Vmware serveur Windows

Déploiement d OCS 1.02 RC2 sous Debian Etch 64

Classe et groupe : 1P 3 SEN TRI. Ubuntu : serveur Contrôleur de Domaine (PDC) avec SAMBA

Module 7 : Configuration du serveur WEB Apache

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

REPARTITION DE CHARGE LINUX

Les fichiers de configuration d'openerp

Guide Installation Serveur Extensive Testing

Guide Installation Serveur Extensive Testing

CDS Invenio Installation et configuration de base

DOCUMENTATION - FRANCAIS... 2

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Instructions Mozilla Thunderbird Page 1

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

Documentation FOG. 3. Choisir le nom de la machine, le nom d utilisateur et le mot de passe correspondant (par exemple : fog, password)

Installation GLPI-OCSNG-SSL Linux Debian Sarge

Installation de Snort sous Fedora

Synchronisation Mysql (Replication)

[ GLPI et OCS pour Gentoo 2006] ArtisanMicro. Alexandre BALMES

Gérer ses environnements de développement avec Vagrant RMLL 2012

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

MS SQL Express 2005 Sauvegarde des données

Imprimantes et partage réseau sous Samba avec authentification Active Directory

sshgate Patrick Guiran Chef de projet support

INSTALLATION ET CONFIGURATION DE OPENLDAP

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Documentation d'installation Plateforme femme actuelle

Installation de GFI MailSecurity en mode passerelle

VoD ( Video on Demand ) avec VLC

Installation d' OCS inventory et de GLPI

Installation d un hébergement Web à domicile

CONFIGURATION DU SERVEUR DE MAILS EXIM. par. G.Haberer, A.Peuch, P.Saade

Vanilla : Virtual Box

Hébergement de site web Damien Nouvel

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Mise en place d un firewall d entreprise avec PfSense

Serveur Subversion Debian GNU/Linux

WEB page builder and server for SCADA applications usable from a WEB navigator

DOCUMENTATION - FRANCAIS... 2

Le serveur web Apache

LAMP : une nouvelle infrastructure LAMP. Une architecture modulaire. Installation

MERCURY VERSION m32-301a (01/03/2000) 1. PRESENTATION 2. COMMENT FAIRE POUR :

Installation d'un serveur FTP géré par une base de données MySQL

Réaliser un inventaire Documentation utilisateur

Comment créer un site web Proxy gratuitement!

ISPConfig Documentation

BTS SIO Dossier BTS. PURCHLA Romain

Stockage du fichier dans une table mysql:

Sécurité des applications web. Daniel Boteanu

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

MANUEL DE CRÉATION ET DE CONFIGURATION DES BOÎTES CHEZ ALL2ALL (POUR LE GESTIONNAIRE) v1.3

Client windows Nagios Event Log

Mysql avec EasyPhp. 1 er mars 2006

GLPI OCS Inventory. 1. Prérequis Installer un serveur LAMP : apt-get install apache2 php5 libapache2-mod-php5 apt-get install mysql-server php5-mysql

La double authentification dans SharePoint 2007

Maintenance et gestion approfondie des Systèmes d exploitation Master 2 SILI. Année universitaire David Genest

Les serveurs WEBUne introduction

Installer un serveur web de développement avec VirtualBox

Oracle Learning Library Tutoriel Database 12c Installer le logiciel Oracle Database et créer une Database

Déploiement d'un serveur ENT

Utiliser un proxy sous linux

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Transfert d un site local vers un serveur. NPDS REvolution 13. Rédaction : Axel Relecture : Dev & Jpb

Practice Direction. Class Proceedings

Transcription:

POUR CREER DES LISTES SUR UNE CONFIG SYMPA Suppositions : dns : domain.tld et listes.domain.tld pointant en MX sur votre serveur. config postfix (feisty version 2.3.8-2) avec alias, domaines, utilisateurs virtuels sous mysql (Postfixadmin) une install de sympa via les packages ubuntu feisty (version 5.2.3-1.2) vous savez ce que vous faites en tapant les commandes ci-dessous n'allez pas vous plaindre après! Lisez ce document en entier avant de commencer à bidouiller Ce que ça fait : Paramètre votre postfix pour gérer non pas une mais plusieurs listes via le logiciel sympa (www.sympa.org) mais aussi des serveurs virtuels Crée les alias nécessaires au fonctionnement des listes. Ce que ça ne fait pas : Vous guider pour l'installation des packages (commencez par apt-get install sympa) Le café nécessaire à ce paramétrage Roadmap : I. Paramétrage de apache2... 2 II. Paramétrage de sympa... 3 III. Paramétrage de syslog... 4 IV. Paramétrage des hôtes virtuels... 4 V. Paramétrage de postfix... 5 VI. Création d'alias... 6 Première étape : les alias des robots virtuels... 6 Paramétrage des alias à définir... 6 Création des alias de liste config par défault... 7 Création des alias de liste config optionnelle... 10 VII. Lancement des services / Validation de la configuration... 15 VIII. Création d'une liste... 16 IX. Encore des problèmes?... 17 Réalisé par Vincent le 8 juin 2007 Page 1 / 17

I. Paramétrage de apache2 Pour faire tourner sympa, vous devez utiliser le module fast-cgi (mod-fastcgi je crois). On doit créer un hôte virtuel pour utiliser le module web de sympa (wwsympa) Pour ma part, j'ai fais une copie du fichier /etc/sympa/httpd.conf-fcgi que j'ai placée dans /etc/apache2/sites-available/sympa.conf Pour activer le site on crée un lien symbolique ln-s /etc/apache2/sites-available/sympa.conf /etc/apache2/sites-enabled/sympa.conf Bon sinon on a quoi dans ce fichier? L'activation pour un répertoire (/wws dans ce cas) du script fcgi fourni par sympa. /etc/apache2/sites-available/sympa.conf #-- WWSYMPA begin <IfModule mod_fastcgi.c> AddHandler fastcgi-script.fcg.fcgi.fpl FastCgiServer /usr/lib/cgi-bin/sympa/wwsympa.fcgi -processes 2 </IfModule> <VirtualHost *:80> ServerName ServerAdmin listes.domain.tld listes@domain.tld DocumentRoot /var/www/domain.tld/sympa # pas sûr que ça serve mais ca fait plus propre dans la définition d'un vhost. # j'ai placé un fichier index.html qui fait une redirection vers /wws # comme ca si un utilisateur va sur http://listes.domain.tld, il tombe sur /wws #Extrait du fichier /var/www/domain.tld/sympa/index.htlm #<html> #<head> #<meta HTTP-EQUIV="refresh" content="0; URL=http://listes.domain.tld/wws"> #</head> #<body></body> #</html> <Location /wws> SetHandler fastcgi-script </Location> Alias /wwsicons /usr/share/sympa/icons ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa.fcgi </VirtualHost> # Si on a plusieurs robots, il faut tous les définir. Par exemple : <VirtualHost *:80> ServerName listes.otherdomain.tld ServerAdmin listes@otherdomain.tld DocumentRoot /var/www/otherdomain.tld/sympa <Location /wws> SetHandler fastcgi-script </Location> Alias /wwsicons /usr/share/sympa/icons ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa.fcgi </VirtualHost> #-- WWSYMPA end Il faut maintenant faire une petite bidouille pour que ce script soit lancé par l'utilisateur sympa. Note : cet utilisateur a du être créé lors de l'install des packages. Si ce n'est pas le cas il faut le rajouter Réalisé par Vincent le 8 juin 2007 Page 2 / 17

Déjà on va attribuer le fichier wwsympa.fcgi à l'utilisateur sympa : sudo chown sympa /usr/lib/cgi-bin/sympa/wwsympa.fcgi Ensuite, on lui fixe le bit suid pour que lors de l'exécution, apache lance le script avec cet utilisateur (l'utilisateur qui est propriétaire du fichier) sudo chmod 4755 /usr/lib/cgi-bin/sympa/wwsympa.fcgi C'est à peu près bon pour le serveur apache. Mais on ne le relance pas encore II. Paramétrage de sympa On va maintenant modifier les fichiers de config de sympa. /etc/sympa/sympa.conf Les choses à voir dans ce fichier (le reste est paramétré par défaut lors de l'installation) # si vous avez des problèmes c'est par là qu'il faut commencer (remplacer '0' par '4') log_level 0 domain listes.domain.tld # votre adresse mail (vous pouvez aussi utiliser un alias ) listmaster listes@domain.tld lang fr # à vous de renseigner les paramètres de connexion à votre base de données... db_type mysql db_name <-base_sympa-> db_host localhost db_user <-user_sympa-> db_passwd <-pass_sympa-> # pour cette adresse, utiliser le même dossier que dans la définition du vhost # apache (dans notre cas /wws) wwsympa_url http://listes.domain.tld/wws # attention pas d'espace si vous utilisez plusieurs locales supported_lang en_us,fr Pour la création de la base de donnée, vous trouverez des scripts ici : /usr/lib/sympa/bin/create_db.mysql /usr/lib/sympa/bin/create_db.oracle /usr/lib/sympa/bin/create_db.pg /usr/lib/sympa/bin/create_db.sqlite /usr/lib/sympa/bin/create_db.sybase Pensez à créer un utilisateur et lui donner les droits sur la base Petite option : sympa utilise par défaut certains répertoires pour stocker les archives de vos listes ainsi que certains messages "bouce". Je ne saurais vous conseiller de modifier l'emplacement de ces répertoires s'ils sont sur une partition 'critique' de votre serveur (comme c'est le cas chez certains hébergeurs) Vous pouvez par exemple créer ces répertoires mkdir /home/sympa mkdir /home/sympa/wwsarchive mkdir /home/sympa/wwsbounce Réalisé par Vincent le 8 juin 2007 Page 3 / 17

Puis changer leur propriétaire chwon R sympa:sympa /home/sympa Et enfin modifier l'emplacement de ces répertoires soit en créant des liens symboliques rm rf /var/lib/sympa/wwsarchive rm rf /var/spool/sympa/wwsbounce ln s /var/lib/sympa/wwsarchive /home/sympa/wwsarchive ln s /var/spool/sympa/wwsbounce /home/sympa/wwsbounce Soit en modifiant le fichier de config /etc/sympa/wwsympa.conf arc_path bounce_path /home/sympa/wwsarchive /home/sympa/wwsbounce III. Paramétrage de syslog Il faut maintenant configurer les logs pour en avoir des spécifiques à sympa (plus pratique pour les phases de débug On édite le fichier : /etc/syslog.conf et on rajoute : local0.* /var/log/sympa.log IV. Paramétrage des hôtes virtuels Le staff sympa et moi-même vous conseillons de créer dès le début un hôte virtuel pour sympa. Non pas que ce soit nécéssaire, mais si dans 6 mois vous devez en rajouter un, vous aurez déjà tout oublié Alors autant le faire maintenant! Il suffit pour cela de créer un fichier robot.conf qui va reprendre le paramétrage de sympa.conf spécifique à votre hôte. Il faut créer ce fichier dans un répertoire qui porte le nom de votre robot : /etc/sympa/listes.domain.tld/robot.conf Si vous avez un autre robot virtuel : /etc/sympa/listes.otherdomain.tld/robot.conf Mais qu'est ce qu'on met dedans? # Le plus important http_host listes.domain.tld # Mais aussi wwsympa_url http://listes.domain.tld/wws listmaster listes@domain.tld # Et encore... title Mon Titre domain.tld # pour plus tard, rajoutez donc minidomain domain.tld Réalisé par Vincent le 8 juin 2007 Page 4 / 17

Vous pouvez reprendre quasi tous les paramètres définis dans sympa.conf que vous pouvez spécifier à votre robot. Pour tous ces détails, allez voir la documentation fournie sur www.sympa.org V. Paramétrage de postfix Maintenant, il va bien falloir se pencher sur la question : que vont faire mes messages? Tout d'abord, je suppose que vous avez une configuration de ce type pour la gestion des alias /etc/postfix/main.cf # NOTE : proxy: est optionnel. virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf On va donc rajouter quelques paramètres pour que postfix comprenne qu'il s'agit d'un mail destiné à sympa et non à un utilisateur local (ou autre alias). transport_maps = regexp:/etc/postfix/transport_regexp sympa_destination_recipient_limit = 1 sympabounce_destination_recipient_limit = 1 # et si ce n'est pas déjà le cas : recipient_delimiter = + On doit aussi créer quelques fichiers : /etc/postfix/transport_regexp Ce fichier va permettre à postfix d'analyser les messages et, en fonction du destinataire, soit le distribuer à sympa (ou sympabouce), soit le distribuer normalement. Il faut créer ces deux lignes pour chaque robot virtuel (voir la faq postfix sur www.sympa.org) /^.*\+owner@listes\.domain\.tld*$/ /^.*\@listes\.domain\.tld*$/ sympabounce: sympa: Donc si vous avez un autre robot appelé listes.otherdomain.tld il faut rajouter ces deux lignes. /^.*\+owner@listes\.otherdomain\.tld*$/ /^.*\@listes\.otherdomain\.tld*$/ sympabounce: sympa: Afin que postfix comprenne qui est sympa et sympabounce, on modifie : /etc/postfix/master.cf On rajoute : # # Configuration for Sympa Mailing Lists # sympa unix - n n - - pipe flags=r user=sympa argv=/usr/lib/sympa/bin/queue ${recipient sympabounce unix - n n - - pipe flags=r user=sympa argv=/usr/lib/sympa/bin/bouncequeue ${recipient On peut maintenant relancer postfix pour valider la config : sudo /etc/init.d/postfix reload Voilà qui est fait! Il faut maintenant créer quelques alias. Réalisé par Vincent le 8 juin 2007 Page 5 / 17

VI. Création d'alias Une étape plutôt chiante je dois le dire car sympa utilise par défaut un fichier d'alias indexé (comme postfix par défaut ) Mais si vous en êtes là, c'est bien pour contourner ce problème non? Tout d'abord, un petit rappel En utilisant une base sql pour la gestion des alias, postfix vérifie dans cette base, avant même de procéder à la distribution, que le destinataire existe. Il faut donc créer des alias pour la liste juste pour ca! Première étape : les alias des robots virtuels Pour fonctionner correctement et offrir toutes ses fonctionnalités, sympa a besoin de quelques alias : bounce+*@listes.domain.tld > bounce+*@listes.domain.tld listmaster@listes.domain.tld > listmaster@listes.domain.tld postmaster@listes.domain.tld > postmaster@domain.tld sympa-owner@listes.domain.tld > sympa-owner@listes.domain.tld sympa-request@listes.domain.tld > sympa-request@listes.domain.tld sympa@listes.domain.tld > sympa@listes.domain.tld Note : j'ai rajouté l'alias postmaster qui devrait exister pour tout domaine ou sous-domaine. A vous de le gérer pour le domaine principal (domain.tld). Vous n'avez à créer ces alias qu'à la création des robots virtuels. Les alias de chaque liste vont être créés automatiquement. A ce stade, on reste dans la configuration par défaut de sympa (gestion via listes.domain.tld). Mais comme je trouve plus pratique pour les utilisateurs d'envoyer un mail à maliste@domain.tld que maliste@listes.domain.tld on va créer des alias pour véhiculer les messages entre le domaine domain.tld et listes.domain.tld. Pour que ce soit plus clair par la suite, ce sera la 'config optionnelle'. bounce+*@domain.tld > bounce+*@listes.domain.tld listmaster@domain.tld > listmaster@listes.domain.tld sympa-owner@domain.tld > sympa-owner@listes.domain.tld sympa-request@domain.tld > sympa-request@listes.domain.tld sympa@domain.tld > sympa@listes.domain.tld Vous n'avez à créer ces alias qu'à la création des robots virtuels. Les alias de chaque liste vont être créés automatiquement. Paramétrage des alias à définir Pour chaque liste, on doit définir certains alias comme : maliste@listes.domain.tld ou encore malisteunsubscribe@listes.domain.tld Sympa utilise un fichier pour la définition de ces adresses : /usr/share/sympa/list_aliases.tt2 On va l'adapter à la configuration et au fonctionnement de postfix : [% list.name %]: "[% list.name %]" [% list.name %]-request: "[% list.name %]-request" [% list.name %]-editor: "[% list.name %]-editor" Réalisé par Vincent le 8 juin 2007 Page 6 / 17

#[% list.name %]-subscribe: "[% list.name %]-subscribe" [% list.name %]-unsubscribe: "[% list.name %]-unsubscribe" [% list.name %][% return_path_suffix %]: "[% list.name %][% return_path_suffix %]" Notez que j'ai conservé la même syntaxe mais que je ne rajoute pas l'extension '@listes.domain.tld' via ce fichier. Ce sera fait par le script alias_manager dans les sections suivantes. Aussi, la 4 ème ligne est commentée. Je n'ai pas cherché à comprendre le pourquoi du comment, mais elle ne doit pas être nécessaire Création des alias de liste config par défault Avant d'attaquer cette partie, lisez aussi la section suivante 'Création des alias de liste config optionnelle' pour savoir quelle configuration appliquer! Dans cette configuration il faut modifier ou remplacer le fichier /usr/lib/sympa/bin/alias_manager.pl Pensez à renseigner les paramètres de votre base de données utilisée pour la gestion des alias avec postfix! #!/usr/bin/perl ## This version of alias_manager.pl has been customized by Bea. ## Modified by Vinc for postfix support with virtual aliases stored in mysql database. ## It has the ability to add/remove list aliases in a MySQL database for postfix ## To make sympa use this script, you should install it as /home/sympa/bin/alias_manager.pl ## You should edit all the $mysql_xxx below to use your own mysql database ## Also, make sure the file /usr/share/sympa/list_aliases.tt2 has been modified $ENV{'PATH' = ''; ## Load Sympa.conf print STDERR "Load Sympa.conf\n"; use strict; use lib '/usr/lib/sympa/bin'; use Conf; use POSIX; require "tools.pl"; require "tt2.pl"; use DBI; ## For debugging purpose, set this to true, mysql insert nor delete will be performed ## it will only show the sql syntax my $onlytest = 'false'; #my $onlytest = 'true'; unless (Conf::load('/etc/sympa/sympa.conf')) { print STDERR gettext("the configuration file /etc/sympa/sympa.conf contains errors.\n"); exit(1); ## MYSQL configuration my $mysql_host = "localhost"; my $mysql_base = "db_name"; my $mysql_user = "db_user"; my $mysql_pass = "db_pass"; my $default_domain; my $return_path_suffix; my ($operation, $listname, $domain) = @ARGV; my $dbh; my $sql; my @enr; unless ($onlytest eq 'false') {print STDERR "-- ONLY TESTING --\n"; Réalisé par Vincent le 8 juin 2007 Page 7 / 18

if (($operation!~ /^(add) (del)$/) ($#ARGV < 2)) { print STDERR "Usage: $0 <add del> <listname> <robot>\n"; exit(2); $default_domain = $Conf{'domain'; $return_path_suffix = &Conf::get_robot_conf($domain, 'return_path_suffix'); #$return_path_suffix = $Conf{'return_path_suffix'; my %data; $data{'date' = &POSIX::strftime("%d %b %Y", localtime(time)); $data{'list'{'domain' = $data{'robot' = $domain; $data{'list'{'name' = $listname; $data{'default_domain' = $default_domain; $data{'is_default_domain' = 1 if ($domain eq $default_domain); #$data{'is_default_domain' = 1; $data{'return_path_suffix' = $return_path_suffix; my @aliases ; my $tt2_include_path = &tools::make_tt2_include_path($domain,'',,); my $aliases_dump; &tt2::parse_tt2 (\%data, 'list_aliases.tt2',\$aliases_dump, $tt2_include_path); @aliases = split /\n/, $aliases_dump; unless (@aliases) { print STDERR "No aliases defined\n"; exit(15); if ($operation eq 'add') { ## Check existing aliases print STDERR "Check existing aliases\n"; if (&already_defined(@aliases)) { print STDERR "Some alias already exist - Stopping script\n"; exit(13); if (!&initialize_mysql) { print STDERR "Can't connect to MySQL database\n"; exit(14); ## Adding default aliases for $domain (ie mylist@lists.domain.tld, mylistsubscribe@lists.domain.tld...) print STDERR "Creating alias for robot : $domain\n"; foreach my $alias (@aliases) { print STDERR "For each alias in robot $domain add\n"; if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping\n"; $alias =~ /^([^:]+):\s*(\".*\")$/; my $alias_value = $1."@".$domain; my $command_value = $1."@".$domain; $command_value =~ s/\"//g; print STDERR "Trying inserting alias $alias_value in domain $domain\n with command line $command_value\n"; # We create the new mysql alias. $sql = "INSERT INTO alias SET address = '".$alias_value."', domain = '".$domain."', goto = '".$command_value."', active = '1'"; print STDERR "SQL SYNTAX : $sql\n"; # We finally add the entry if ($onlytest eq 'false'){ $dbh->do($sql) or die "$DBI::errstr"; else {print STDERR "-- ONLY TESTING --\n"; &finalize_mysql; elsif ($operation eq 'del') { print STDERR "Operation DEL\n"; if (!&initialize_mysql) { Réalisé par Vincent le 8 juin 2007 Page 8 / 18

print STDERR "Can't connect to MySQL database\n"; exit(7); foreach my $alias (@aliases) { if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping DEL\n"; $alias =~ /^([^:]+):/; my $alias_value = $1."@".$domain; $alias_value =~ s/\+/\-/g; print STDERR "Trying deleting alias $alias_value from domain $domain\n"; $sql = "DELETE FROM alias WHERE address = '".$alias_value."' and domain = '".$domain."'"; print STDERR "SQL SYNTAX : $sql\n"; if ($onlytest eq 'false'){ $dbh->do($sql) or die "$DBI::errstr"; else {print STDERR "-- ONLY TESTING --\n"; &finalize_mysql; else { print STDERR "Action $operation not implemented yet\n"; exit(2); exit 0; ## Check if an alias is already defined sub already_defined { print STDERR "Check if an alias is already defined\n"; my @aliases = @_; ## Vinc : added a count for alias defined my $countrobot = '0'; &initialize_mysql; foreach my $alias (@aliases) { if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping Check\n"; $alias =~ /^([^:]+):/; my $alias_value = $1."@".$domain; $alias_value =~ s/\+/\-/g; print STDERR "Trying checking for alias $alias_value in domain $domain\n"; $sql = "SELECT COUNT(address) as address FROM alias where address = '".$alias_value."' and domain = '".$domain."'"; print STDERR "SQL SYNTAX : $sql\n"; $dbh->do($sql) or die "$DBI::errstr"; @enr = $dbh->selectrow_array($sql); if (@enr[0]!= 0) { print STDERR "Alias already defined : $alias_value - Trying next\n"; ## Vinc : i prefer checking all aliases instead of aborting operation # &finalize_mysql; # return 1; $countrobot +=1; print STDERR "After checking, $countrobot aliases where found in $domain\n"; &finalize_mysql; if ($countrobot){ return 1; else {return 0; ## Connect to MySQL Database sub initialize_mysql { print STDERR "Trying initialize mysql"; unless ($dbh = DBI->connect("DBI:mysql:dbname=$mysql_base;host=$mysql_host", $mysql_user, $mysql_pass)) { Réalisé par Vincent le 8 juin 2007 Page 9 / 18

print "Can't connect to Database :", $DBI::errstr; return 0 print STDERR " - Done\n"; return 1; ## Close the MySQL Connection sub finalize_mysql { print STDERR "Trying disconnecting mysql "; $dbh->disconnect; print STDERR "- Done\n"; En gros il va chercher une liste d'alias à créer (fichier /usr/share/sympa/list_aliases.tt2), va tester si les alias sont déjà définis pour ce domaine, et si ce n'est pas le cas, les insérer automatiquement. J'ai rajouté pas mal de commentaires sous la forme 'print STDERR' qui a pour effet d'afficher un débug quasi complet dans les logs apache : /var/log/apache2/error.log Création des alias de liste config optionnelle Par défault, si l'on créé une liste via l'interface web du domaine listes.domain.tld, seuls les alias de ce domaine seront créés. (maliste@listes.domain.tld, maliste-unsubscribe@listes.domain.tld, etc.) Pour créer les alias maliste@domain.tld, maliste-unsubscribe@domain.tld, etc. il fallait le faire à la main ce script le fera pour vous à condition de modifier quelques fichiers Les scripts modifiés ci-dessous permettent la création et suppression des alias de chaque liste pour le sous-domaine principal d'un robot (listes.domain.tld) mais aussi pour le domaine principal (domain.tld) Dans cette configuration on doit modifier le fichier alias_manager.pl mais aussi quelques autres fichiers de configuration de sympa. On s'écarte un peu des modifications mineures car on va modifier le fonctionnement du logiciel. Gardez bien cela à l'esprit! Dans un premier temps, il faut modifier ou remplacer le fichier /usr/lib/sympa/bin/alias_manager.pl La syntaxe de ce nouveau script est la suivante : /usr/lib/sympa/bin/alias_manager.pl <add del> <listname> <robot> <minidomain> Donc pour la création des alias 'add' pour la liste 'maliste' sur le robot 'listes.domain.tld' du domaine principal 'domain.tld' : /usr/lib/sympa/bin/alias_manager.pl add maliste listes.domain.tld domain.tld Si vous voulez les supprimer, remplacer 'add' par 'del'. Important : par défault wwsympa lance ce script à la création de liste et à la suppression. Il n'est donc pas utile de le lancer à la main Voici ce script. Notez que j'ai rajouté par mal de fonctions 'print STDERR' afin de voir ce qui se passe dans les logs apache (/var/log/apache2/error.log) Pensez à renseigner les paramètres de votre base de données utilisée pour la gestion des alias avec postfix! #!/usr/bin/perl ## This version of alias_manager.pl has been customized by Bea. ## Modified by Vinc for postfix support with virtual aliases stored in mysql database. Réalisé par Vincent le 8 juin 2007 Page 10 / 18

## It has the ability to add/remove list aliases in a MySQL database for postfix ## To make sympa use this script, you should install it as /home/sympa/bin/alias_manager.pl ## You should edit all the $mysql_xxx below to use your own mysql database ## Also, make sure the file /usr/share/sympa/list_aliases.tt2 has been modified $ENV{'PATH' = ''; ## Load Sympa.conf print STDERR "Load Sympa.conf\n"; use strict; use lib '/usr/lib/sympa/bin'; use Conf; use POSIX; require "tools.pl"; require "tt2.pl"; use DBI; ## For debugging purpose, set this to true, mysql insert nor delete will be performed ## it will only show the sql syntax my $onlytest = 'false'; #my $onlytest = 'true'; unless (Conf::load('/etc/sympa/sympa.conf')) { print STDERR gettext("the configuration file /etc/sympa/sympa.conf contains errors.\n"); exit(1); ## MYSQL configuration my $mysql_host = "localhost"; my $mysql_base = "db_name"; my $mysql_user = "db_user"; my $mysql_pass = "db_pass"; my $default_domain; my $return_path_suffix; my ($operation, $listname, $domain, $minidomain) = @ARGV; my $dbh; my $sql; my @enr; my $domaintld = &Conf::get_robot_conf($domain, 'minidomain'); unless ($onlytest eq 'false') {print STDERR "-- ONLY TESTING --\n"; print STDERR "$domaintld\n"; if (($operation!~ /^(add) (del)$/) ($#ARGV < 2)) { print STDERR "Usage: $0 <add del> <listname> <robot> <minidomain>\n"; exit(2); $default_domain = $Conf{'domain'; $return_path_suffix = &Conf::get_robot_conf($domain, 'return_path_suffix'); #$return_path_suffix = $Conf{'return_path_suffix'; my %data; $data{'date' = &POSIX::strftime("%d %b %Y", localtime(time)); $data{'list'{'domain' = $data{'robot' = $domain; $data{'list'{'name' = $listname; $data{'default_domain' = $default_domain; $data{'is_default_domain' = 1 if ($domain eq $default_domain); #$data{'is_default_domain' = 1; $data{'return_path_suffix' = $return_path_suffix; my @aliases ; my $tt2_include_path = &tools::make_tt2_include_path($domain,'',,); my $aliases_dump; &tt2::parse_tt2 (\%data, 'list_aliases.tt2',\$aliases_dump, $tt2_include_path); @aliases = split /\n/, $aliases_dump; unless (@aliases) { Réalisé par Vincent le 8 juin 2007 Page 11 / 18

print STDERR "No aliases defined\n"; exit(15); if ($operation eq 'add') { ## Check existing aliases print STDERR "Check existing aliases\n"; if (&already_defined(@aliases)) { print STDERR "Some alias already exist - Stopping script\n"; exit(13); if (!&initialize_mysql) { print STDERR "Can't connect to MySQL database\n"; exit(14); ## Adding default aliases for $domain (ie mylist@lists.domain.tld, mylistsubscribe@lists.domain.tld...) print STDERR "Creating alias for robot : $domain\n"; foreach my $alias (@aliases) { print STDERR "For each alias in robot $domain add\n"; if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping\n"; $alias =~ /^([^:]+):\s*(\".*\")$/; my $alias_value = $1."@".$domain; my $command_value = $1."@".$domain; $command_value =~ s/\"//g; print STDERR "Trying inserting alias $alias_value in domain $domain\n with command line $command_value\n"; # We create the new mysql alias. $sql = "INSERT INTO alias SET address = '".$alias_value."', domain = '".$domain."', goto = '".$command_value."', active = '1'"; print STDERR "SQL SYNTAX : $sql\n"; # We finally add the entry if ($onlytest eq 'false'){ $dbh->do($sql) or die "$DBI::errstr"; else {print STDERR "-- ONLY TESTING --\n"; ## Adding default aliases for $domaintld -> $domain (ie domain.tld -> lists.domain.tld) print STDERR "Creating alias for domain : $domaintld\n"; foreach my $alias (@aliases) { print STDERR "For each alias in domain $domaintld add\n"; if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping\n"; $alias =~ /^([^:]+):\s*(\".*\")$/; my $alias_value = $1."@".$minidomain; my $command_value = $1."@".$domain; $command_value =~ s/\"//g; print STDERR "Trying inserting alias $alias_value in domain $minidomain\n with command line $command_value\n"; # We create the new mysql alias. $sql = "INSERT INTO alias SET address = '".$alias_value."', domain = '".$minidomain."', goto = '".$command_value."', active = '1'"; print STDERR "SQL SYNTAX : $sql\n"; # We finally add the entry if ($onlytest eq 'false'){ $dbh->do($sql) or die "$DBI::errstr"; else {print STDERR "-- ONLY TESTING --\n"; &finalize_mysql; elsif ($operation eq 'del') { print STDERR "Operation DEL\n"; if (!&initialize_mysql) { print STDERR "Can't connect to MySQL database\n"; exit(7); foreach my $alias (@aliases) { Réalisé par Vincent le 8 juin 2007 Page 12 / 18

if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping DEL\n"; $alias =~ /^([^:]+):/; my $alias_value = $1."@".$domain; $alias_value =~ s/\+/\-/g; print STDERR "Trying deleting alias $alias_value from domain $domain\n"; $sql = "DELETE FROM alias WHERE address = '".$alias_value."' and domain = '".$domain."'"; print STDERR "SQL SYNTAX : $sql\n"; if ($onlytest eq 'false'){ $dbh->do($sql) or die "$DBI::errstr"; else {print STDERR "-- ONLY TESTING --\n"; foreach my $alias (@aliases) { if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping DEL\n"; $alias =~ /^([^:]+):/; my $alias_value = $1."@".$minidomain; $alias_value =~ s/\+/\-/g; print STDERR "Trying deleting alias $alias_value from domain $minidomain\n"; $sql = "DELETE FROM alias WHERE address = '".$alias_value."' and domain = '".$minidomain."'"; print STDERR "SQL SYNTAX : $sql\n"; if ($onlytest eq 'false'){ $dbh->do($sql) or die "$DBI::errstr"; else {print STDERR "-- ONLY TESTING --\n"; &finalize_mysql; else { print STDERR "Action $operation not implemented yet\n"; exit(2); exit 0; ## Check if an alias is already defined sub already_defined { print STDERR "Check if an alias is already defined\n"; my @aliases = @_; ## Vinc : added a count for alias defined my $countrobot = '0'; my $countdomain = '0'; &initialize_mysql; foreach my $alias (@aliases) { if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping Check\n"; $alias =~ /^([^:]+):/; my $alias_value = $1."@".$domain; $alias_value =~ s/\+/\-/g; print STDERR "Trying checking for alias $alias_value in domain $domain\n"; $sql = "SELECT COUNT(address) as address FROM alias where address = '".$alias_value."' and domain = '".$domain."'"; print STDERR "SQL SYNTAX : $sql\n"; $dbh->do($sql) or die "$DBI::errstr"; @enr = $dbh->selectrow_array($sql); if (@enr[0]!= 0) { print STDERR "Alias already defined : $alias_value - Trying next\n"; ## Vinc : i prefer checking all aliases instead of aborting operation # &finalize_mysql; # return 1; $countrobot +=1; Réalisé par Vincent le 8 juin 2007 Page 13 / 18

foreach my $alias (@aliases) { if ($alias =~ /^\#/) { print STDERR "Line contains # : $alias - Skipping Check\n"; $alias =~ /^([^:]+):/; my $alias_value = $1."@".$minidomain; $alias_value =~ s/\+/\-/g; print STDERR "Trying checking for alias $alias_value in domain $minidomain\n"; $sql = "SELECT COUNT(address) as address FROM alias where address = '".$alias_value."' and domain = '".$minidomain."'"; print STDERR "SQL SYNTAX : $sql\n"; $dbh->do($sql) or die "$DBI::errstr"; @enr = $dbh->selectrow_array($sql); if (@enr[0]!= 0) { print STDERR "Alias already defined : $alias_value\n"; ## Vinc : i prefer checking all aliases instead of aborting operation # &finalize_mysql; # return 1; $countdomain +=1; print STDERR "After checking, $countdomain aliases where found in $domaintld\n"; print STDERR "After checking, $countrobot aliases where found in $domain\n"; &finalize_mysql; if ($countrobot $countdomain){ return 1; else {return 0; ## Connect to MySQL Database sub initialize_mysql { print STDERR "Trying initialize mysql"; unless ($dbh = DBI->connect("DBI:mysql:dbname=$mysql_base;host=$mysql_host", $mysql_user, $mysql_pass)) { print "Can't connect to Database :", $DBI::errstr; return 0 print STDERR " - Done\n"; return 1; ## Close the MySQL Connection sub finalize_mysql { print STDERR "Trying disconnecting mysql "; $dbh->disconnect; print STDERR "- Done\n"; Comme je l'ai signalé précédemment, il faut toucher un peu au fonctionnement de sympa pour qu'il puisse créer les alias pour le 'domain.tld' aussi. Première modification, le fichier admin.pm qui contient la fonction install_aliases (qui va appeler notre script alias_manager.pl pour installer / créer les alias) J'ai rajouté une variable $minidomain aux arguments passés au script alias_manager.pl /usr/lib/sympa/bin/admin.pm (~ligne 600) sub install_aliases { my $list = shift; my $robot = shift; ++ my $minidomain = &Conf::get_robot_conf($robot, 'minidomain'); -- &do_log('debug', "admin::install_aliases($list->{'name',$robot)"); ++ &do_log('debug', "admin::install_aliases($list->{'name',$robot,$minidomain)"); Réalisé par Vincent le 8 juin 2007 Page 14 / 18

my $alias_installed = 0; my $alias_manager = '/usr/lib/sympa/bin/alias_manager.pl'; -- &do_log('debug2',"admin::install_aliases : $alias_manager add $list->{'name' $list ->{'admin'{'host'"); ++ &do_log('debug2',"admin::install_aliases : $alias_manager add $list->{'name' $list ->{'admin'{'host' $minidomain"); if (-x $alias_manager) { ++ system ("$alias_manager add $list->{'name' $list->{'admin'{'host' $minidomain") ; -- system ("$alias_manager add $list->{'name' $list->{'admin'{'host'") ; Ensuite, le fichier List.pm qui globalement fait la même chose mais pour la suppression des alias. /usr/lib/sympa/bin/list.pm (~ligne 13320) sub remove_aliases { my $self = shift; ++ my $minidomain = &Conf::get_robot_conf($self->{'domain', 'minidomain'); return undef unless ($self && ($list_of_lists{$self->{'domain'{$self->{'name')); my $alias_manager = '/usr/lib/sympa/bin/alias_manager.pl'; unless (-x $alias_manager) { &do_log('err','cannot run alias_manager %s', $alias_manager); return undef; ++ system ("$alias_manager del $self->{'name' $self->{'admin'{'host' $minidomain"); -- system ("$alias_manager del $self->{'name' $self->{'admin'{'host'"); my $status = $? / 256; unless ($status == 0) { do_log('err','failed to remove aliases ; status %d : %s', $status, $!); return undef; &do_log('info','aliases for list %s removed successfully', $self->{'name'); return 1; Enfin, comme j'ai créé une variable, il faut la définir en 'keyword' dans le fichier Conf.pm. Il faut juste rajouter une ligne en conservant la syntaxe. /usr/lib/sympa/bin/conf.pm (ligne 445+) sub load_robots { my %robot_conf ; my %valid_robot_key_words = ( 'http_host' => 1, ++ minidomain => 1, listmaster => 1, email => 1, host => 1, Avec tout ca, on peut maintenant créer une liste et envoyer les messages à maliste@domain.tld sans aucun problème VII. Lancement des services / Validation de la configuration Si vous ne l'avez pas fait : sudo /etc/init.d/postfix reload On relance sympa pour qu'il prenne en compte tous les nouveaux paramètres sudo /etc/init.d/sympa restart Réalisé par Vincent le 8 juin 2007 Page 15 / 18

On relance apache qui va démarrer le script fastcgi (wwsympa.fcgi) sudo /etc/init.d/apache2 restart On vérifie dans les logs apache que tout se passe bien, en particulier le lancement du script wwsympa.fcgi Vous pouvez maintenant vous connecter à : http://listes.domain.tld/wws et vérifier que le nom affiché en haut de la page correspond à celui définit dans votre fichier robot.conf. A ce stade, vous n'avez pas encore accès à l'interface complète (il faut vous enregister avec un mot de passe). Cliquez donc sur 'Premier login?', renseignez votre adresse définie comme 'listmaster' dans le fichier de config (soit sympa.conf soit robot.conf). Validez et normalement, sympa va vous envoyer votre mot de passe par mail. Vous pourrez le modifier via l'interface par la suite. VIII. Création d'une liste Une fois cette étape validée, vous pouvez créer votre première liste. Interface web > Création de liste (onglet en haut à gauche) Renseignez bien tous les champs : Le nom de la liste : maliste Le type de liste : <à vous de voir> L'objet Une description Tous ces champs sont obligatoires lors de la création, mais vous pourrez par la suite les modifier. Vérifier que les alias ont été créés (sur listes.domain.tld et éventuellement domain.tld) Vous pouvez abonner un utilisateur à la liste directement depuis l'interface ou sinon envoyez un message à maliste-subscribe@listes.domain.tld (ou maliste-subscribe@domain.tld) Validez cette inscription et postez votre premier message! mailto:maliste@listes.domain.tld (ou mailto:maliste@domain.tld) Vous devriez recevoir sous peu votre premier message! Notez qu'il rajoute dans le sujet : [maliste] que l'on peut modifier via l'interface. Allez faire un tour sur le code source du message : Reply-To: maliste@listes.domain.tld X-Loop: maliste@listes.domain.tld X-Sequence: 1 Errors-to: maliste-owner@listes.domain.tld Precedence: list X-no-archive: yes List-Id: <maliste.listes.domain.tld> List-Archive: <http://listes.domain.tld/wws/arc/maliste> Réalisé par Vincent le 8 juin 2007 Page 16 / 18

List-Help: <mailto:sympa@listes.domain.tld?subject=help> List-Owner: <mailto:maliste-request@listes.domain.tld> List-Post: <mailto:maliste@listes.domain.tld> List-Subscribe: <mailto:sympa@listes.domain.tld?subject=subscribe%20maliste> List-Unsubscribe: <mailto:sympa@listes.domain.tld?subject=unsubscribe%20maliste> Si vous avez suivi la configuration optionnelle, pour que le robot affiche maliste@domain.tld, vous devez quand même paramétrer votre liste via l'interface web et redéfinir l'hôte par défaut. Sinon, à chaque envoi d'un message, vous aurez comme adresses *@listes.domain.tld. Je n'ai pas cherché à le définir automatiquement pour l'instant. Rendez-vous sur l'interface web dans la partie 'Admin' de la liste créée puis : 'Admin > Configurer la liste > Définition de la liste' >>> ou plus rapidement : http://listes.domain.tld/wws/edit_list_request/test/description Modifier le champ intitulé 'Domaine internet (host)' -- listes.domain.tld ++ domain.tld Voilà qui est terminé! Le source d'un nouveau message doit maintenant avoir cet aspect : Reply-To: maliste@domain.tld X-Loop: maliste@domain.tld X-Sequence: 1 Errors-to: maliste-owner@domain.tld Precedence: list X-no-archive: yes List-Id: <maliste.domain.tld> List-Archive: <http://listes.domain.tld/wws/arc/maliste> List-Help: <mailto:sympa@listes.domain.tld?subject=help> List-Owner: <mailto:maliste-request@domain.tld> List-Post: <mailto:maliste@domain.tld> List-Subscribe: <mailto:sympa@listes.domain.tld?subject=subscribe%20maliste> List-Unsubscribe: <mailto:sympa@listes.domain.tld?subject=unsubscribe%20maliste> Je sais ce n'est pas encore parfait... Mais c'est déjà pas mal alors pour toute question ou remarque afin d'améliorer ce document, vous pouvez me contacter par mail à : tutosympa_at_vgsi_dot_fr IX. Encore des problèmes? Si vous avez encore des problèmes, regardez vos logs : Sympa : Postfix : Apache : /var/log/sympa.log /var/log/mail.log /var/log/apache2/error.log Si vous obtenez des erreurs sur des accès à queue ou bouncequeue, activez le bit suid : Je ne suis pas sûr que ce soit 100% nécessaire, mais j'ai eu des erreurs au début On change le propriétaire du fichier et on active le bit suid sudo chown sympa:sympa /usr/lib/sympa/bin/queue sudo chown sympa:sympa /usr/lib/sympa/bin/bouncequeue sudo chmod 4755 /usr/lib/sympa/bin/queue Réalisé par Vincent le 8 juin 2007 Page 17 / 18

sudo chmod 4755 /usr/lib/sympa/bin/bouncequeue Réalisé par Vincent le 8 juin 2007 Page 18 / 18