[ Current Issue Home | Issue #4 Home | FAQ ]��

The FreeBSD 'zine
Featured Articles: qmail
## Migrating from Sendmail on a FreeBSD System
## Nathan Underwood <>


As we talked about in last month's issue, qmail is "a secure, reliable, efficient, and simple message transfer agent." If you need a refresher on what qmail is all about, please go back and read the first article in the series. This month we are going to take a step by step and easy approach to configuring qmail on a FreeBSD system running sendmail. Before we begin, we will need a few things:

  1. The qmail source (available from )
  2. A system running FreeBSD 2.2.x - 3.x
  3. Root user access

With these items taken care of, we are ready to begin.

8 Easy steps to installing qmail

1. Unpacking the source

The first thing you will need to do is unpack the source that you have just downloaded. To do so, issue the following command:

	$ tar -zxvf qmail-1.03.tar.gz
	$ cd qmail-1.03

2. Creating our qmail directory and adding the qmail users

Now that we are in our qmail source directory, we can begin getting ready to install qmail. I highly recommend reading all (see below) of the documentation for qmail that is included with the source; it will give you a greater understanding of what we are doing in the paragraphs that follow. As root:

	# mkdir /var/qmail
	# pw groupadd nofiles
	# pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
	# pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
	# pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
	# pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
	# pw groupadd qmail
	# pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
	# pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
	# pw useradd qmails -g qmail -d /var/qmail -s /nonexistent

3. Compiling

This will install the binaries to /var/qmail and set up your rcpthosts and locals files with your machine's hostname information.

	# make setup check
	# ./config

4. System aliases

We need to create a few system aliases that qmail will use extensively. These aliases are the root, postmaster, and mailer-daemon aliases, and they must be in place for qmail to function smoothly. To create the aliases:

	# cd /var/qmail/alias
	# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
	# chmod 644 .qmail*

You will then need to tell qmail where to send the mail for these aliases by adding one or more usernames to the files. If your username on your system was "bob", and you were the only user who was going to receive root, postmaster, and mailer-daemon messages, then you would add a single line to each file in the form of "&bob", which would send all mail to root, postmaster, and mailer-daemon to user bob's mailbox (an easy way to do this would be '# echo "&bob" > .qmail-root', etc.).

5. Copying the startup script

	# cp /var/qmail/boot/home to /var/qmail/rc

This will allow qmail to be started at boot time after you have edited your /etc/rc.conf and /etc/inetd.conf files (see #8).

6. Killing the sendmail process

First we need to kill the sendmail process that is running and keep it from restarting. To begin, we must stop sendmail from running the queue. To do this, you must comment out the line 'sendmail_flags="-bd -q30m' in your /etc/rc.conf file (for FreeBSD 2.2.x - 3.0) or in your /etc/defaults/rc.conf file in FreeBSD 3.1. We also need to make sure that 'sendmail_enable="NO"' in /etc/rc.conf (all). Then, we must kill the sendmail process. Assuming you have nothing in your mail queue (if you do, wait until it is flushed to kill sendmail), execute these commands:

	# killall -STOP sendmail
	# killall -CONT sendmail
	# killall -TERM sendmail

Now we must change the permissions on the sendmail binary and move it out of the way.

	# chmod 0 /usr/sbin/sendmail
	# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

Ok, now a 'ps -aux | grep sendmail' should return nothing; sendmail has been successfully killed.

7. Killing binmail

Assuming you haven't configured qmail to use binmail for local delivery (which we haven't done here), we can safely remove the binmail binary.

	# chmod 0 /usr/libexec/mail.local

Now, comment out the comsat line in /etc/inetd.conf, and kill -HUP your inetd.

That's it; sendmail has now been shut off. However, if for some reason you do not want to use qmail or decide you want sendmail as your MTA again, simply reverse the process that we have done above and everything will be as it was.

8. Boot scripts and rebooting

Now that sendmail has been disabled and qmail is ready to go, we have to ensure that the qmail processes will start upon rebooting the machine. To begin, we need to add the line csh -cf '/var/qmail/rc &' to /etc/rc.conf so that the qmail processes will start upon booting (or rebooting) the machine. Second, we need to add a line to /etc/inetd.conf (all one line):

	smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

Lastly, we need to make qmail's "sendmail" wrapper available to various MUAs:

	# ln -s /var/qmail/bin/datemail /usr/sbin/sendmail

That's it...qmail is now configured. All we have to do now is reboot the computer. Upon restarting, do a ps -aux to make sure that all of the various qmail processes are running, and then go ahead and send yourself some mail to create a Mailbox file in your home directory. You will likely have to reconfigure your mail client (pine, mutt, elm, etc.) to look for your mail in ~/Mailbox as opposed to /var/mail/username.

Closing remarks

Now that qmail is configured, you may be saying, "I don't really see how this is any better than sendmail" or "It seems almost the same as sendmail". True, if you simply want to get your mail, then qmail doesn't necessarily stand out above sendmail; but, as we will discover in the next few issues, qmail has some very nice configuration features (not to mention the security aspect that we discussed in last month's issue) that stand heads above sendmail.

Next month we will be discussing ways in which to make the change from sendmail transparent to any users that are on your system; discussing topics such as .forward files, .qmail files, and user aliases.

Important qmail documentation to read (in /var/qmail/docs)


If you have any questions, find yourself stuck, or find a mistake in this article, please don't hesitate to email me at . I'll do my best to respond to any questions you may have regarding this article or qmail in general.


Return to Issue #4

Contact: <>
Last modified: $Date: 1999/06/26 05:33:25 $
Copyright � 1998-1999, The FreeBSD 'zine
All rights reserved.