home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / mini / Qmail+MH < prev    next >
Text File  |  1998-03-16  |  19KB  |  598 lines

  1.   mini-HOWTO install qmail with MH
  2.   Christopher Richardson (rdn@tara.n.eunet.de)
  3.   v1.4, 5 March 1998
  4.  
  5.   I am just documenting my installation experiences to offer some help
  6.   to other users who wish to use the above combination for their email.
  7.   v1.4 - I have finally got a new Linux box running so I decided to
  8.   update this mini-howto
  9.  
  10.   1.  Introduction
  11.  
  12.   My thanks to all netizens who have helped me, especially Tony Nugent
  13.   (tony@trishul.sci.gu.edu.au), David Summers
  14.   (david@summersoft.fay.ar.us) and S.u.S.E ( Linux distribution) who has
  15.   made installing Linux so much easier, and the authors of the above
  16.   excellent programs.
  17.  
  18.   What is qmail and why should I use it?  Here is the author┤s (Dan
  19.   Bernstein) blurb:
  20.  
  21.   qmail is a secure, reliable, efficient, simple message transfer agent.
  22.   It is meant as a replacement for the entire sendmail-binmail system on
  23.   typical Internet-connected UNIX hosts.
  24.  
  25.   Secure: Security isn't just a goal, but an absolute requirement. Mail
  26.   delivery is critical for users; it cannot be turned off, so it must be
  27.   completely secure. (This is why I started writing qmail: I was sick of
  28.   the security holes in sendmail and other MTAs.)
  29.  
  30.   Reliable: qmail's straight-paper-path philosophy guarantees that a
  31.   message, once accepted into the system, will never be lost. qmail also
  32.   supports maildir, a new, super-reliable user mailbox format. Maildirs,
  33.   unlike mbox files and mh folders, won't be corrupted if the system
  34.   crashes during delivery. Even better, not only can a user safely read
  35.   his mail over NFS, but any number of NFS clients can deliver mail to
  36.   him at the same time.
  37.  
  38.   Efficient: On a Pentium under BSD/OS, qmail can easily sustain 200000
  39.   local messages per day---that's separate messages injected and
  40.   delivered to mailboxes in a real test! Although remote deliveries are
  41.   inherently limited by the slowness of DNS and SMTP, qmail overlaps 20
  42.   simultaneous deliveries by default, so it zooms quickly through
  43.   mailing lists. (This is why I finished qmail: I had to get a big
  44.   mailing list set up.)
  45.  
  46.   Simple: qmail is vastly smaller than any other Internet MTA. Some
  47.   reasons why: (1) Other MTAs have separate forwarding, aliasing, and
  48.   mailing list mechanisms. qmail has one simple forwarding mechanism
  49.   that lets users handle their own mailing lists. (2) Other MTAs offer a
  50.   spectrum of delivery modes, from fast+unsafe to slow+queued. qmail-
  51.   send is instantly triggered by new items in the queue, so the qmail
  52.   system has just one delivery mode: fast+queued. (3) Other MTAs
  53.   include, in effect, a specialized version of inetd that watches the
  54.   load average.  qmail's design inherently limits the machine load, so
  55.   qmail-smtpd can safely run from your system's inetd.
  56.  
  57.   Replacement for sendmail: qmail supports host and user masquerading,
  58.   full host hiding, virtual domains, null clients, list-owner rewriting,
  59.   relay control, double-bounce recording, arbitrary RFC 822 address
  60.   lists, cross-host mailing list loop detection, per-recipient
  61.   checkpointing, downed host backoffs, independent message retry
  62.   schedules, etc. In short, it's up to speed on modern MTA features.
  63.   qmail also includes a drop-in ``sendmail'' wrapper so that it will be
  64.   used transparently by your current UAs.
  65.   2.  My System Details
  66.  
  67.   SuSE Linux Distribution 5.1 with 2.0.33 kernal.
  68.  
  69.   PPP link to ISP
  70.  
  71.   3.  Qmail Installation
  72.  
  73.   Follow the INSTALL instructions exactly.
  74.  
  75.   Notes:
  76.  
  77.   Please take the time to read the Fine documentation  completely.  The
  78.   numerals refer to the installation steps in the above INSTALL doc.
  79.  
  80.   ╖  2  - I had to set up the groups and users manually as per
  81.      INSTALL.ids
  82.  
  83.   ╖  7  - ./qmail-makectl did not work on my system. I added my domain
  84.      name (mickey.n.eunet.de) manually in /var/qmail/control/me
  85.  
  86.   ╖  23 - Make sure qmail-smtpd is spelt correctly in the inetd-conf
  87.      file.  (I spelt it incorrectly i.e. qmail-smptd, which took me two
  88.      days to find:( ) smtp  stream  tcp     nowait  qmaild
  89.      /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
  90.  
  91.   3.1.  Maildir2smtp
  92.  
  93.   Dan Bernstein has provided a package for sending queued email to an
  94.   ISP via dial-in. This package is available as serialmailxxx from his
  95.   site.
  96.  
  97.   Install this package as described in the man page (Thanks Rupert
  98.   Mazzucco (maz@pap.univie.ac.at), it works out of the box!
  99.  
  100.          maildir2smtp - blast a maildir across SMTP
  101.  
  102.          maildir2smtp is designed to pass messages along a SLIP  or
  103.          PPP  link.  To set this up on the disconnected end, create
  104.          a new maildir in alias:
  105.  
  106.             # maildirmake ~alias/pppdir
  107.             # chown -R alias ~alias/pppdir
  108.  
  109.          Put
  110.  
  111.             :alias-ppp
  112.  
  113.          into control/virtualdomains and
  114.  
  115.             ./pppdir/
  116.  
  117.          into ~alias/.qmail-ppp-default.  Don't  forget  the  extra
  118.          slash in pppdir/.  Then, in the PPP startup script, do
  119.  
  120.             maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`
  121.  
  122.          replacing  $IP with the remote IP address.
  123.  
  124.   Notes:
  125.  
  126.   ╖  Please read the Fine manual page completely.
  127.  
  128.   ╖  Maildir2smtp requires the dotted IP address of your mail server. If
  129.      you do not have this then ping YourMail.host.country which will
  130.      return the IP.
  131.  
  132.   ╖  This command can be included in your login script to flush all
  133.      queued mail after logging in to your ISP.
  134.  
  135.   4.  MH Installation
  136.  
  137.   In addition to this, I also replaced /mh-6.8.4/mts/sendmail/smail.c
  138.   with Dan Bernstein┤s mh-qmail-smail.c
  139.  
  140.   This is what my mh-6.8.4/conf/MH looks like:
  141.  
  142.   ______________________________________________________________________
  143.  
  144.   bin     /usr/bin/mh
  145.   etc     /usr/lib/mh
  146.   #mail
  147.   #mandir /usr/man
  148.   #manuals        standard
  149.   chown   /bin/chown
  150.   #cp     cp
  151.   #ln     ln
  152.   #remove mv -f
  153.   cc      gcc
  154.   ccoptions -traditional -O2 -m486 -D_NFILE='getdtablesize()'
  155.             -DSIGEMT=SIGUSR1
  156.   curses  -lncurses
  157.   #ldoptions      -s
  158.   #ldoptlibs
  159.   lex     flex
  160.   #oldload        off
  161.   #ranlib on
  162.   mts     sendmail
  163.   #mf     off
  164.   #bboards        off
  165.   #bbdelivery     off
  166.   #bbhome /usr/spool/bboards
  167.   pop     on
  168.   popdir  /usr/lib/mh
  169.   sharedlib       sys5
  170.   slflags -fPIC
  171.   slibdir /usr/lib
  172.   mailgroup       mail
  173.   signal  void
  174.   sprintf int
  175.   #editor prompter
  176.   #debug  off
  177.   #regtest        off
  178.   options ATHENA
  179.   options BIND
  180.   options DPOP
  181.   options DUMB
  182.   options FCNTL
  183.   options MHE
  184.   options MHRC
  185.   options MIME
  186.   options MORE='"/usr/bin/less"'
  187.   options OVERHEAD
  188.   options POP2
  189.   options POPSERVICE='"pop3"'
  190.   options RENAME
  191.   options RPATHS
  192.   options RPOP
  193.   options SOCKETS
  194.   options SVR4
  195.   options SYS5
  196.   options SYS5DIR
  197.   options TERMINFO
  198.   options UNISTD
  199.   options VSPRINTF
  200.  
  201.   ______________________________________________________________________
  202.  
  203.   Notes:
  204.  
  205.   ╖  I have only compiled ``mts sendmail'' - read in comp.mail.mh
  206.      somewhere that /smtp can cause problems. Dominic Mitchell
  207.      (hdm@demon.net) wrote in comp.mail.mh (13 June 1997):
  208.  
  209.      ``Not quite. With this option MH still talks SMTP, just over a pipe
  210.      and not over a network. You *really* need a line in your
  211.      /.mh_profile which says:
  212.  
  213.      postproc: /usr/local/nmh/lib/spost
  214.  
  215.      Or whever it's kept on your system. This will pass the message
  216.      directly to sendmail in the traditional manner. You're using qmail
  217.      of course, so sendmail will be qmail's wrapper script, but that's
  218.      just fine.'' Thanks Dominic.
  219.  
  220.   ╖  I have remmed out ``mail'' because I want to control it via
  221.      mtstailor
  222.  
  223.   4.1.  mtstailor
  224.  
  225.   As qmail delivers mail to the home directory (~/Mailbox). I added the
  226.   following to my mtstailor
  227.  
  228.        localname:      mickey
  229.        localdomain:    n.eunet.de
  230.        mmdfldir:
  231.        mmdflfil:       Mailbox
  232.        uucpldir:
  233.        uucplfil:
  234.        mmdelim1:       \001\001\001\001\n
  235.        mmdelim2:       \001\001\001\001\n
  236.        mmailid:        0
  237.        umincproc:
  238.        lockldir:
  239.        sendmail:       /usr/lib/sendmail
  240.  
  241.   Notes:
  242.  
  243.   ╖  sendmail: /usr/lib/sendmail is a link to the qmail sendmail wrapper
  244.      in /var/qmail/bin
  245.  
  246.   ╖  MH does not like the tilde notation (~/) use /home instead or leave
  247.      blank which according to the docs defaults to $HOME.
  248.  
  249.   ╖  I recently installed MH and qmail on my office machine which is
  250.      connect via ethernet. I added the following line to mtstailor:
  251.  
  252.      servers: mailserver.company.country
  253.  
  254.   4.2.  mh_profile
  255.  
  256.   Here is my .mh_profile
  257.  
  258.        Path: Mail
  259.        draft-folder: drafts
  260.        unseen-sequence: unseen
  261.        AliasFile: /home/rdn/.mh_aliases
  262.        send: -msgid
  263.        comp: -form /home/rdn/.mymh-components
  264.        MailDrop: /home/rdn/Mailbox
  265.  
  266.   Notes:
  267.  
  268.   ╖  I put in the MailDrop line to be ``sure to be sure''.
  269.  
  270.   5.  Fetchmail
  271.  
  272.   I decided to use fetchmail because I have a multiuser (my family :).
  273.   Linux and fetchmail delivers mail to the smtp port where qmail takes
  274.   over.
  275.  
  276.   Installation was no problem, multidrop works with the following
  277.   .fetchmailrc :
  278.  
  279.        poll PersonalMail.Germany.EU.net
  280.        protocol pop3
  281.        username myname
  282.        password mypassword
  283.        # the next two lines do the trick for multidrop
  284.        localdomains mydomain.de
  285.        is * here
  286.        # T2 of the fetchmail FAQ states that qmail needs this
  287.        forcecr
  288.  
  289.   6.  Exmh
  290.  
  291.   This is my mailer by choice. I love it.
  292.  
  293.   There is one problem - most pre-compiled TCL/TK packages have the
  294.   security option compiled in.  The following script .xserverrc.secure
  295.   which came with SuSE solves this.
  296.  
  297.   ______________________________________________________________________
  298.  
  299.   #!/bin/sh
  300.  
  301.   #
  302.   # move this file to ~/.xserverrc, if you don't want to allow everybody to
  303.   # get access to your X-Server
  304.   #
  305.   if [ -x /usr/bin/keygen ]; then
  306.       if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname \
  307.            -a ! -x /usr/bsd/hostname ];
  308.       then
  309.           echo "startx: can't get my hostname - exiting"
  310.           exit 1
  311.       else
  312.           host=`hostname`
  313.       fi
  314.  
  315.       xauth add $host:0 . `/usr/bin/keygen`
  316.       sleep 2
  317.       xauth add $host/"unix":0 . `/usr/bin/keygen`
  318.       exec X :0 -auth .Xauthority $*
  319.   else
  320.       exec X :0 $*
  321.   fi
  322.   ______________________________________________________________________
  323.  
  324.   7.  Procmail
  325.  
  326.   The qmail FAQ gives this command:
  327.  
  328.   In  /.qmail add the line
  329.  
  330.        | preline procmail
  331.  
  332.   Version 3.11pre7 has changed the default mail box variable. It used to
  333.   be in config.h. It is now in src/authenticate.c:
  334.  
  335.        #define MAILSPOOLHOME "/Mailbox"        /* watch the leading / */
  336.                                                /* delivers to $HOME/Mailbox */
  337.  
  338.   I have culled from comp.mail.mh ans comp.mail.misc some hints on a
  339.   .procmailrc file. Thanks to everyone!
  340.  
  341.   # A SAMPLE .PROCMAILRC FILE FOR NOVICES
  342.   # Written by Catherine Hampton <ariel@best.com>
  343.   # Version 1.1
  344.   # Updated 1/25/98
  345.   #
  346.   # Released to the Public Domain.
  347.   #
  348.   #
  349.   # SET VARIABLES
  350.  
  351.   # Internal Variables
  352.   # the following have be modified by rdn 19980303
  353.  
  354.   # Everyone says that the SHELL environment is essential
  355.   SHELL=/bin/sh               #Shell used to run procmail.  Be sure this points to
  356.                               #your system's copy of sh.  DO NOT substitute a
  357.                               #different shell unless you really know UNIX
  358.  
  359.   LINEBUF=4096                #Needed to keep Procmail from choking on long
  360.                               #"recipes", or instructions on what to do with
  361.                               #particular kinds of email.
  362.  
  363.   PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh:
  364.                               #Path for your programs -- this is probably best
  365.                               #left alone.
  366.  
  367.   VERBOSE=off                 #Change this to "on" when you try a new recipe
  368.                               #so that Procmail will log literally every step
  369.                               #it takes.  DO NOT LEAVE IT ON, though, because
  370.                               #it creates huge logfiles.
  371.  
  372.   # Default Program & file locations
  373.  
  374.   MAILDIR=$HOME/Mail          #you'd better make sure this directory exists
  375.  
  376.   DEFAULT=$HOME/Mailbox         #default incoming mailbox for shell2-5 users
  377.                               #on Best Internet.  Substitute the correct
  378.                               #setting for your system.
  379.  
  380.   LOGFILE=$MAILDIR/procmail.log #Logs message disposition.  Recommended -- otherwise
  381.                               #errors are emailed to you. :/
  382.  
  383.   FORMAIL=/usr/bin/formail        #useful for autoreply recipes.  If you
  384.                                   #are not on Best Internet, modify this to
  385.                                   #your system's copy of formail.
  386.  
  387.   SENDMAIL=/usr/sbin/sendmail    #useful for autoreply recipes.  If you are
  388.                                  #not on Best Internet, modify this to point
  389.                                  #to your system's copy of sendmail.
  390.  
  391.   Procmail is an excellently documented program. Read the man pages for
  392.   examples on how to set up your .procmailrc file.
  393.  
  394.   8.  ISDN
  395.  
  396.   I am including this although this has nothing to do with qmail or mh.
  397.   But without a PPP line to your ISP there is no email at all. I had
  398.   quite a bit of bother to get my ISDN working. The SusE distribution
  399.   includes a configuration for ISDN, but I wanted something simpler. The
  400.   stuff here was adapted from Bernhard Hailer's scripts. (Vielen, vielen
  401.   dank!)
  402.  
  403.   The following rc.config loads the necessary modules during
  404.   initialisation:
  405.  
  406.        #!/bin/bash
  407.        # This is adapted Bernhard Hailer's old script
  408.  
  409.        LOCAL_NUMBER="91311234"        # tel no. 091311234
  410.        REMOTE_NUMBER="0911123456"     # ISP tel no.
  411.        LOCAL_IP="192.168.0.99"        # I have dynamic IP so this will do
  412.        REMOTE_IP="195.112.123.11"     # your ISP's gateway
  413.        DEVICE="ippp0"
  414.  
  415.        SYSPATH="/sbin"
  416.        ISDNCTRL="$SYSPATH/isdnctrl"
  417.  
  418.        case "$1" in
  419.        start)
  420.                # turn on isdn
  421.                insmod /lib/modules/2.0.33/net/slhc.o
  422.                insmod /lib/modules/2.0.33/misc/isdn.o
  423.                sleep 1
  424.                # load the hisax module
  425.                insmod /lib/modules/2.0.33/misc/hisax.o
  426.                                           id=Tel0 type=5 protocol=2 irq=10 io=0x300
  427.                echo "starting isdn4linux"
  428.                # global
  429.                $ISDNCTRL verbose 0
  430.  
  431.                $ISDNCTRL addif $DEVICE         # create new interface
  432.                $ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER
  433.                $ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER
  434.                $ISDNCTRL eaz $DEVICE $LOCAL_NUMBER
  435.                $ISDNCTRL l2_prot $DEVICE hdlc
  436.                $ISDNCTRL l3_prot $DEVICE trans
  437.                $ISDNCTRL encap $DEVICE syncppp
  438.                $ISDNCTRL huptimeout $DEVICE 300
  439.                $ISDNCTRL chargehup  $DEVICE off
  440.                $ISDNCTRL secure $DEVICE on
  441.  
  442.                $SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1
  443.                $SYSPATH/route add default $DEVICE
  444.                $SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd &
  445.                $SYSPATH/route del default
  446.  
  447.                ;;
  448.        stop)
  449.                #turn off isdn
  450.                rmmod hisax.o
  451.                sleep 1
  452.                rmmod isdn.o
  453.                rmmod slhc.o
  454.                echo "Shutting down isdn4linux"
  455.                $ISDNCTRL delif ippp0
  456.                ;;
  457.        *)
  458.                echo "Usage: $0 (start|stop)"
  459.                exit 1
  460.                ;;
  461.        esac
  462.  
  463.   I use the following script to dial out, it is called simply isdn
  464.   on|off
  465.  
  466.        #!/bin/bash
  467.        # This is based on an old script from Bernhard Hailer
  468.  
  469.        IP_ADDRESS="195.112.123.11"
  470.  
  471.        case "$1" in
  472.        on)
  473.  
  474.                echo "Calling ippp0"
  475.                /sbin/isdnctrl dial ippp0
  476.        # the sleep is important as it gives the PPP time to settle down
  477.                echo "Sleep for 8s for PPP handshake"
  478.                sleep 8s
  479.                /sbin/route add default ippp0
  480.                echo "line open - checking...."
  481.  
  482.        # check whether PPP negotiation was successful:
  483.                set `ping -qc3 -i1 $IP_ADDRESS 2>/dev/null | grep transmitted`
  484.                if [ $4 -gt 0 ];
  485.                then
  486.                        echo "succeeded."
  487.                        echo "Starting fetchmail daemon"
  488.                        /usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail
  489.                        echo "Flushing mail queue...."
  490.                        /usr/local/bin/serialmail/maildir2smtp
  491.                                    ~alias/pppdir alias-ppp- mail.server.ip.no `hostname`
  492.                else
  493.                        echo "failed!"
  494.                        /sbin/isdnctrl hangup ippp0
  495.                fi
  496.  
  497.        ;;
  498.  
  499.        off)
  500.                        echo -n "Shutting down fetchmail daemon"
  501.                        /usr/bin/fetchmail --quit
  502.  
  503.                        /sbin/isdnctrl hangup ippp0
  504.                        /sbin/route del default         # and delete route
  505.                        echo "You're off line"
  506.        ;;
  507.  
  508.        *)
  509.                echo -e "\aUsage:"
  510.                echo "isdn on"
  511.                echo "isdn off"
  512.        ;;
  513.  
  514.        esac
  515.  
  516.   The next lot is the ipppd options file /etc/ppp/options.ipppd
  517.  
  518.   # Based on:
  519.   # Klaus Franken, kfr@suse.de
  520.   # Version: 27.08.97 (5.1)
  521.   #
  522.   # This file is copy by YaST from /etc/ppp/ioptions.YaST
  523.   #   to options.<device>
  524.  
  525.   user "myuserid"
  526.  
  527.   # my system name (only for CHAP!)
  528.   # name my_system_name
  529.  
  530.   # accept IP addresses from peer
  531.   # use with dynamic IP
  532.   ipcp-accept-local
  533.   ipcp-accept-remote
  534.   noipdefault
  535.  
  536.   # try to get IP address from interface
  537.   # option specific to ipppd (as opposed to pppd)
  538.   # use only with static IP
  539.   #useifip
  540.  
  541.   # disable all header-compression
  542.   -vj
  543.   -vjccomp
  544.   -ac
  545.   -pc
  546.   -bsdcomp
  547.  
  548.   # sometimes you need this:
  549.   #noccp
  550.  
  551.   # max receive unit
  552.   mru 1524
  553.   # max transmit unit
  554.   mtu 1500
  555.  
  556.   # If this machine is a server, force authentication by uncommenting one
  557.   # of the following. However, if this machine is a client, doing this will
  558.   # prevent a succesful connection! (message "peer refused to authenticate").
  559.   # So, only uncomment on a server.
  560.   # "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
  561.   #+pap
  562.   #+chap
  563.  
  564.   # if you have problems with handshaking (no response for first
  565.   # lcp-package) try to decrease the retry-cycle. Default is 3 sec,
  566.   # try for example 2 sec:
  567.   # lcp-restart 2
  568.  
  569.   9.  Sources
  570.  
  571.   Required Packages:
  572.  
  573.   The net is so dynamic that it is pretty pointless to give sources.
  574.   but for what it's worth:
  575.  
  576.   ╖  Find Qmail, setserial on http://www.qmail.org/
  577.  
  578.   ╖  Find MH on http://www.ics.uci.edu/~mh/
  579.  
  580.   ╖  Find glimpse on http://glimpse.cs.arizona.edu/
  581.  
  582.   ╖  Find Fetchmail on http://sagan.earthspace.net/~esr/fetchmail
  583.  
  584.   ╖  Find Exmh http://www.beedub.com/exmh
  585.  
  586.   ╖  Find Procmail ftp.informatik.rwth-aachen.de/pub/packages/promail
  587.  
  588.   10.  Disclaimers
  589.  
  590.   The usual no guarantees, no money back, use at your own risk.
  591.  
  592.   11.  Postscript
  593.  
  594.   Has anyone got mh working with Maildir? I have not tried - the
  595.   principle of not fixing a running system. If you have got it working
  596.   please mail me your instruction for inclusion in the next revision
  597.  
  598.