
                             Mini-HOWTO qmail + MH

Christopher Richardson,(rdn@tara.n.eunet.de). Traduit par Digo D'OLIVEIRA
GRANJA (mortadel@free.fr)

   v1.4, 5 Mars 1998
     _________________________________________________________________

   _Dans ce document, je fais part de mes expriences d'installation afin
   d'aider les utilisateurs qui dsirent utiliser la configuration
   ci-dessus pour la gestion de leur courrier lectronique. v1.4: J'ai eu
   une nouvelle Linuxette, alors j'ai dcid de mettre  jour ce
   mini-HOWTO._
     _________________________________________________________________

1. Introduction

   Mes remerciements  tous les citoyens du net qui m'ont aid,
   particulirement Tony Nugent ( tony@trishul.sci.edu.au), et David
   Summers ( david@summersoft.fay.ar.us), ainsi que l'quipe de S.u.S.E
   GmBH ( http://www.suse.com) qui ont rendu l'installation de Linux
   tellement plus aise, et enfin les auteurs des excellents programmes
   cits plus haut.

   Qu'est-ce que qmail et pourquoi devrions-nous l'utiliser ? Voici le
   "baratin publicitaire" de son auteur, Dan Bernstein :

   qmail est un agent de transport du courrier (MTA, Mail Transporter
   Agent), scuris, sr, efficace et simple. Il est conu pour remplacer
   compltement le systme sendmail-binmail sur les stations UNIX
   connectes  Internet.

   _Scuris_ : La scurit n'est pas seulement un but  atteindre, c'est
   une exigence absolue. La distribution du courrier est d'une importance
   critique pour les utilisateurs : elle ne doit pas tre interrompue,
   alors elle doit tre compltement scurise. (C'est la raison pour
   laquelle j'ai commenc  crire qmail : je ne pouvais plus supporter
   les trous de scurit de sendmail et des autres MTAs)

   _Sr_ : La philosophie de qmail garantit qu'un message, une fois
   accept dans le systme, ne sera jamais perdu. De plus, qmail supporte
   maildir, un nouveau format de bote aux lettres utilisateur trs
   solide. Les maildirs,  la diffrence des fichiers mbox ou des
   dossiers MH, ne seront pas corrompus si le systme plante pendant la
   distribution. Encore mieux, non seulement un utilisateur peut lire son
   courrier en scurit sur NFS (Network File System), mais en plus un
   nombre illimit de clients NFS peuvent lui distribuer du courrier au
   mme moment.

   _Efficace_ : Sur un Pentium sous BSD/OS, qmail peut facilement
   supporter 200000 messages locaux par jour -- il s'agit de messages
   distincts injects et distribus dans les botes aux lettres dans un
   test rel -- ! Malgr le fait que les livraisons lointaines soient
   limites par la lenteur des DNS (Domain Name Services : serveurs de
   noms de domaine) et de SMTP (Simple Mail Transfer Protocol : protocole
   simple de transfert de courrier), qmail dpasse 20 envois simultans
   par dfaut, de sorte qu'il permet de grer trs rapidement des
   mailing-lists (C'est la raison pour laquelle j'ai fini qmail : je
   devais mettre en place une grosse liste de diffusion).

   _Simple_ : Qmail est beaucoup plus petit que n'importe quel autre MTA.
   Voici quelques raisons :
    1. Les autres MTAs ont des mcanismes spars de forwarding,
       aliasing, et de gestion de mailing-lists. Qmail a UN simple
       mcanisme de forwarding qui permet aux utilisateurs de grer leurs
       propres listes de diffusion.
    2. Les autres MTAs offrent toute une gamme de modes d'envoi, allant
       de rapide (et peu sr)  lent (et mis en attente). L'envoi sous
       qmail est instantanment dclench par la mise en attente de
       nouvelles entres, aussi l'on peut dire que le systme qmail n'a
       qu'un seul mode d'envoi : rapide ET avec mise en attente.
    3. Les autres MTAs incluent une version spcialise d'inetd qui
       surveille la moyenne de chargement. La conception de qmail limite
       de manire interne la charge de la machine, ainsi le dmon SMTP de
       qmail (qmail-smtpd) peut s'excuter en toute scurit avec l'inetd
       de votre systme.

   _Remplaant pour sendmail_ : qmail supporte le masquerading hte et
   utilisateur, la dissimulation complte de l'hte, les domaines
   virtuels, les null-clients, les commandes de relais, les
   enregistrements  double rebond, les programmateurs de relance de
   messages indpendants... En rsum, qmail n'est pas en reste ct
   modernit des caractristiques. Qmail inclut galement une fonction de
   "couverture", c'est--dire qu'il se fait passer pour sendmail, afin
   d'tre utilis de manire transparente par votre agent utilisateur
   courrier (MUA, Mail User Agent).

2. Ma configuration systme

     * Distribution S.u.S.E Linux 5.1 avec un noyau 2.0.33
     * Connection PPP  mon Fournisseur d'Accs Internet (FAI)

3. Installation de qmail

   Suivez exactement les instructions du fichier INSTALL.

   Remarques :

   Prenez le temps de lire compltement la documentation, s'il vous
   plat. Les numros suivants se rfrent aux tapes d'installation du
   fichier INSTALL sus-cit.

     * 2 - J'ai d organiser les groupes et les utilisateurs manuellement
       par INSTALL.ids.
     * 7 - ./qmail-makectl ne fonctionne pas sur mon systme. J'ai ajout
       mon nom de domaine (mickey.n.eunet.de) manuellement dans
       /var/qmail/control/me.
     * 23 - Assurez-vous que qmail-smtpd est correctement crit dans le
       fichier inetd.conf (Je l'avais mal crit (exemple : qmail-smpt),
       ce qui m'a pris deux jours  trouver :() ).
     _________________________________________________________________

 smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env
/var/qmail/bin/qmail-smtpd
     _________________________________________________________________

4. Maildir2smtp

   Dan Bernstein a fourni un paquetage pour l'envoi d'e-mail en attente
   vers un FAI via dial-in. Ce paquetage est disponible sur son site sous
   le nom de serialmailxxx.

   Installez ce paquetage comme dcrit dans la page de manuel (Merci 
   Rupert Mazzucco ( maz@pap.univie.ac.at), cela marche du tonnerre !
       ______________________________________________________________


       maildir2smtp - transmet un maildir par SMTP

       maildir2smtp est conu pour transfrer des messages par le biais
       d'une connection SLIP ou PPP. Pour mettre cela en place en fin de
       dconnexion, crez un nouveau maildir en alias :

          # maildirmake ~alias/pppdir chown -R alias ~alias/pppdir

       Mettez

          :alias-ppp

       dans control/virtualdomains et

          ./pppdir/

       dans ~alias/.qmail-ppp-default.  N'oubliez pas l'anti-slash dans
       pppdir/. Alors dans le script de dmarrage PPP, mettez

          maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`

       en remplaant $IP avec l'adresse IP distante.
       ______________________________________________________________

   Remarques :

     * Lisez compltement la page de manuel, s'il vous plat.
     * Maildir2smtp ncessite l'adresse IP numrique de votre serveur de
       courrier. Si vous ne l'avez pas, faites un ping sur votre adresse
       e-mail.
     * Cette commande peut tre incluse dans votre script login pour
       expdier tout le courrier en attente aprs vous tre connect 
       votre FAI.

5. Installation de MH

   En addition  cela, j'ai galement remplac le fichier
   /mh-6.8.4/mts/sendmail/smail.c par le mh-qmail-smail.c de Dan
   Bernstein.

   Voici  quoi ressemble mon fichier mh-6.8.4/conf/MH :


bin     /usr/bin/mh
etc     /usr/lib/mh
#mail
#mandir /usr/man
#manuals        standard
chown   /bin/chown
#cp     cp
#ln     ln
#remove mv -f
cc      gcc
ccoptions -traditional -O2 -m486 -D_NFILE='getdtablesize()'
          -DSIGEMT=SIGUSR1
curses  -lncurses
#ldoptions      -s
#ldoptlibs
lex     flex
#oldload        off
#ranlib on
mts     sendmail
#mf     off
#bboards        off
#bbdelivery     off
#bbhome /usr/spool/bboards
pop     on
popdir  /usr/lib/mh
sharedlib       sys5
slflags -fPIC
slibdir /usr/lib
mailgroup       mail
signal  void
sprintf int
#editor prompter
#debug  off
#regtest        off
options ATHENA
options BIND
options DPOP
options DUMB
options FCNTL
options MHE
options MHRC
options MIME
options MORE='"/usr/bin/less"'
options OVERHEAD
options POP2
options POPSERVICE='"pop3"'
options RENAME
options RPATHS
options RPOP
options SOCKETS
options SVR4
options SYS5
options SYS5DIR
options TERMINFO
options UNISTD
options VSPRINTF

   Remarques :

     * J'ai seulement compil mts sendmail ; j'ai lu quelque part dans le
       forum comp.mail.mh que SMTP peut poser des problmes.
       Dominic Mitchell(hdm@demon.net) a crit le 13 Juin 1997 :
       "Pas tout  fait. Avec cette option, MH converse toujours avec
       SMTP, mais juste au travers d'un pipe et non au travers d'un
       rseau. Vous devez _ncessairement_ avoir dans votre fichier
       /.mh_profile, une ligne qui dit :
 postproc:/usr/local/nmh/lib/spost
       ou l'endroit quel qu'il soit o il est conserv dans votre
       systme. Cela transmettra directement ce message  sendmail de
       manire traditionnelle. Vous utilisez qmail bien entendu, alors
       sendmail sera en fait le script de couverture de qmail, mais c'est
       juste ce qu'il faut." Merci Dominic.
     * J'ai vir "mail" parce que je voulais contrler avec mtstailor.

5.1 Mtstailor

   Comme qmail distribue le courrier dans le rpertoire home (~/Mailbox),
   j'ai ajout cela  mon mtstailor :


localname:      mickey
localdomain:    n.eunet.de
mmdfldir:
mmdflfil:       Mailbox
uucpldir:
uucplfil:
mmdelim1:       \001\001\001\001\n
mmdelim2:       \001\001\001\001\n
mmailid:        0
umincproc:
lockldir:
sendmail:       /usr/lib/sendmail

   Remarques :

     * sendmail : /usr/lib/sendmail est un lien vers le script de
       couverture de qmail, dans /var/qmail/bin.
     * MH n'apprcie gure le caractre tilde (~/), utilisez /home/  la
       place, ou laissez le champ vide, qui s'accorde par dfaut selon la
       documentation  $HOME.
     * J'ai rcemment install MH et qmail sur ma machine au bureau, qui
       est connecte via Ethernet. J'ai ajout la ligne suivante 
       mtstailor :
     _________________________________________________________________

 servers: serveur_de_mail.compagnie.pays
     _________________________________________________________________

5.2 Mh_profile

   Voici mon fichier .mh_profile :


Path: Mail
draft-folder: drafts
unseen-sequence: unseen
AliasFile: /home/rdn/.mh_aliases
send: -msgid
comp: -form /home/rdn/.mymh-components
MailDrop: /home/rdn/Mailbox

   Remarques :

     * J'ai ajout la ligne concernant MailDrop pour tre tout  fait
       sr.

6. Fetchmail

   J'ai dcid d'utiliser fetchmail parce que mon systme Linux est
   utilis par plusieurs personnes diffrentes (ma famille :-)) et
   fetchmail transmet le courrier sur le port SMTP, o qmail le prend en
   charge.

   L'installation se fait sans problmes, le dpt multiple (Multi-drop)
   fonctionne avec le fichier .fetchmailrc suivant :


poll PersonalMail.Germany.EU.net
protocol pop3
username myname
password mypassword
# Les deux lignes suivantes s'occupent du multidrop
localdomains mydomain.de
is * here
# T2 des tats de la FAQ de fetchmail, dont qmail a besoin
forcecr

7. Exmh

   C'est mon gestionnaire de mail prfr. Je l'adore.

   Il y a un seul problme : la plupart des paquetages TCL/TK
   pr-compils ont l'option security active. Le fichier script
   .xserverrc.secure, qui tait fourni avec la S.u.S.E rsout ce
   problme :
       ______________________________________________________________


#!/bin/sh

#
# Dplacez ce fichier vers ~/.xserverrc, si vous
# ne voulez pas que tout le monde puisse accder  votre
# serveur X
#
if [ -x /usr/bin/keygen ]; then
    if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname \
         -a ! -x /usr/bsd/hostname ];
    then
        echo "startx: can't get my hostname - exiting"
        exit 1
    else
        host=`hostname`
    fi

    xauth add $host:0 . `/usr/bin/keygen`
    sleep 2
    xauth add $host/"unix":0 . `/usr/bin/keygen`
    exec X :0 -auth .Xauthority $*
else
    exec X :0 $*
fi
       ______________________________________________________________

8. Procmail

   La FAQ de qmail donne cette commande :

   Dans /.qmail, ajouter


| preline procmail

   La version 3.11pre7 a chang la variable Boite aux Lettres dfinie par
   dfaut. Avant, cela se trouvait dans config.h; c'est maintenant dans
   src/authenticate.c :


#define MAILSPOOLHOME "/Mailbox"        /* regarde l'entte / */
                                        /* dlivre  $HOME/Mailbox */

   J'ai runi quelques trucs, extraits des forums comp.mail.mh et
   comp.mail.misc, dans un fichier .procmailrc. Merci  tous !
       ______________________________________________________________


# UN EXEMPLE DE FICHIER .PROCMAILRC POUR LES DEBUTANTS
# Ecrit par Catherine Hampton <ariel@best.com>
# Version 1.1
# Mis  jour le 25/01/98
#
# Dpos dans le Domaine Public
#
#
# FIXER LES VARIABLES

# Variables internes
# Ce qui suit a t modifi par rdn le 03/03/1998

# Tout le monde dit que la variable SHELL est essentielle
SHELL=/bin/sh               #Shell utilis pour lancer procmail.
                            #Soyez sr que cela pointe vers la
                            #version de sh de votre systme. NE
                            #LUI SUBSTITUEZ PAS un autre shell
                            #sauf si vous connaissez bien UNIX

LINEBUF=4096                #Ncessaire pour viter  Procmail de
                            #s'touffer sur des longs champs "destinataires"
                            #ou sur des instructions concernant la manire de
                            #traiter des e-mails particuliers

PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh:
                            #Path pour vos programmes -- il vaut mieux
                            #probablement le laisser ainsi.

VERBOSE=off                 #Mettez-le  "on" si vous essayez un nouveau
                            #champ "destinataire" afin que Procmail puisse
                            #enregistrer littralement chaque tape.
                            #NE LE LAISSEZ PAS INDEFINIMENT, sinon cela
                            #cre d'normes fichiers-journaux (logfiles)

# Programme par dfaut & situation des fichiers

MAILDIR=$HOME/Mail          #Vous devriez vous assurer de l'existence de
                            #cela.

DEFAULT=$HOME/Mailbox       #Boite de rception par dfaut pour les
                            #utilisateurs de shell2-5 sur Internet
                            #Remplacez-la par la valeur correcte de
                            #votre systme.


LOGFILE=$MAILDIR/procmail.log #L'emplacement des fichiers log. Recommand,
                              #autrement les erreurs vous seront envoyes
                              #par e-mail :/

FORMAIL=/usr/bin/formail        #Pratique pour les champs de rponse auto-
                                #matique (autoreply recipes). Si vous n'tes
                                #pas sur Internet, modifiez cela avec le
                                #chemin de votre version de formail.

SENDMAIL=/usr/sbin/sendmail     #Pratique pour les champs de rponse auto-
                                #matique (autoreply recipes). Si vous n'tes
                                #pas sur Internet, modifiez cela avec le
                                #chemin de votre version de sendmail.
       ______________________________________________________________

   Procmail est un logiciel excellemment bien document. Lisez les pages
   de manuel afin de trouver des exemples pour crer votre fichier
   .procmailrc.

9. ISDN

   J'inclus cela alors que cela n'a rien  voir avec qmail ou MH. Mais
   sans une connexion PPP vers un FAI, il n'y a pas de courrier
   lectronique du tout. J'ai eu quelques problmes pour faire
   fonctionner ma connexion ISDN. La distribution S.u.S.E propose une
   configuration pour ISDN, mais je voulais quelque chose de plus simple.
   Ce qui est prsent ici a t adapt des scripts de Bernhard Hailer
   (Merci, vraiment, merci !)

   Le fichier rc.config suivant charge les modules ncessaires pendant
   l'initialisation :
       ______________________________________________________________

#!/bin/bash
# Ceci est adapt du vieux script de Bernhard Hailer

LOCAL_NUMBER="91311234"        # numro de tlphone local. 091311234
REMOTE_NUMBER="0911123456"     # numro de tlphone du FAI
LOCAL_IP="192.168.0.99"        # J'ai une adresse IP dynamique alors ce
REMOTE_IP="195.112.123.11"     # sera la passerelle de votre FAI
DEVICE="ippp0"

SYSPATH="/sbin"
ISDNCTRL="$SYSPATH/isdnctrl"

case "$1" in
start)
        # turn on isdn
        insmod /lib/modules/2.0.33/net/slhc.o
        insmod /lib/modules/2.0.33/misc/isdn.o
        sleep 1
        # load the hisax module
        insmod /lib/modules/2.0.33/misc/hisax.o
                                   id=Tel0 type=5 protocol=2 irq=10 io=0x300
        echo "starting isdn4linux"
        # global
        $ISDNCTRL verbose 0

        $ISDNCTRL addif $DEVICE         # cre une nouvelle interface
        $ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER
        $ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER
        $ISDNCTRL eaz $DEVICE $LOCAL_NUMBER
        $ISDNCTRL l2_prot $DEVICE hdlc
        $ISDNCTRL l3_prot $DEVICE trans
        $ISDNCTRL encap $DEVICE syncppp
        $ISDNCTRL huptimeout $DEVICE 300
        $ISDNCTRL chargehup  $DEVICE off
        $ISDNCTRL secure $DEVICE on

        $SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1
        $SYSPATH/route add default $DEVICE
        $SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd &
        $SYSPATH/route del default

        ;;
stop)
        #turn off isdn
        rmmod hisax.o
        sleep 1
        rmmod isdn.o
        rmmod slhc.o
        echo "Shutting down isdn4linux"
        $ISDNCTRL delif ippp0
        ;;
*)
        echo "Usage: $0 (start|stop)"
        exit 1
        ;;
esac
       ______________________________________________________________

   J'utilise le script suivant pour appeler l'extrieur, il est nomm
   tout simplement isdn on|off.
       ______________________________________________________________


#!/bin/bash
# Ceci est adapt du vieux script de Bernhard Hailer

IP_ADDRESS="195.112.123.11"

case "$1" in
on)


        echo "Calling ippp0"
        /sbin/isdnctrl dial ippp0
# la pause est importante car cela donne  PPP le temps de s'installer
        echo "Sleep for 8s for PPP handshake"
        sleep 8s
        /sbin/route add default ippp0
        echo "line open - checking...."

# vrifie si la ngociation PPP est russie :
        set `ping -qc3 -i1 $IP_ADDRESS 2>/dev/null | grep transmitted`
        if [ $4 -gt 0 ];
        then
                echo "succeeded."
                echo "Starting fetchmail daemon"
                /usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail
                echo "Flushing mail queue...."
                /usr/local/bin/serialmail/maildir2smtp
                            ~alias/pppdir alias-ppp- mail.server.ip.no `hostnam
e`
        else
                echo "failed!"
                /sbin/isdnctrl hangup ippp0
        fi

;;

off)
                echo -n "Shutting down fetchmail daemon"
                /usr/bin/fetchmail --quit

                /sbin/isdnctrl hangup ippp0
                /sbin/route del default         # and delete route
                echo "You're off line"
;;

*)
        echo -e "\aUsage:"
        echo "isdn on"
        echo "isdn off"
;;

esac
       ______________________________________________________________

   La portion suivante est le fichier d'options du dmon ipppd,
   /etc/ppp/options.ipppd :

# Bas sur :
# Klaus Franken, kfr@suse.de
# Version: 27.08.97 (5.1)
#
# Ce fichier est une copie par YaST du fichier /etc/ppp/ioptions.YaST
# vers le fichier options.<device>

user "myuserid"

# le nom de mon systme (only for CHAP !)
# name my_system_name

# accepte les adresses IP transmises par son homologue
# utilis avec les adresses IP dynamiques
ipcp-accept-local
ipcp-accept-remote
noipdefault

# essaie d'obtenir l'adresse IP de l'interface
# option spcifique  ipppd (contrairement  pppd)
# utilis seulement avec des adresses IP statiques
#useifip

# dsactive toutes les compressions d'en-ttes
-vj
-vjccomp
-ac
-pc
-bsdcomp

# parfois, vous pouvez en avoir besoin
#noccp

# unit de rception maximale (mru, max receive unit)
mru 1524
# unit de transmission maximale (mtu, max transmit unit)
mtu 1500

# Si la machine est un serveur, forcez l'authentification en dcommentant
# l'une des lignes suivantes. Toutefois, si la machine est un client, faire
# cela empche la russite de la connexion (message "peer refused to authentica
te").
# Alors dcommentez SEULEMENT sur un serveur.
# "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
#+pap
#+chap

# Si vous avez des problmes avec la liaison (pas de rponse du premier
# paquet-lcp), essayez de diminuer le dlai de r-essai (retry-cycle).
# Fix par dfaut  3 secondes, essayez par exemple 2 secondes
# lcp-restart 2

10. Sources

   Paquetages requis :

   Le net est toujours en perptuel mouvement, aussi est-il un peu
   utopique de donner des sources fiables  100%. Nanmoins, cela ne
   mange pas de pain...

     * Trouvez Qmail et setserial sur http://www.qmail.org/
     * Trouvez MH sur http://www.ics.uci.edu/~mh/
     * Trouvez glimpse sur http://glimpse.cs.arizona.edu/
     * Trouvez Fetchmail sur http://sagan.earthspace.net/~esr/fetchmail
     * Trouvez Exmh sur http://www.beedub.com/exmh
     * Trouvez Procmail sur
       ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail

11. Avertissements

   L'habituel sermon : _"Pas de garanties, pas de remboursements ;
   utilisez  vos propres risques." _

12. Post-Scriptum

   Est-ce que quelq'un a fait fonctionner MH avec Maildi r? Je n'ai pas
   essay -- le principe de ne pas bloquer un systme qui tourne bien. Si
   oui, crivez-moi vos informations pour une inclusion dans la prochaine
   version de ce document.
