Mes remerciements à tous les citoyens du net qui m'ont aidé, particulièrement 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 aisée, et enfin les auteurs des excellents programmes cités 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), sécurisé, sûr, efficace et simple. Il est conçu pour remplacer complètement le système sendmail-binmail sur les stations UNIX connectées à Internet.
Sécurisé : La sécurité 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 complètement sécurisée. (C'est la raison pour laquelle j'ai commencé à écrire qmail : je ne pouvais plus supporter les trous de sécurité de sendmail et des autres MTAs)
Sûr : La philosophie de qmail garantit qu'un message, une fois accepté dans le système, ne sera jamais perdu. De plus, qmail supporte maildir, un nouveau format de boîte aux lettres utilisateur très solide. Les maildirs, à la différence des fichiers mbox ou des dossiers MH, ne seront pas corrompus si le système plante pendant la distribution. Encore mieux, non seulement un utilisateur peut lire son courrier en sécurité sur NFS (Network File System), mais en plus un nombre illimité de clients NFS peuvent lui distribuer du courrier au même moment.
Efficace : Sur un Pentium sous BSD/OS, qmail peut facilement supporter 200000 messages locaux par jour -- il s'agit de messages distincts injectés et distribués dans les boîtes aux lettres dans un test réel -- ! Malgré le fait que les livraisons lointaines soient limitées 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 dépasse 20 envois simultanés par défaut, de sorte qu'il permet de gèrer très 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 :
Remplaçant pour sendmail : qmail supporte le masquerading hôte et utilisateur, la dissimulation complète de l'hôte, les domaines virtuels, les null-clients, les commandes de relais, les enregistrements à double rebond, les programmateurs de relance de messages indépendants... En résumé, qmail n'est pas en reste côté modernité des caractéristiques. Qmail inclut également une fonction de "couverture", c'est-à-dire qu'il se fait passer pour sendmail, afin d'être utilisé de manière transparente par votre agent utilisateur courrier (MUA, Mail User Agent).
Suivez exactement les instructions du fichier INSTALL.
Remarques :
Prenez le temps de lire complètement la documentation, s'il vous
plaît. Les numéros suivants se réfèrent aux étapes d'installation du
fichier INSTALL
sus-cité.
INSTALL.ids
.
./qmail-makectl
ne fonctionne pas sur mon
système. J'ai ajouté mon nom de domaine (mickey.n.eunet.de)
manuellement dans /var/qmail/control/me
.
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
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 décrit 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 conçu pour transférer des messages par le biais
d'une connection SLIP ou PPP. Pour mettre cela en place en fin de
déconnexion, créez 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 démarrage PPP, mettez
maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`
en remplaçant $IP avec l'adresse IP distante.
Remarques :
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 :
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 réseau. Vous
devez nécessairement 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 système. Cela transmettra directement ce message à sendmail de manière 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.
Comme qmail distribue le courrier dans le répertoire 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 :
/usr/lib/sendmail
est un lien vers le script
de couverture de qmail, dans /var/qmail/bin
.
servers: serveur_de_mail.compagnie.pays
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 décidé d'utiliser fetchmail parce que mon système Linux est utilisé par plusieurs personnes différentes (ma famille :-)) et fetchmail transmet le courrier sur le port SMTP, où qmail le prend en charge.
L'installation se fait sans problèmes, le dépôt 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
C'est mon gestionnaire de mail préféré. Je l'adore.
Il y a un seul problème : la plupart des paquetages TCL/TK pré-compilés ont l'option security activée. Le fichier script .xserverrc.secure, qui était fourni avec la S.u.S.E résout ce problème :
#!/bin/sh
#
# Déplacez ce fichier vers ~/.xserverrc, si vous
# ne voulez pas que tout le monde puisse accéder à 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
La FAQ de qmail donne cette commande :
Dans /.qmail
, ajouter
| preline procmail
La version 3.11pre7 a changé la variable Boite aux Lettres définie par
défaut. Avant, cela se trouvait dans config.h
; c'est
maintenant dans src/authenticate.c
:
#define MAILSPOOLHOME "/Mailbox" /* regarde l'entête / */
/* délivre à $HOME/Mailbox */
J'ai réuni 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
#
# Déposé 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 sûr que cela pointe vers la
#version de sh de votre système. NE
#LUI SUBSTITUEZ PAS un autre shell
#sauf si vous connaissez bien UNIX
LINEBUF=4096 #Nécessaire pour éviter à Procmail de
#s'étouffer sur des longs champs "destinataires"
#ou sur des instructions concernant la manière 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 littéralement chaque étape.
#NE LE LAISSEZ PAS INDEFINIMENT, sinon cela
#crée d'énormes fichiers-journaux (logfiles)
# Programme par défaut & situation des fichiers
MAILDIR=$HOME/Mail #Vous devriez vous assurer de l'existence de
#cela.
DEFAULT=$HOME/Mailbox #Boite de réception par défaut pour les
#utilisateurs de shell2-5 sur Internet
#Remplacez-la par la valeur correcte de
#votre système.
LOGFILE=$MAILDIR/procmail.log #L'emplacement des fichiers log. Recommandé,
#autrement les erreurs vous seront envoyées
#par e-mail :/
FORMAIL=/usr/bin/formail #Pratique pour les champs de réponse 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 réponse 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 créer votre fichier
.procmailrc
.
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 problèmes 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 présenté ici a été adapté des scripts de Bernhard Hailer (Merci, vraiment, merci !)
Le fichier rc.config
suivant charge les modules nécessaires pendant
l'initialisation :
#!/bin/bash
# Ceci est adapté du vieux script de Bernhard Hailer
LOCAL_NUMBER="91311234" # numéro de téléphone local. 091311234
REMOTE_NUMBER="0911123456" # numéro de téléphone 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 # crée 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'extérieur, 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...."
# vérifie si la négociation PPP est réussie :
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 `hostname`
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 démon 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 système (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 spécifique à ipppd (contrairement à pppd)
# utilisé seulement avec des adresses IP statiques
#useifip
# désactive toutes les compressions d'en-têtes
-vj
-vjccomp
-ac
-pc
-bsdcomp
# parfois, vous pouvez en avoir besoin
#noccp
# unité de réception 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 décommentant
# l'une des lignes suivantes. Toutefois, si la machine est un client, faire
# cela empêche la réussite de la connexion (message "peer refused to authenticate").
# Alors décommentez SEULEMENT sur un serveur.
# "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
#+pap
#+chap
# Si vous avez des problèmes avec la liaison (pas de réponse du premier
# paquet-lcp), essayez de diminuer le délai de ré-essai (retry-cycle).
# Fixé par défaut à 3 secondes, essayez par exemple 2 secondes
# lcp-restart 2
Paquetages requis :
Le net est toujours en perpétuel mouvement, aussi est-il un peu utopique de donner des sources fiables à 100%. Néanmoins, cela ne mange pas de pain...
L'habituel sermon : "Pas de garanties, pas de remboursements ; utilisez à vos propres risques."
Est-ce que quelq'un a fait fonctionner MH avec Maildi r? Je n'ai pas essayé -- le principe de ne pas bloquer un système qui tourne bien. Si oui, écrivez-moi vos informations pour une inclusion dans la prochaine version de ce document.