Note: This article doesn't cover all options of qmail installation & configuration. Please refer
Life with qmail for a complete guide in qmail.
This howto was designed as a quick start or reference guide to a simple Qmail install.
1. Qmail
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.
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.
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. Required packages
There are four packages needed for this qmail install.
2.1 netqmail-1.06.tar.gz
qmail is a secure, reliable, efficient, simple message transfer agent. It is designed for typical Internet-connected UNIX hosts. As of October 2001, qmail is the second most common SMTP server on the Internet, and has by far the fastest growth of any SMTP server.
2.2 ucspi-tcp-0.88.tar.gzIt is a tool similar to inetd. ucspi-tcp listens in 25 port and spawns qmail-smtpd when required. ucspi-tcp stands for Unix Client Server Program Interface for TCP.
2.3 daemontools-0.76.tar.gz
daemontools is actually a tool to manage & monitor daemons linux. It is used in qmail as well to manage qmail daemons.
2.4 checkpassword-0.90.tar.gz
checkpassword provides a simple, uniform password-checking interface to all root applications. It is suitable for use by applications such as login, ftpd, and pop3d.
3. Qmail Install
3.1 Get the files
Download files and place them into the /usr/local/src directory. This document refers to that directory for install procedures.
========================================================
cd /usr/local/srcwget http://www.qmail.org/netqmail-1.06.tar.gzwget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gzwget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
=========================================================
Now create /package directory and move daemontools-0.76.tar.gz to /package.
=========================================================
mkdir /packagemv -iv /usr/local/src/daemontools-0.76.tar.gz /package
=========================================================
3.2 Create users and groups
Run following commands one by one, to create required users & groups
==============================================
groupadd nofilesuseradd -g nofiles -d /var/qmail qmailduseradd -g nofiles -d /var/qmail qmailluseradd -g nofiles -d /var/qmail qmailp
useradd -g nofiles -d /var/qmail/alias aliasgroupadd qmailuseradd -g qmail -d /var/qmail qmailquseradd -g qmail -d /var/qmail qmailruseradd -g qmail -d /var/qmail qmails
==============================================
3.3 Compile & Install
Untar the Qmail source
============================
cd /usr/local/srctar -xzvf netqmail-1.06.tar.gz
===========================
Compile the source
===================================
cd /usr/local/src/netqmail-1.06
make setup check
===================================
4. Configure Qmail
4.1 Post Installation setup
Post installation configuration can be done by running following script.
=============
./config;==============
4.2 Configure Qmail aliases.
Create a user named "adminmails" to receive all administrator emails.
================================================
useradd adminmails;
cd ~alias; echo "adminmails" > .qmail-postmaster; echo "adminmails" > .qmail-mailer-daemon; echo "adminmails" > .qmail-root; echo "adminmails" > .qmail-postmaster;echo "adminmails" > .qmail-abuse;chmod 644 ~alias/.qmail* ;
==============================================
Create Maildir for "adminmails" user
========================================su - adminmails/var/qmail/bin/maildirmake ~/Maildir========================================
4.3 Configure Qmail to use Maildir
Now we need to configure qmail to use the Maildir Format.
Create "/var/qmail/rc" with following contents.
====================================================================================#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
=====================================================================================
Make "/var/qmail/rc" executable
============================
chmod 755 /var/qmail/rc
============================
Create "/var/qmail/control/defaultdelivery" file.
=====================================================
echo ./Maildir/ >/var/qmail/control/defaultdelivery
=====================================================
4.4 Replace Sendmail binaries
======================================================
chmod 0 /usr/lib/sendmail ; chmod 0 /usr/sbin/sendmail ; mv /usr/lib/sendmail /usr/lib/sendmail.bak ; mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ; ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ; ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
=======================================================
5. Install ucspi-tcp
Untar the ucspi-tcp source.
=============================================================cd /usr/local/src/tar -xzvf ucspi-tcp-0.88.tar.gz
==============================================================
Patch ucspi-tcp with "ucspi-tcp-0.88.errno.patch" provided with net qmail.
==============================================================================
cd ucspi-tcp-0.88patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
===============================================================================
Install ucspi-tcp.
========================
makemake setup check
=========================
6. Install checkpassword
Untar checkpassword source.
=========================================cd /usr/local/srctar -xzvf checkpassword-0.90.tar.gz=========================================
Patch checkpassword with "checkpassword-0.90.errno.patch" provided with net qmail.
================================================================
cd checkpassword-0.90patch < /usr/local/src/netqmail-1.06/other-patches/checkpassword-0.90.errno.patch
================================================================
Install checkpassword.
==================================make ; make setup check==================================
7. Install daemontools
Untar the daemontools source
=========================================
cd /packagetar -xzvf daemontools-0.76.tar.gz
=========================================
Patch daemontools with "daemontools-0.76.errno.patch" provided with net qmail.
=========================================================================cd /package/admin/daemontools-0.76/srcpatch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch=========================================================================
Install daemontools
====================
cd ..package/install
====================
8. Qmail Startup script
The "qmailctl" script is used as startup script for qmail.
8.1 Download qmailctl
===========================================================cd /var/qmail/bin/wget http://lifewithqmail.org/qmailctl-script-dt70===========================================================
8.2 Setup qmailctl
========================================
mv -iv qmailctl-script-dt70 qmailctlchmod 755 /var/qmail/bin/qmailctlln -s /var/qmail/bin/qmailctl /usr/bin
========================================
8.3 Modify qmailctl for qmail-pop3d
Add following lines to qmailctl's "start" section.
========================================================================
if svok /service/qmail-pop3d ; then svc -u /service/qmail-pop3d /service/qmail-pop3d/log else echo qmail-pop3d supervise not running fi
========================================================================
Add following lines to qmailctl's "stop" section.
======================================================================
echo " qmail-pop3d" svc -d /service/qmail-pop3d /service/qmail-pop3d/log
======================================================================
Add following lines to qmailctl's "stat" section.
=======================================
svstat /service/qmail-pop3d svstat /service/qmail-pop3d/log
=======================================
Add the following lines to qmailctl's "pause" section.
=======================================
echo "Pausing qmail-pop3d" svc -p /service/qmail-pop3d
=======================================
Add following lines to qmailctl's "cont" section.
=======================================
echo "Continuing qmail-pop3d" svc -c /service/qmail-pop3d
=======================================
Add following lines to qmailctl's "restart" section.
========================================================= echo "* Restarting qmail-pop3d." svc -t /service/qmail-pop3d /service/qmail-pop3d/log=========================================================
9. Setup qmail-send & qmail-smtpd
9.1 Create supervise script directories for qmail daemons
Create supervise directories for qmail-send, qmail-smtpd & qmail-pop3d.
======================================================mkdir -p /var/qmail/supervise/qmail-send/logmkdir -p /var/qmail/supervise/qmail-smtpd/logmkdir -p /var/qmail/supervise/qmail-pop3d/log======================================================
9.2 Create supervise script for qmail-send
Create supervise script for qmail-send with name "/var/qmail/supervise/qmail-send/run".
The file should have following contents.
====================
#!/bin/shexec /var/qmail/rc
====================
9.3 qmail-send log daemon supervise script
Create qmail-send log daemon supervise script with name "/var/qmail/supervise/qmail-send/log/run".
The script should have following contents
======================================================================================
#!/bin/shexec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
======================================================================================
9.4 qmail-smtpd daemon supervise script
Create qmail-smtpd daemon supervise script with name "/var/qmail/supervise/qmail-smtpd/run".
The script should have following contents
=========================================================================================
#!/bin/shQMAILDUID=`id -u qmaild`NOFILESGID=`id -g qmaild`MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`LOCAL=`head -1 /var/qmail/control/me`if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in echo /var/qmail/supervise/qmail-smtpd/run exit 1fiif [ ! -f /var/qmail/control/rcpthosts ]; then echo "No /var/qmail/control/rcpthosts!" echo "Refusing to start SMTP listener because it'll create an open relay" exit 1fiexec /usr/local/bin/softlimit -m 9000000 \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
==========================================================================================
Create the concurrencyincoming control file.
======================================================
echo 20 > /var/qmail/control/concurrencyincomingchmod 644 /var/qmail/control/concurrencyincoming
======================================================
9.5 qmail-smtpd log daemon supervise script
Create qmail-smtpd log daemon supervise script with name "/var/qmail/supervise/qmail-smtpd/log/run".
The script should have following contents
========================================================================================
#!/bin/shexec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
========================================================================================
9.6 qmail-pop3d daemon supervise script
Create qmail-pop3d daemon supervise script with name "/var/qmail/supervise/qmail-pop3d/run" .
The script should have contents.
=================================================================================
#!/bin/shexec /usr/local/bin/softlimit -m 9000000 \ /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \ FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1
=================================================================================
Please replace FQDN with fully qualified domain name of the POP server
E.g: pop.example.com
9.7 qmail-pop3d log daemon supervise script
Create qmail-pop3d log daemon supervise script with name "/var/qmail/supervise/qmail-pop3d/log/run".
The script should have following contents
====================================================================#!/bin/shexec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \ /var/log/qmail/pop3d====================================================================
9.8 Create the log directories and add execute permissions on the run scripts.
=====================================================mkdir -p /var/log/qmail/smtpdmkdir /var/log/qmail/pop3dchown qmaill /var/log/qmailchown qmaill /var/log/qmail/smtpdchown qmaill /var/log/qmail/pop3dchmod 755 /var/qmail/supervise/qmail-send/runchmod 755 /var/qmail/supervise/qmail-send/log/runchmod 755 /var/qmail/supervise/qmail-smtpd/runchmod 755 /var/qmail/supervise/qmail-smtpd/log/runchmod 755 /var/qmail/supervise/qmail-pop3d/runchmod 755 /var/qmail/supervise/qmail-pop3d/log/run======================================================
10. Create soft link for the daemons in /service folder
10.1 Add qmail-send to /service folder
=================================================================ln -s /var/qmail/supervise/qmail-send /service/qmail-send=================================================================
10.2 Add qmail-smtpd to /service folder
===================================================================ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd===================================================================
10.3 Add qmail-pop3d in /service folder.
=====================================================================ln -s /var/qmail/supervise/qmail-pop3d /service/qmail-pop3d=====================================================================
Note 1: The /service directory is created when daemontools is installed.
Note 2: The qmail system will start automatically shortly after these links are created.
If you don't want it running now, do: qmailctl stop
Reference
1.
http://tac-au.com/howto/qmail-mini-HOWTO.txt
2.
http://www.lifewithqmail.org/lwq.html
Important Notice
1. Rights to portions in red colour belongs to
Life with qmail and those portions are licensed under OpenContent License, version 1.0.
2. This article as a whole is also licensed under OpenContent License, version 1.0.
3. See
http://www.opencontent.org/opl.shtml for the full license.