ENVIRONNEMENT

L'install a été réalisée sur une machine physique (pour une fois) dont voici les caractéristiques:


lindows:~# uname -a
Linux lindows 2.6.27.19-vs2.3.0.36.4 #1 Sat Mar 7 11:42:06 CET 2009 i686 GNU/Linux

lindows:~# cat /etc/issue.net
Debian GNU/Linux 5.0

lindows:~# cat /etc/apt/sources.list
deb http://192.168.0.42:9999/debian/ lenny main contrib non-free
deb-src http://192.168.0.42:9999/debian/ lenny main contrib non-free
deb http://192.168.0.42:9999/security lenny/updates main
deb http://192.168.0.42:9999/dotdeb lenny all
deb http://192.168.0.42:9999/backports lenny-backports main
deb http://192.168.0.42:9999/volatile lenny/volatile main contrib non-free

lindows:~# free
             total       used       free     shared    buffers     cached
Mem:       1036092     320196     715896          0       7360     126268
-/+ buffers/cache:     186568     849524
Swap:      1576472          0    1576472

lindows:~# hostname --fqdn
lindows.net.hom

lindows:~# ifconfig|grep 192.168
          inet adr:192.168.0.8  Bcast:192.168.0.255  Masque:255.255.255.0



Cette machine assure le service dns pour le domaine fictif net.hom

lindows:~# cat /etc/resolv.conf
nameserver 192.168.0.8
nameserver 192.168.0.23
nameserver 192.168.0.22

Le fichier de zone de net.hom est le suivant:

lindows:~# cat /var/cache/bind/net.hom
$TTL 1H
@    IN    SOA    lindows.net.hom. root.net.hom. (
            2009060502
            8H
            2H
            1W
            1D )
@    IN    NS    ns.net.hom.
@    IN    NS    srvweb.net.caen.
@    IN    MX    10    mx.net.hom.

                    IN    A    192.168.0.8
mx               IN    A    192.168.0.8
www            IN    CNAME   net.hom. 
lindows        IN    CNAME    net.hom.
ftp               IN    CNAME    net.hom.
pop              IN    A       192.168.0.8
ns                IN    A    192.168.0.8
lists              IN    A    192.168.0.8
lists              IN    MX    10 mx.net.hom.
sql                IN    CNAME    net.hom.
webmail        IN    CNAME    net.hom.
news             IN    CNAME    net.hom.
mailman        IN    CNAME    net.hom.
gmail             IN    CNAME    net.hom.
sslmail           IN    CNAME    net.hom.
ssl               IN    CNAME    net.hom.
vweb1        IN      A       192.168.0.210
vweb2        IN      A       192.168.0.211
vweb3        IN      A       192.168.0.212


Les différents services tournant sur cette machine:

