I wrote this back in the dark ages, when Mailman did not support virtual domains. According to the bullet list of features at the Mailman home page, Mailman now supports virtual domains. I'm not sure when this support was added, but probably around 2.0 or 2.1. I strongly suggest you try using the latest version of Mailman, and investigating the native support for virtual mail domains, rather than following this recipe.
If you want to add Mailman support to a qmail+vpopmail setup, there are a few things to be aware of, especially since you probably want each virtual domain to have their own Mailman setup. This is a quick guide that describes how I got things working, for most values of 'working'.
All examples, unless specified, assume you are setting up Mailman support for "foo.com". Where literal steps are presented, be sure to replace "foo" and "foo.com" references with appropriate values.
Once you've downloaded and unpacked the Mailman source code, you need to configure it. You will need to configure and install it for each virtual domain that will be using Mailman. You need to do this so that email@example.com is a different list from firstname.lastname@example.org. To avoid a lot of administrative overhead, you will need to create new mail domains for the Mailman lists. For example, if you want to add Mailman support to foo.com, you will be using the mail domain lists.foo.com.
This recipe assumes you will be using /home/mailman as the Mailman top-level directory. If you prefer, you can can use /var/mailman or any other directory. First, create the mailman user and directory:
useradd -d /home/mailman mailman groupadd mailman chgrp mailman /home/mailman chmod a+rx,g+ws /home/mailman
The rest of the steps will need to be repeated for each domain that you want to support Mailman on.
You will need to create a directory for each domain that will have Mailman lists:
mkdir /home/mailman/foo chgrp mailman /home/mailman/foo chmod a+rx,g+ws /home/mailman/fooNow you need to configure and compile the mailman software. Some versions of Redhat require /usr/bin/python to be a specific version, which is why /usr/local/bin/python is specified:
./configure --prefix=/home/mailman/foo \ --with-mail-gid=vchkpw \ --with-cgi-gid=apache \ --with-python=/usr/local/bin/python
Build and install the software once the configure script is done.
Edit /home/mailman/foo/Mailman/mm_cfg.py. Add the following lines to the end of the file:
DEFAULT_EMAIL_HOST = 'lists.foo.com' DEFAULT_URL_HOST = 'lists.foo.com' add_virtualhost('lists.foo.com', 'lists.foo.com') ALLOW_SITE_ADMIN_COOKIES = 1
Set a password for list creation:
cd /home/mailman/foo bin/mmsitepass
From the Mailman source directory, copy the qmail-to-mailman.py script into the mailman directory for foo.com:
cp /usr/local/src/mailman-2.1/contrib/qmail-to-mailman.py \ /home/mailman/foo chown mailman.mailman /home/mailman/foo/qmail-to-mailman.py chmod a+rx /home/mailman/foo/qmail-to-mailman.py
Edit qmail-to-mailman.py. At the top of the file, edit the two configuration variables:
MailmanHome = "/home/mailman/foo"; MailmanOwner = "email@example.com";
Next, look for the line that looks like local = re.sub("^mailman-","",local). Change it to read:
local = re.sub("^lists.foo.com-","",local)
Close your editor, making sure you've saved the script.
Next, you need to start the Mailman queue handler:
Put in links so that the daemons will be started when the system is booted up:
cp /home/mailman/foo/scripts/mailman /etc/init.d/foo-mailman ln -sf /etc/init.d/foo-mailman /etc/rc3.d/S97foo-mailman ln -sf /etc/init.d/foo-mailman /etc/rc2.d/K97foo-mailman
And lastly, set up cron jobs for Mailman maintenance:
cd /home/mailman/foo/cron crontab -u mailman -l > crontmp cat crontab.in >> crontmp crontab -u mailman contmp rm crontmp
Create a new virtual mail domain for lists.foo.com:
~vpopmail/bin/vadddomain lists.foo.com mailmanpass
Create a qmail-default file that will cause all mail to the domain to be handled by Mailman. Edit ~vpopmail/domains/lists.foo.com/.qmail-default and put this line in the file (remove the '\' character and put the whole thing on one line):
|/var/qmail/bin/preline /usr/local/bin/python \ /home/mailman/foo/qmail-to-mailman.py
That's all that should be needed by Qmail. You shouldn't even have to HUP the qmail-send process (vadddomain does that for you).
Here's a reasonable entry in your httpd.conf file:
# Mailman <VirtualHost *> ServerName lists.foo.com ServerAdmin postmaster DocumentRoot /home/mailman/foo Alias /pipermail/ /home/mailman/foo/archives/public/ ScriptAlias /mailman/ /home/mailman/foo/cgi-bin/ ErrorLog /home/mailman/foo/logs/error_log </VirtualHost>
Stop and restart your apache server for the changes to take effect.
Last modified: 2004-April-2