Qmail VMailMgr and Courier-Imap HOWTO
 Dan Kuykendall <[email protected]>
 v1.4, 23 April 2000

 This document is about building a mail server that will support vir�
 tual domain hosting and provide smtp, pop3 and imap services,   using
 a powerful alternative to sendmail.
 ______________________________________________________________________

 Table of Contents


 1. Introduction

    1.1 What is Qmail and why should I use it?
    1.2 What is VMailMgr and why should I use it?
    1.3 What is Courier-imap and why should I use it?
    1.4 Description of the components
    1.5 Working configurations
    1.6 History
    1.7 New versions
    1.8 Comments
    1.9 Version History
    1.10 Copyrights and Trademarks
    1.11 Acknowledgements and Thanks

 2. Component installation

    2.1 Preparations
       2.1.1 Get source rpms
       2.1.2 Get binary rpms
       2.1.3 Get tarred sources (for non-RPM users)
    2.2 Install support packages
       2.2.1 Install with RPMS
          2.2.1.1 Compiling SRC.RPM's
          2.2.1.2 Installing RPM's
       2.2.2 Install with source
    2.3 Install Qmail
       2.3.1 Install with RPMS
          2.3.1.1 Compiling SRC.RPM's
          2.3.1.2 Installing RPM's
       2.3.2 Install with source
    2.4 Install Courier-imap
       2.4.1 Install with RPMS
          2.4.1.1 Compiling SRC.RPM's
          2.4.1.2 Installing RPM's
       2.4.2 Install with source
    2.5 Install VMailMgr
       2.5.1 Install with RPMS
          2.5.1.1 Compiling SRC.RPM's
          2.5.1.2 Installing RPM's
       2.5.2 Install with source

 3. Putting it all together

    3.1 Basic Qmail config
    3.2 Tell Qmail to use VMailMgr for authentication
    3.3 Setup Courier-imap for VMailMgr
    3.4 Setup virtual domain with VMailMgr
    3.5 Starting the daemons
    3.6 Some considerations left
    3.7 Known bugs
    3.8 The final word



 ______________________________________________________________________

 1.  Introduction

 Before you start reading: I am not a native speaker, so there are
 probably spelling/grammatical errors in this document. Feel encouraged
 to inform me of mistakes.

 1.1.  What is Qmail and why should I use it?

 Here is the authors (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.

 1.2.  What is VMailMgr and why should I use it?

 VMailMgr is:

 A password checking interface between qmail-popup and qmail-pop3d
 which replaces the usual checkpassword, as well as an authentication
 module for Courier IMAP, that provide access to the virtual mailboxes
 by one of three methods:

 �  IP-based virtual server access (invisible to the POP3 user)

 �  username-based access (username-virtualuser)

 �  hostname-based access ([email protected] or
    virtualuser:virtual.host)

 You should use it if:

 You prefer to have the users manage their own domains email accounts,
 and store their email in their own home dir.  (This makes setting up
 disk space quotas much easier)

 1.3.  What is Courier-imap and why should I use it?

 Courier-IMAP is:

 A server that provides IMAP access to Maildir mailboxes. This IMAP
 server does NOT handle traditional mailbox files (/var/spool/mail, and
 derivatives), it was written for the specific purpose of providing
 IMAP access to Maildirs.

 You should use it because:

 By default Qmail uses the newer more efficient Maildir format for
 storing email, and Courier-imap is the only imap server I am aware of
 that supports Maildir.  So in short, if you use Qmail, and want imap
 support, you have to use it.

 1.4.  Description of the components

 The email system you hopefully will get after having read this HOWTO
 is composed of several parts, the patched Qmail rpms are key to using
 this document. I recommend using the software versions I tried, they
 will probably compile without many problems and result in a fairly
 stable daemon. If you are courageous, you can try to compile all the
 latest-stuff-with-tons-of-new-features, but  don't blame me if
 something fails ;-). However, you may report other working
 configurations to be included in future versions of this document. All
 of the steps were tested on a RedHat Linux 6.2 box, so the HOWTO is
 somewhat specific, but you should be able to use it for other linux
 distributions as well.

 You do not necessarily have to install in all components. I tried to
 structure this HOWTO so that you can skip the parts you are not
 interested in.

 The document is neither a user manual to Qmail, VMailMgr nor Courier-
 imap. Its prime intention is to save email admins some headaches when
 installing their server and to do my little contribution to the linux
 community.

 1.5.  Working configurations

 Though this document is new, I am pretty confident that it can help
 you get your email system up and running.  Combinations that work for
 me are:

 �  RedHat 6.2, Linux 2.2.14, Qmail 1.03+patches-12, VMailMgr 0.96.6,
    Courier-imap 0.31

 �  Mandrake 7.0, Linux 2.2.13, Qmail 1.03+patches-12, VMailMgr 0.96.6,
    Courier-imap 0.31



 1.6.  History

 This document was started on April 18, 2000 by Dan Kuykendall after
 several installs of Qmail and VMailMgr.  Then even more setups when
 Courier-imap support was ready.

 1.7.  New versions

 The newest version of this can be found on my homepage
 <http://www.clearrivertech.com/linux/HOWTO> as SGML source, as HTML
 and as TEXT.  Other versions may be found in different formats at the
 LDP homepage  <http://www.linuxdoc.org/>.

 1.8.  Comments

 Comments on this HOWTO may be directed to the author Dan Kuykendall
 ([email protected] <mailto:[email protected]>).

 1.9.  Version History

 v0.1 (April 18, 2000)


 �  Preview version, wasn't in HOWTO format.

 v1.0 (April 18, 2000)


 �  Minor corrections.

 �  Added details and put into HOWTO format.

 v1.1 (April 19, 2000)


 �  Minor corrections.

 �  Restructured RPM install step.

 �  Added source compile and install steps.

 v1.2 (April 19, 2000)


 �  Minor corrections.

 �  Fixed source compile locations and install steps.

 �  Added source compile and install steps.

 v1.3 (April 19, 2000)


 �  Minor corrections.

 �  Built proper SGML version.

 v1.4 (April 23, 2000)


 �  Updated the Courier-IMAP setup information for new VMailMgr
    version.

 �  Switched the license to the GNU FDL.


 �  Other minor additions and corrections.

 1.10.  Copyrights and Trademarks

 Copyright (c)  Dan Kuykendall.  Permission is granted to copy,
 distribute and/or modify this document under the terms of the GNU Free
 Documentation License, Version 1.1 or any later version published by
 the Free Software Foundation

 A copy of the license is available at GNU Free Documentation License
 <http://www.gnu.org/copyleft/fdl.txt>.

 1.11.  Acknowledgements and Thanks

 Thanks to everyone that gave comments as I was writing this. This
 includes Bruce Guenter and other members of the vmailmgr-discuss list.

 2.  Component installation

 2.1.  Preparations

 You have two options

 �  Get and compile source rpms.  This has the benefit of being able to
    review the source before compiling, and compiling for your specific
    setup.

 �  Or simply get the binary rpms.  This has the benefit of simplicity,
    and not having to worry about having the necessary libraries
    installed.

    I recommend using Bruce Guenter's rpm releases, since they are well
    patched, and its what I used for building my systems.

 2.1.1.  Get source rpms

 You will need:

 �  ucspi-tcp-0.88-1.src.rpm -  <http://em.ca/~bruceg/rpms/ucspi-tcp/>

 �  daemontools-0.70-1.src.rpm -
    <http://em.ca/~bruceg/rpms/daemontools/>

 �  supervise-scripts-2.4-1.src.rpm -  <http://em.ca/~bruceg/supervise-
    scripts/>

 �  qmail-1.03+patches-12.src.rpm -
    <http://em.ca/~bruceg/qmail+patches/>

 �  vmailmgr-0.96.6-1.src.rpm -  <http://em.ca/~bruceg/vmailmgr/>

 �  courier-imap-0.31.tar.gz -  <http://www.inter7.com/courierimap/>

    For Courier-imap you must build the source rpm from the tar file
    (instructions will follow).

 2.1.2.  Get binary rpms

 Qmail does not come in binary form. Such packages are explicitly
 disallowed by the author of Qmail, and frustrating as it may be, I
 understand his reasoning.

 Courier-imap does not come in binary form, unless you want to use the
 one I built. If you want mine, visit
 <http://www.clearrivertech.com/linux/HOWTO/supportfiles/>.

 VMailMgr does not come in binary form that supports Courier-imap,
 unless you want to use the one I built. If you want mine, email me,
 and I will send it.

 �  ucspi-tcp-0.88-1.i386.rpm -  <http://em.ca/~bruceg/rpms/ucspi-tcp/>

 �  daemontools-0.70-1.i386.rpm -
    <http://em.ca/~bruceg/rpms/daemontools/>

 �  supervise-scripts-2.4-1.i386.rpm -
    <http://em.ca/~bruceg/supervise-scripts/>

 �  qmail-1.03+patches-12.src.rpm -
    <http://em.ca/~bruceg/qmail+patches/>

 �  vmailmgr-0.96.6-1.src.rpm -  <http://em.ca/~bruceg/vmailmgr/>

 �  courier-imap-0.31.tar.gz -  <http://www.inter7.com/courierimap/>

    For Courier-imap you must build the binary rpm from the tar file
    (instructions will follow) or email me for my binary rpm.

 2.1.3.  Get tarred sources (for non-RPM users)

 If your system does not have, or you do not use RPMS, you can install
 from source.

 �  ucspi-tcp-0.88.tar.gz -  <http://cr.yp.to/ucspi-tcp/ucspi-
    tcp-0.88.tar.gz>

 �  daemontools-0.70.tar.gz -
    <http://cr.yp.to/daemontools/daemontools-0.70.tar.gz>

 �  supervise-scripts-2.4.tar.gz -  <http://em.ca/~bruceg/supervise-
    scripts/>

 �  qmail-1.03.tar.gz -  <http://cr.yp.to/software/qmail-1.03.tar.gz>
    (*)

 �  vmailmgr-0.96.6.tar.gz -  <http://em.ca/~bruceg/vmailmgr/>

 �  courier-imap-0.31.tar.gz -  <http://www.inter7.com/courierimap/>


      (*) There may be minor differences in these instructions due to the
      use of the standard Qmail package. Please review the documentation for
      Qmail and VMailMgr if any of the files deviates from my instructions.


 2.2.  Install support packages

 2.2.1.  Install with RPMS

 2.2.1.1.  Compiling SRC.RPM's

 Simply run the following command for each package

 rpm --rebuild <package.src.rpm>


 -Example-



 ______________________________________________________________________
   rpm --rebuild ucspi-tcp-0.88-1.src.rpm
   rpm --rebuild daemontools-0.70-1.src.rpm
   rpm --rebuild supervise-scripts-2.4-1.src.rpm
 ______________________________________________________________________



 2.2.1.2.  Installing RPM's

 If you compiled the source rpms, the binaries will be located in
 /usr/src/redhat/RPMS/i386/ or something similar.

 Simply run the following command for each package

 rpm -ivh <location>/<package.i386.rpm>



 -Example-

 ______________________________________________________________________
   rpm -ivh /usr/src/redhat/RPMS/i386/ucspi-tcp-0.88-1.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/daemontools-0.70-1.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/supervise-scripts-2.4-1.i386.rpm
 ______________________________________________________________________



 2.2.2.  Install with source

 Run the following commands for each package

   (As non-root user)
   tar zxf <package.tar.gz>
   cd <newly created dir>
   ./configure
   make
   (As root)
   make setup check (for ucspi-tcp and daemontools)
   or
   make install (for supervise-scripts)



 -Example-

 ______________________________________________________________________
   (As non-root user)
   tar zxf supervise-scripts-2.4.tar.gz
   cd supervise-scripts-2.4
   ./configure
   make
   (As root)
   make setup check or  make install
 ______________________________________________________________________



 2.3.  Install Qmail

 2.3.1.  Install with RPMS



 2.3.1.1.  Compiling SRC.RPM's

 After installing the support packages,
 Simply run the following command:

 rpm --rebuild <package.src.rpm>



 -Example-

 ______________________________________________________________________
   rpm --rebuild qmail-1.03+patches-12.src.rpm
 ______________________________________________________________________



 2.3.1.2.  Installing RPM's

 After compiling the source rpms, the binaries will be located in
 /usr/src/redhat/RPMS/i386/ or something similar.

 Simply run the following command for each package

 rpm -ivh <location>/<package.i386.rpm>



 -Example-

 ______________________________________________________________________
   rpm -ivh /usr/src/redhat/RPMS/i386/qmail-1.03+patches-12.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/qmail-pop3d-1.03+patches-12.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/qmail-qmqpd-1.03+patches-12.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/qmail-qmtpd-1.03+patches-12.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/qmail-smtpd-1.03+patches-12.i386.rpm
 ______________________________________________________________________



   * note start *
   - Remove sendmail and any dependant applications prior to installing Qmail
   - by running the following command for each package
   - rpm -e <packagename>*
   -
   - On my system I had to remove sendmail, so I typed
   - rpm -e sendmail
   * note end *



 2.3.2.  Install with source

 As of this writing Bruce Guenter has not released a tar.gz package of
 his patched qmail. So until Bruce does this, I am having you download
 the standard Qmail package, and forcing you to read the included
 INSTALL file.

 Installing the standard build may cause minor differnces in the
 config, one example that comes to mind is that the init scripts are
 named differently.  This should not cause too much confusion, I just
 want you to be aware.

 Run the following command

   (As non-root user)
   tar zxf <package.tar.gz>
   cd <newly created dir>
   (Now read the INSTALL file and follow the steps to install Qmail)


 -Example-

 ______________________________________________________________________
   (As non-root user)
   tar zxf qmail-1.03.tar.gz
   cd qmail-1.03
   vi INSTALL (Read and follow steps)
 ______________________________________________________________________



 2.4.  Install Courier-imap

 2.4.1.  Install with RPMS

 2.4.1.1.  Compiling SRC.RPM's

 Build the courier-imap rpms from the tar file rpm -ta courier-
 imap-0.31.tar.gz


   * note start *
   - This errors out if you compile as root, but if your not root you
   - wont have permissions to /usr/src/redhat. You will want to build as a
   - non-root user, so create a ".rpmmacros" file (for rpm v3 and later) in
   - your home directory containing the line "%_topdir /path/to/home/redhat".
   - Then create your own "redhat" directory containing all the subdirs that
   - /usr/src/redhat contains.
   - You should never build RPMs as root unless you have to.
   * note end *



 * I will mention again, that I have built the binaries, and you can
 get them at *
 *  <http://www.clearrivertech.com/linux/HOWTO/supportfiles/>. *


 2.4.1.2.  Installing RPM's

 After compiling the source rpms, the binary will be located in
 /usr/src/redhat/RPMS/i386/ or something similar.

 Simply run the following command for each package

   rpm -ivh <location>/<package.i386.rpm>



 -Example-

 ______________________________________________________________________
   rpm -ivh /usr/src/redhat/RPMS/i386/courier-imap-0.31-1.i386.rpm
 ______________________________________________________________________



 2.4.2.  Install with source

 Run the following command

   (As non-root user)
   tar zxf <package.tar.gz>
   cd <newly created dir>
   ./configure
   make
   (As root)
   make install



 -Example-

 ______________________________________________________________________
   (As non-root user)
   tar zxf courier-imap-0.31.tar.gz
   cd courier-imap-0.31
   ./configure
   make
   (As root)
   make install
 ______________________________________________________________________



 2.5.  Install VMailMgr

 2.5.1.  Install with RPMS

 2.5.1.1.  Compiling SRC.RPM's

 Simply run the following command

 rpm --rebuild <package.src.rpm>


 -Example-

 ______________________________________________________________________
   rpm --rebuild vmailmgr-0.96.6-1.src.rpm
 ______________________________________________________________________



 2.5.1.2.  Installing RPM's

 If you compiled the source rpm, the binaries will be located in
 /usr/src/redhat/RPMS/i386/ or something similar.

 Simply run the following command for each package

 rpm -ivh <location>/<package.i386.rpm>



 -Example-

 ______________________________________________________________________
   rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-0.96.6-1.i386.rpm
   rpm -ivh /usr/src/redhat/RPMS/i386/VMailMgr-daemon-0.96.6-1.i386.rpm
 ______________________________________________________________________


 2.5.2.  Install with source

 Run the following commands

   (As non-root user)
   tar zxf <package.tar.gz>
   cd <newly created dir>
   ./configure
   make
   (As root)
   make install


 -Example-

 ______________________________________________________________________
   (As non-root user)
   tar zxf vmailmgr-0.96.6.tar.gz
   cd vmailmgr-0.96.6
   ./configure
   make
   (As root)
   make setup check or  make install
 ______________________________________________________________________


 That should do it.

 3.  Putting it all together

 3.1.  Basic Qmail config

 You will need to add your domains to the
 /var/qmail/control/virtualdomains file in the following format as is
 normal with qmail and VMailMgr.

   domain1.com:user1


 For more detailed setup and config documentation visit the Qmail web�
 site <http://www.qmail.org> and the VMailMgr website
 <http://em.ca/~bruceg/VMailMgr/>

 3.2.  Tell Qmail to use VMailMgr for authentication

 By default qmail uses checkpassword for authentication, to tell Qmail
 to use VMailMgr for authentication type the following command:

   echo checkvpw > /var/qmail/control/checkpassword



 3.3.  Setup Courier-imap for VMailMgr

 Copy the VMailMgr auth libs to courier's directory


   cp /usr/bin/authvmailmgr /usr/lib/courier-imap/libexec/authlib/



 Edit /usr/lib/courier-imap/etc/imapd.config and add authvmailmgr as
 the first entry in AUTHMODULES


 For more detailed setup and config documentation visit the Courier-
 imap website  <http://www.inter7.com/courierimap/>

 3.4.  Setup virtual domain with VMailMgr

 With the user account that will be managing the domain go to their
 home dir and type:

   vsetup



 This will setup the users home dir with the necessary structure to
 handle incoming email. You will probably want to create a email
 account by typing


   vadduser emailuser



 For more detailed setup and config documentation visit the VMailMgr
 website  <http://em.ca/~bruceg/VMailMgr/>

 3.5.  Starting the daemons

 Start Qmail daemons

   /etc/rc.d/init.d/qmail start
   /etc/rc.d/init.d/pop3d start
   /etc/rc.d/init.d/smtp start
   /etc/rc.d/init.d/qmqpd start (optional)
   /etc/rc.d/init.d/qmtpd start (optional)



 Start VMailMgr daemon

   /etc/rc.d/init.d/vmailmgrd start



 Start Courier-imap damon

   /etc/rc.d/init.d/courier-imap start



 3.6.  Some considerations left

 Qmail and the Maildirs may cause some email apps that run locally to
 not work. Visit the Qmail website  <http://www.qmail.org> for details
 on email apps that have been patched to work with Maildirs.

 Courier-imap is not as widely used as Cyrus or UWash imap servers.  As
 such, you may suffer from minor incompatibilities. Courier-imap is
 extremely well written, and tries to comply with the imap definition
 even if it means some imap clients wont work well. For details visit
 the Courier-imap website  <http://www.inter7.com/courierimap/>.

 3.7.  Known bugs

 None yet.



 3.8.  The final word

 Im tired, and wonder if anyone will ever use this, but I'm happy its
 done.  I'm sure if you have read this far your tired too. Well, all I
 can hope is that you have Qmail, VMailMgr and Courier-imap working. If
 so, Enjoy!  If not, bummer!

 O.K. readers, you're done for today. Feel free to send me your
 feedback, eternal gratitude, flowers, ecash, cars, oil sources etc.