lindows:~# netstat -tpan
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 192.168.0.8:3306        0.0.0.0:*               LISTEN      2288/mysqld    
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      2792/tcpserver 
tcp        0      0 127.0.0.1:783           0.0.0.0:*               LISTEN      2365/spamd.pid 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1617/portmap   
tcp        0      0 192.168.0.8:21          0.0.0.0:*               LISTEN      2763/pure-ftpd (SER
tcp        0      0 192.168.0.8:53          0.0.0.0:*               LISTEN      2123/named     
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2123/named     
tcp        0      0 192.168.0.8:22          0.0.0.0:*               LISTEN      2138/sshd      
tcp        0      0 192.168.0.8:25          0.0.0.0:*               LISTEN      2773/tcpserver 
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      2123/named     
tcp        0      0 192.168.0.8:22          192.168.0.22:58486      ESTABLISHED 2927/0         
tcp6       0      0 :::143                  :::*                    LISTEN      2818/imapproxyd
tcp6       0      0 :::8143                 :::*                    LISTEN      2705/couriertcpd

lindows:~# dpkg -l qmail vpopmail-bin
+++-==============================================================
ii  qmail                           1.03-38.dotdeb.2                Secure, reliable, efficient, simple mail transport system
ii  vpopmail-bin                    5.4.25-0.dotdeb.2               vpopmail binaries


Installation

C'est parti:


lindows:/# apt-get install mailman

Message lors de l'install:

Pas de liste du site
 Mailman a besoin d'une liste du site (« site list »). Elle permet d'envoyer les rappels pour les mots de passe, etc. Elle doit être créée avant le lancement de Mailman 
 Pour créer cette liste, exécuter « newlist mailman » et suivez les instructions qui apparaissent à l'écran. Il est ensuite nécessaire de redémarrer mailman avec la commande « /etc/init.d/mailman start ».

Je vais configurer un vhost pour apache destiné à la gestion de mailman:

lindows:/# cat /usr/local/apache2/conf/mailmanreal-vh




Il est conseillé d'avoir un nom de domaine (voire un sous-domaine) spécifiquement dédié à cette mailing-list. Je vais donc le créer:

lindows:/# vadddomain lists.net.hom
Please enter password for postmaster: xxxxxxxxxx
enter password again: xxxxxxxxxx


Et je crée ensuite la première liste que je vais appeler : mailman.

lindows:/# newlist mailman
Entrez l'adresse courriel du gestionnaire de la liste : postmaster@net.hom
Mot de passe initial de la liste mailman : xxxxxxx
Pour achever la creation de votre liste de diffusion, vous devez
modifier votre fichier /etc/aliases (ou equivalent) en y ajoutant les
lignes suivantes et peut etre executer le programme `newaliases':

liste de diffusion ## mailman
mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Tapez sur Entrée pour aviser le propriètaire de mailman...

Dans la mesure où j'utilise qmail, le fichier /etc/aliases n'est pas utilisé.

La preuve :)
lindows:/# newaliases

  Note, this "newaliases" command does not make use of the contents of:
    /etc/aliases
  because it is in fact just a wrapper for qmail-newu, which uses:
    /etc/qmail/users/assign
  for a similar purpose.

  See the man page for qmail-newu(8) for more details


lindows:/# /etc/init.d/mailman start

lindows:/# ps aux | grep mailman
list      4891  0.0  0.6  11788  6312 ?        Ss   12:02   0:00 /usr/bin/python /usr/lib/mailman/bin/mailmanctl -s -q start
list      4897  0.1  0.7  11368  8004 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=ArchRunner:0:1 -s
list      4898  0.1  0.7  11360  8008 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=BounceRunner:0:1 -s
list      4899  0.1  0.7  11352  8004 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=CommandRunner:0:1 -s
list      4900  0.1  0.7  11364  8008 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=IncomingRunner:0:1 -s
list      4901  0.1  0.7  11380  8044 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=NewsRunner:0:1 -s
list      4902  0.1  0.8  11532  8448 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=OutgoingRunner:0:1 -s
list      4903  0.1  0.7  11496  8232 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=VirginRunner:0:1 -s
list      4904  0.0  0.7  11368  8192 ?        S    12:02   0:00 /usr/bin/python /var/lib/mailman/bin/qrunner --runner=RetryRunner:0:1 -s

lindows:/# /etc/init.d/mailman stop

Jusque là apparemment tout se passerait bien dans le meilleur des mondes mais pour en avoir fait les frais cela ne fonctionne pas.

A chaque message que l'on tente de poster sur la liste on se prend dans les logs des messages tels:

Jun  6 17:48:20 lindows qmail: 1244303300.758485 delivery 20: deferral: Group_mismatch_error.__Mailman_expected_the_mail/wrapper_script_to_be_executed_
as_group_"daemon",_but/the_system's_mail_server_executed_the_mail_script_as/group_"vchkpw".__Try_tweaking_the_mail_server_to_run_the/script_as_group_"d
aemon",_or_re-run_configure,_/providing_the_command_line_option_`--with-mail-gid=vchkpw'./

De fait un strings effectué sur /usr/lib/mailman/mail/mailman laisse entrevoir que le gid est bien mail. Or à priori ça coince avec qmail/vpopmail.
Pas de panique, on va s'occuper de son cas:

lindows:/usr/local# apt-get source mailman

lindows:/usr/local# ls -ld mailm*
drwxr-xr-x 17 root root     4096 jun  6 18:10 mailman-2.1.11
-rw-r--r--  1 root staff  145613 jun  6 18:09 mailman_2.1.11-11.diff.gz
-rw-r--r--  1 root staff    1091 jun  6 18:09 mailman_2.1.11-11.dsc
-rw-r--r--  1 root staff    1324 jun  6 18:11 mailman_2.1.11-11_i386.changes
-rw-r--r--  1 root staff 7992229 jui  8  2008 mailman_2.1.11.orig.tar.gz

lindows:/usr/local/mailman-2.1.11/debian# vi rules     ===> et modifier comme suit (à adapter à votre config bien sûr)

Makefile:
        if [ -x /usr/bin/autoconf2.50 ]; then \
          autoconf2.50; \
        else \
          autoconf; \
        fi
        ./configure --prefix=/var/lib/$(package) --with-username=list \
                --with-groupname=list \
                --with-mail-gid=vchkpw --with-cgi-gid=nogroup \
                --without-permcheck --with-mailhost=192.168.0.8 \
                --with-urlhost=localhost

Pour vous éviter quelques déboires installer au moins les 2 paquets suivants (il faudra surement en avoir d'autres mais ayant déjà effectué pas mal de compil sur cette machine, presque tout le nécessaire était installé).

lindows:/usr/local/mailman-2.1.11# apt-get install python-dev quilt

lindows:/usr/local/mailman-2.1.11# dpkg-buildpackage -rfakeroot 

(merci à scorpio pour le rebuild du paquet, je n'ai pas trop l'habitude de repartir des sources debian mais dans ce cas précis je n'avais pas envie de me repalucher tous les chemins dans le ./configure)

Et on se retrouve avec un joli paquet perso:

lindows:/usr/local# ls -l mailm*deb
-rw-r--r-- 1 root staff 9514942 jun  6 18:11 mailman_2.1.11-11_i386.deb

Que j'installe par dessus le précédent:

lindows:/usr/local# dpkg -i --force-all mailman_2.1.11-11_i386.deb

Là il est nécessaire de se poser la question des mises à jour: ne souhaitant pas voir mon tit paquet perso de mailman écrasé lors d'une maj justement, je passe:

lindows:/usr/local# echo "mailman hold" | dpkg --set-selections

sachant qu'en cas d'alerte de sécu, il faudra rebuilder le paquet mais franchement pour le temps que cela a pris...

Ensuite il faut paramétrer un peu (je n'affiche que les lignes à modifier)

Côté mailman ça se passe dans /etc/mailman:

lindows:/etc/mailman# cat mm_cfg.py |egrep -v '^#|^$' | sed -n -e '/^\"\"\"/,/\"\"\"$/!p'
from Defaults import *
MAILMAN_SITE_LIST = 'mailman'
DEFAULT_URL_PATTERN = 'http://%s/cgi-bin/mailman/'
PRIVATE_ARCHIVE_URL = '/cgi-bin/mailman/private'
IMAGE_LOGOS         = '/images/mailman/'
DEFAULT_EMAIL_HOST = 'lists.net.hom'
DEFAULT_URL_HOST   = 'lists.net.hom'
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
DEFAULT_SERVER_LANGUAGE = 'fr'
USE_ENVELOPE_SENDER    = 0              # Still used?
DEFAULT_SEND_REMINDERS = 0
DELIVERY_MODULE = 'SMTPDirect'
MTA = 'Manual'
SMTPHOST = '192.168.0.8'
SMTPPORT = 25              # default from smtplib
SENDMAIL_CMD = '/usr/lib/sendmail'


lindows:/etc/mailman# head qmail-to-mailman.py
#! /usr/bin/python

# Configuration variables - Change these for your site if necessary.
MailmanHome = "/var/lib/mailman"; # Mailman home directory.
MailmanVar = "/var/lib/mailman"; # Mailman directory for mutable data.
#MailmanOwner = "mailman@lists.net.hom"; # Postmaster and abuse mail recepient.
MailmanOwner = "postmaster@net.hom"; # Postmaster and abuse mail recepient.
MailmanUser = "lists.net.hom";
# End of configuration variables.


Côté vpopmail cela se passe dans le répertoire créé lors de l'ajout du domaine lists.net.hom

lindows:/var/lib/vpopmail/domains/lists.net.hom# ll
total 18
drwx------ 3 vpopmail vchkpw 1024 jun  6 18:57 .
drwx------ 4 vpopmail vchkpw 1024 jun  5 16:30 ..
-rw------- 1 vpopmail vchkpw   34 jun  6 18:57 .dir-control
drwx------ 3 vpopmail vchkpw 1024 jun  5 16:30 postmaster
-rw------- 1 vpopmail vchkpw   53 jun  6 16:39 .qmail-admin
-rw------- 1 vpopmail vchkpw   55 jun  6 16:39 .qmail-bounces
-rw------- 1 vpopmail vchkpw   55 jun  6 16:39 .qmail-confirm
-rw------- 1 vpopmail vchkpw   66 jun  6 13:41 .qmail-default
-rw------- 1 vpopmail vchkpw   52 jun  6 16:39 .qmail-join
-rw------- 1 vpopmail vchkpw   53 jun  6 16:39 .qmail-leave
-rw------- 1 vpopmail vchkpw   53 jun  6 16:39 .qmail-owner
-rw------- 1 vpopmail vchkpw   55 jun  6 16:39 .qmail-request
-rw------- 1 vpopmail vchkpw   57 jun  6 16:39 .qmail-subscribe
-rw------- 1 vpopmail vchkpw   59 jun  6 16:39 .qmail-unsubscribe
-rw------- 1 vpopmail vchkpw  107 jun  6 18:57 vpasswd
-rw------- 1 vpopmail vchkpw 2177 jun  6 18:57 vpasswd.cdb

lindows:/var/lib/vpopmail/domains/lists.net.hom# cat .qmail-*
|preline /usr/lib/mailman/mail/mailman admin mailman
|preline /usr/lib/mailman/mail/mailman bounces mailman
|preline /usr/lib/mailman/mail/mailman confirm mailman
|preline /usr/bin/python /usr/lib/mailman/bin/qmail-to-mailman.py  <== contenu de .qmail-default
|preline /usr/lib/mailman/mail/mailman join mailman
|preline /usr/lib/mailman/mail/mailman leave mailman
|preline /usr/lib/mailman/mail/mailman owner mailman
|preline /usr/lib/mailman/mail/mailman request mailman
|preline /usr/lib/mailman/mail/mailman subscribe mailman
|preline /usr/lib/mailman/mail/mailman unsubscribe mailman

On peut générer ces fichiers avec un petit bout de script tel:

=== TOF ===========
#!/bin/bash

for i in admin owner bounces confirm join leave subscribe unsubscribe request
do
    echo "|preline /usr/lib/mailman/mail/mailman $i mailman" > .qmail-$i
done
chown vpopmail:vchkpw .qmail*
chmod 600 .qmail*
==== EOF ==============


Côté qmail c'est dans le fichier /var/qmail/control/virtualdomains:

lindows:/var/qmail/control# cat virtualdomains
net.hom:net.hom
lists.net.hom:lists.net.hom

Après avoir modifié ce fichier il faudra redémarrer qmail.


TESTS

Et voilà c'est terminé. Il ne reste plus qu'à se connecter à l'interface d'admin et gérer les abonnements à la liste mailman.

Ci-dessous les logs lors de l'ajout de deux comptes mails (toto@net.hom et patrick@net.hom)


Abonnements en nombre

lindows:/# tail -f /var/log/mail.log /var/log/mailman/*

==> /var/log/mailman/subscribe <==
Jun 06 18:55:00 2009 (22220) mailman: new patrick@net.hom, admin mass sub
Jun 06 18:55:00 2009 (22220) mailman: new toto@net.hom, admin mass sub

==> /var/log/mail.log <==
Jun  6 18:55:01 lindows qmail: 1244307301.566808 new msg 408987
Jun  6 18:55:01 lindows qmail: 1244307301.567278 info msg 408987: bytes 1907 from <mailman-bounces@lists.net.hom> qp 22222 uid 64011
Jun  6 18:55:01 lindows qmail: 1244307301.567592 starting delivery 91: msg 408987 to local net.hom-patrick@net.hom
Jun  6 18:55:01 lindows qmail: 1244307301.567864 status: local 1/10 remote 0/20
Jun  6 18:55:01 lindows qmail: 1244307301.568927 delivery 91: success: did_0+0+1/
Jun  6 18:55:01 lindows qmail: 1244307301.569256 status: local 0/10 remote 0/20
Jun  6 18:55:01 lindows qmail: 1244307301.569427 end msg 408987
Jun  6 18:55:01 lindows qmail: 1244307301.598497 new msg 408987
Jun  6 18:55:01 lindows qmail: 1244307301.598880 info msg 408987: bytes 1900 from <mailman-bounces@lists.net.hom> qp 22226 uid 64011
Jun  6 18:55:01 lindows qmail: 1244307301.599224 starting delivery 92: msg 408987 to local net.hom-toto@net.hom
Jun  6 18:55:01 lindows qmail: 1244307301.599547 status: local 1/10 remote 0/20
Jun  6 18:55:01 lindows spamd[2586]: spamd: connection from localhost.localdomain [127.0.0.1] at port 43049
Jun  6 18:55:01 lindows spamd[2586]: spamd: processing message <mailman.1.1244307300.22220.mailman@lists.net.hom> for vpopmail:1004

==> /var/log/mailman/smtp <==
Jun 06 18:55:01 2009 (21815) <mailman.0.1244307300.22220.mailman@lists.net.hom> smtp to mailman for 1 recips, completed in 0.031 seconds
Jun 06 18:55:01 2009 (21815) <mailman.1.1244307300.22220.mailman@lists.net.hom> smtp to mailman for 1 recips, completed in 0.036 seconds

==> /var/log/mail.log <==
Jun  6 18:55:05 lindows spamd[2586]: spamd: clean message (-1.0/3.0) for vpopmail:1004 in 3.4 seconds, 2041 bytes.
Jun  6 18:55:05 lindows spamd[2586]: spamd: result: . 0 - ALL_TRUSTED,AWL scantime=3.4,size=2041,user=vpopmail,uid=1004,required_score=3.0,rhost=localhost.localdomain,raddr=127.0.0.1,rport=43049,mid=<mailman.1.1244307300.22220.mailman@lists.net.hom>,autolearn=ham
Jun  6 18:55:05 lindows spamd[2364]: prefork: child states: II
Jun  6 18:55:05 lindows qmail: 1244307305.487846 delivery 92: success: did_0+0+1/
Jun  6 18:55:05 lindows qmail: 1244307305.488192 status: local 0/10 remote 0/20
Jun  6 18:55:05 lindows qmail: 1244307305.488426 end msg 408987

Les détails en images



Liens

http://www.kroon.co.za/howto.php?howto=qmail_mailman

http://forum.qmailrocks.org/showthread.php?t=894

http://nick.vargish.org/clues/qmail-vpopmail-mailman.html

http://www.gnu.org/software/mailman/site.html