721 lines
20 KiB
Plaintext
721 lines
20 KiB
Plaintext
mini-HOWTO install qmail with MH
|
||
Christopher Richardson (rdn@tara.n.eunet.de)
|
||
v1.4, 5 March 1998
|
||
|
||
I am just documenting my installation experiences to offer some help
|
||
to other users who wish to use the above combination for their email.
|
||
v1.4 - I have finally got a new Linux box running so I decided to
|
||
update this mini-howto
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
1. Introduction
|
||
|
||
2. My System Details
|
||
|
||
3. Qmail Installation
|
||
|
||
3.1 Maildir2smtp
|
||
|
||
4. MH Installation
|
||
|
||
4.1 mtstailor
|
||
4.2 mh_profile
|
||
|
||
5. Fetchmail
|
||
|
||
6. Exmh
|
||
|
||
7. Procmail
|
||
|
||
8. ISDN
|
||
|
||
9. Sources
|
||
|
||
10. Disclaimers
|
||
|
||
11. Postscript
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Introduction
|
||
|
||
|
||
|
||
My thanks to all netizens who have helped me, especially Tony Nugent
|
||
(tony@trishul.sci.gu.edu.au), David Summers
|
||
(david@summersoft.fay.ar.us) and S.u.S.E ( Linux distribution) who has
|
||
made installing Linux so much easier, and the authors of the above
|
||
excellent programs.
|
||
|
||
What is qmail and why should I use it? Here is the author´s (Dan
|
||
Bernstein) blurb:
|
||
|
||
qmail is a secure, reliable, efficient, simple message transfer agent.
|
||
It is meant as a replacement for the entire sendmail-binmail system on
|
||
typical Internet-connected UNIX hosts.
|
||
|
||
Secure: Security isn't just a goal, but an absolute requirement. Mail
|
||
delivery is critical for users; it cannot be turned off, so it must be
|
||
completely secure. (This is why I started writing qmail: I was sick of
|
||
the security holes in sendmail and other MTAs.)
|
||
|
||
Reliable: qmail's straight-paper-path philosophy guarantees that a
|
||
message, once accepted into the system, will never be lost. qmail also
|
||
supports maildir, a new, super-reliable user mailbox format. Maildirs,
|
||
unlike mbox files and mh folders, won't be corrupted if the system
|
||
crashes during delivery. Even better, not only can a user safely read
|
||
his mail over NFS, but any number of NFS clients can deliver mail to
|
||
him at the same time.
|
||
|
||
Efficient: On a Pentium under BSD/OS, qmail can easily sustain 200000
|
||
local messages per day---that's separate messages injected and
|
||
delivered to mailboxes in a real test! Although remote deliveries are
|
||
inherently limited by the slowness of DNS and SMTP, qmail overlaps 20
|
||
simultaneous deliveries by default, so it zooms quickly through
|
||
mailing lists. (This is why I finished qmail: I had to get a big
|
||
mailing list set up.)
|
||
|
||
Simple: qmail is vastly smaller than any other Internet MTA. Some
|
||
reasons why: (1) Other MTAs have separate forwarding, aliasing, and
|
||
mailing list mechanisms. qmail has one simple forwarding mechanism
|
||
that lets users handle their own mailing lists. (2) Other MTAs offer a
|
||
spectrum of delivery modes, from fast+unsafe to slow+queued. qmail-
|
||
send is instantly triggered by new items in the queue, so the qmail
|
||
system has just one delivery mode: fast+queued. (3) Other MTAs
|
||
include, in effect, a specialized version of inetd that watches the
|
||
load average. qmail's design inherently limits the machine load, so
|
||
qmail-smtpd can safely run from your system's inetd.
|
||
|
||
Replacement for sendmail: qmail supports host and user masquerading,
|
||
full host hiding, virtual domains, null clients, list-owner rewriting,
|
||
relay control, double-bounce recording, arbitrary RFC 822 address
|
||
lists, cross-host mailing list loop detection, per-recipient
|
||
checkpointing, downed host backoffs, independent message retry
|
||
schedules, etc. In short, it's up to speed on modern MTA features.
|
||
qmail also includes a drop-in ``sendmail'' wrapper so that it will be
|
||
used transparently by your current UAs.
|
||
|
||
|
||
|
||
2. My System Details
|
||
|
||
|
||
SuSE Linux Distribution 5.1 with 2.0.33 kernal.
|
||
|
||
|
||
PPP link to ISP
|
||
|
||
|
||
|
||
3. Qmail Installation
|
||
|
||
|
||
Follow the INSTALL instructions exactly.
|
||
|
||
|
||
Notes:
|
||
|
||
|
||
|
||
Please take the time to read the Fine documentation completely. The
|
||
numerals refer to the installation steps in the above INSTALL doc.
|
||
|
||
· 2 - I had to set up the groups and users manually as per
|
||
INSTALL.ids
|
||
|
||
· 7 - ./qmail-makectl did not work on my system. I added my domain
|
||
name (mickey.n.eunet.de) manually in /var/qmail/control/me
|
||
· 23 - Make sure qmail-smtpd is spelt correctly in the inetd-conf
|
||
file. (I spelt it incorrectly i.e. qmail-smptd, which took me two
|
||
days to find:( ) smtp stream tcp nowait qmaild
|
||
/var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
|
||
|
||
|
||
3.1. Maildir2smtp
|
||
|
||
|
||
Dan Bernstein has provided a package for sending queued email to an
|
||
ISP via dial-in. This package is available as serialmailxxx from his
|
||
site.
|
||
|
||
Install this package as described in the man page (Thanks Rupert
|
||
Mazzucco (maz@pap.univie.ac.at), it works out of the box!
|
||
|
||
|
||
|
||
maildir2smtp - blast a maildir across SMTP
|
||
|
||
maildir2smtp is designed to pass messages along a SLIP or
|
||
PPP link. To set this up on the disconnected end, create
|
||
a new maildir in alias:
|
||
|
||
# maildirmake ~alias/pppdir
|
||
# chown -R alias ~alias/pppdir
|
||
|
||
Put
|
||
|
||
:alias-ppp
|
||
|
||
into control/virtualdomains and
|
||
|
||
./pppdir/
|
||
|
||
into ~alias/.qmail-ppp-default. Don't forget the extra
|
||
slash in pppdir/. Then, in the PPP startup script, do
|
||
|
||
maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`
|
||
|
||
replacing $IP with the remote IP address.
|
||
|
||
|
||
|
||
Notes:
|
||
|
||
|
||
· Please read the Fine manual page completely.
|
||
|
||
· Maildir2smtp requires the dotted IP address of your mail server. If
|
||
you do not have this then ping YourMail.host.country which will
|
||
return the IP.
|
||
|
||
· This command can be included in your login script to flush all
|
||
queued mail after logging in to your ISP.
|
||
|
||
|
||
|
||
4. MH Installation
|
||
|
||
In addition to this, I also replaced /mh-6.8.4/mts/sendmail/smail.c
|
||
with Dan Bernstein´s mh-qmail-smail.c
|
||
This is what my mh-6.8.4/conf/MH looks like:
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
|
||
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
|
||
|
||
______________________________________________________________________
|
||
|
||
Notes:
|
||
|
||
· I have only compiled ``mts sendmail'' - read in comp.mail.mh
|
||
somewhere that /smtp can cause problems. Dominic Mitchell
|
||
(hdm@demon.net) wrote in comp.mail.mh (13 June 1997):
|
||
|
||
``Not quite. With this option MH still talks SMTP, just over a pipe
|
||
and not over a network. You *really* need a line in your
|
||
/.mh_profile which says:
|
||
|
||
postproc: /usr/local/nmh/lib/spost
|
||
|
||
Or whever it's kept on your system. This will pass the message
|
||
directly to sendmail in the traditional manner. You're using qmail
|
||
of course, so sendmail will be qmail's wrapper script, but that's
|
||
just fine.'' Thanks Dominic.
|
||
|
||
|
||
· I have remmed out ``mail'' because I want to control it via
|
||
mtstailor
|
||
|
||
|
||
4.1. mtstailor
|
||
|
||
|
||
As qmail delivers mail to the home directory (~/Mailbox). I added the
|
||
following to my 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
|
||
|
||
|
||
|
||
Notes:
|
||
|
||
· sendmail: /usr/lib/sendmail is a link to the qmail sendmail wrapper
|
||
in /var/qmail/bin
|
||
|
||
· MH does not like the tilde notation (~/) use /home instead or leave
|
||
blank which according to the docs defaults to $HOME.
|
||
|
||
· I recently installed MH and qmail on my office machine which is
|
||
connect via ethernet. I added the following line to mtstailor:
|
||
|
||
servers: mailserver.company.country
|
||
|
||
|
||
|
||
4.2. mh_profile
|
||
|
||
|
||
Here is my .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
|
||
|
||
|
||
|
||
Notes:
|
||
|
||
· I put in the MailDrop line to be ``sure to be sure''.
|
||
|
||
|
||
|
||
5. Fetchmail
|
||
|
||
I decided to use fetchmail because I have a multiuser (my family :).
|
||
Linux and fetchmail delivers mail to the smtp port where qmail takes
|
||
over.
|
||
|
||
|
||
Installation was no problem, multidrop works with the following
|
||
.fetchmailrc :
|
||
|
||
|
||
|
||
poll PersonalMail.Germany.EU.net
|
||
protocol pop3
|
||
username myname
|
||
password mypassword
|
||
# the next two lines do the trick for multidrop
|
||
localdomains mydomain.de
|
||
is * here
|
||
# T2 of the fetchmail FAQ states that qmail needs this
|
||
forcecr
|
||
|
||
|
||
|
||
6. Exmh
|
||
|
||
This is my mailer by choice. I love it.
|
||
|
||
There is one problem - most pre-compiled TCL/TK packages have the
|
||
security option compiled in. The following script .xserverrc.secure
|
||
which came with SuSE solves this.
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
#!/bin/sh
|
||
|
||
#
|
||
# move this file to ~/.xserverrc, if you don't want to allow everybody to
|
||
# get access to your X-Server
|
||
#
|
||
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
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
7. Procmail
|
||
|
||
|
||
The qmail FAQ gives this command:
|
||
|
||
In /.qmail add the line
|
||
|
||
|
||
|
||
| preline procmail
|
||
|
||
|
||
|
||
Version 3.11pre7 has changed the default mail box variable. It used to
|
||
be in config.h. It is now in src/authenticate.c:
|
||
|
||
|
||
|
||
#define MAILSPOOLHOME "/Mailbox" /* watch the leading / */
|
||
/* delivers to $HOME/Mailbox */
|
||
|
||
|
||
|
||
I have culled from comp.mail.mh ans comp.mail.misc some hints on a
|
||
.procmailrc file. Thanks to everyone!
|
||
|
||
|
||
|
||
# A SAMPLE .PROCMAILRC FILE FOR NOVICES
|
||
# Written by Catherine Hampton <ariel@best.com>
|
||
# Version 1.1
|
||
# Updated 1/25/98
|
||
#
|
||
# Released to the Public Domain.
|
||
#
|
||
#
|
||
# SET VARIABLES
|
||
|
||
# Internal Variables
|
||
# the following have be modified by rdn 19980303
|
||
|
||
# Everyone says that the SHELL environment is essential
|
||
SHELL=/bin/sh #Shell used to run procmail. Be sure this points to
|
||
#your system's copy of sh. DO NOT substitute a
|
||
#different shell unless you really know UNIX
|
||
|
||
LINEBUF=4096 #Needed to keep Procmail from choking on long
|
||
#"recipes", or instructions on what to do with
|
||
#particular kinds of email.
|
||
|
||
PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh:
|
||
#Path for your programs -- this is probably best
|
||
#left alone.
|
||
|
||
VERBOSE=off #Change this to "on" when you try a new recipe
|
||
#so that Procmail will log literally every step
|
||
#it takes. DO NOT LEAVE IT ON, though, because
|
||
#it creates huge logfiles.
|
||
|
||
# Default Program & file locations
|
||
|
||
MAILDIR=$HOME/Mail #you'd better make sure this directory exists
|
||
|
||
DEFAULT=$HOME/Mailbox #default incoming mailbox for shell2-5 users
|
||
#on Best Internet. Substitute the correct
|
||
#setting for your system.
|
||
|
||
|
||
LOGFILE=$MAILDIR/procmail.log #Logs message disposition. Recommended -- otherwise
|
||
#errors are emailed to you. :/
|
||
|
||
FORMAIL=/usr/bin/formail #useful for autoreply recipes. If you
|
||
#are not on Best Internet, modify this to
|
||
#your system's copy of formail.
|
||
|
||
SENDMAIL=/usr/sbin/sendmail #useful for autoreply recipes. If you are
|
||
#not on Best Internet, modify this to point
|
||
#to your system's copy of sendmail.
|
||
|
||
|
||
|
||
Procmail is an excellently documented program. Read the man pages for
|
||
examples on how to set up your .procmailrc file.
|
||
|
||
|
||
8. ISDN
|
||
|
||
|
||
I am including this although this has nothing to do with qmail or mh.
|
||
But without a PPP line to your ISP there is no email at all. I had
|
||
quite a bit of bother to get my ISDN working. The SusE distribution
|
||
includes a configuration for ISDN, but I wanted something simpler. The
|
||
stuff here was adapted from Bernhard Hailer's scripts. (Vielen, vielen
|
||
dank!)
|
||
|
||
The following rc.config loads the necessary modules during
|
||
initialisation:
|
||
|
||
|
||
|
||
#!/bin/bash
|
||
# This is adapted Bernhard Hailer's old script
|
||
|
||
LOCAL_NUMBER="91311234" # tel no. 091311234
|
||
REMOTE_NUMBER="0911123456" # ISP tel no.
|
||
LOCAL_IP="192.168.0.99" # I have dynamic IP so this will do
|
||
REMOTE_IP="195.112.123.11" # your ISP's gateway
|
||
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 # create new 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
|
||
|
||
|
||
|
||
I use the following script to dial out, it is called simply isdn
|
||
on|off
|
||
|
||
|
||
|
||
#!/bin/bash
|
||
# This is based on an old script from Bernhard Hailer
|
||
|
||
IP_ADDRESS="195.112.123.11"
|
||
|
||
case "$1" in
|
||
on)
|
||
|
||
|
||
echo "Calling ippp0"
|
||
/sbin/isdnctrl dial ippp0
|
||
# the sleep is important as it gives the PPP time to settle down
|
||
echo "Sleep for 8s for PPP handshake"
|
||
sleep 8s
|
||
/sbin/route add default ippp0
|
||
echo "line open - checking...."
|
||
|
||
# check whether PPP negotiation was successful:
|
||
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
|
||
|
||
|
||
|
||
The next lot is the ipppd options file /etc/ppp/options.ipppd
|
||
|
||
|
||
|
||
# Based on:
|
||
# Klaus Franken, kfr@suse.de
|
||
# Version: 27.08.97 (5.1)
|
||
#
|
||
# This file is copy by YaST from /etc/ppp/ioptions.YaST
|
||
# to options.<device>
|
||
|
||
user "myuserid"
|
||
|
||
# my system name (only for CHAP!)
|
||
# name my_system_name
|
||
|
||
# accept IP addresses from peer
|
||
# use with dynamic IP
|
||
ipcp-accept-local
|
||
ipcp-accept-remote
|
||
noipdefault
|
||
|
||
# try to get IP address from interface
|
||
# option specific to ipppd (as opposed to pppd)
|
||
# use only with static IP
|
||
#useifip
|
||
|
||
# disable all header-compression
|
||
-vj
|
||
-vjccomp
|
||
-ac
|
||
-pc
|
||
-bsdcomp
|
||
|
||
# sometimes you need this:
|
||
#noccp
|
||
|
||
# max receive unit
|
||
mru 1524
|
||
# max transmit unit
|
||
mtu 1500
|
||
|
||
# If this machine is a server, force authentication by uncommenting one
|
||
# of the following. However, if this machine is a client, doing this will
|
||
# prevent a succesful connection! (message "peer refused to authenticate").
|
||
# So, only uncomment on a server.
|
||
# "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
|
||
#+pap
|
||
#+chap
|
||
|
||
# if you have problems with handshaking (no response for first
|
||
# lcp-package) try to decrease the retry-cycle. Default is 3 sec,
|
||
# try for example 2 sec:
|
||
# lcp-restart 2
|
||
|
||
|
||
|
||
9. Sources
|
||
|
||
|
||
Required Packages:
|
||
|
||
|
||
The net is so dynamic that it is pretty pointless to give sources.
|
||
but for what it's worth:
|
||
|
||
|
||
· Find Qmail, setserial on http://www.qmail.org/
|
||
|
||
|
||
· Find MH on http://www.ics.uci.edu/~mh/
|
||
|
||
· Find glimpse on http://glimpse.cs.arizona.edu/
|
||
|
||
· Find Fetchmail on http://sagan.earthspace.net/~esr/fetchmail
|
||
|
||
|
||
· Find Exmh http://www.beedub.com/exmh
|
||
|
||
· Find Procmail ftp.informatik.rwth-aachen.de/pub/packages/promail
|
||
|
||
|
||
|
||
10. Disclaimers
|
||
|
||
The usual no guarantees, no money back, use at your own risk.
|
||
|
||
|
||
11. Postscript
|
||
|
||
|
||
Has anyone got mh working with Maildir? I have not tried - the
|
||
principle of not fixing a running system. If you have got it working
|
||
please mail me your instruction for inclusion in the next revision
|
||
|
||
|
||
|