setting up mailman, postfix, lighttpd
Fri, 25 May 2012 07:42 categories: debianI was worried about having to learn hundreds of configuration options to properly set up mailman, postfix and lighttpd on Debian Squeeze. Turned out, that except for lighttpd it all works out of the box.
apt-get install postfix
When asked by debconf, I specified lists.mister-muffin.de as the fully qualified domain name.
apt-get install mailman
newlist mailman
The newlist
command reminds me that I have to add its output to
/etc/aliases
. After doing so, I have to run:
newaliases
From now on, I can add any mailinglist by running newlist
, editing
/etc/aliases
and running newaliases
.
Mailinglists can also be added through the mailman webinterface but one still
has to put the according entries into /etc/aliases
.
Following is a working lighttpd configuration that works out of the box with the default settings of mailman on Debian squeeze.
This was the only part that caused me some headaches.
server.modules += ("mod_alias", "mod_cgi", "mod_accesslog")
$HTTP["host"] == "lists.mister-muffin.de" { accesslog.filename =
accesslog.filename = "/var/log/lighttpd/lists-access-log"
alias.url += (
"/cgi-bin/mailman/private/" => "/var/lib/mailman/archives/private/",
"/cgi-bin/mailman/public/" => "/var/lib/mailman/archives/public/",
"/pipermail/" => "/var/lib/mailman/archives/public/",
"/cgi-bin/mailman/"=> "/var/lib/mailman/cgi-bin/",
"/images/mailman/" => "/usr/share/images/mailman/",
)
cgi.assign = (
"/admin" => "",
"/admindb" => "",
"/confirm" => "",
"/create" => "",
"/edithtml" => "",
"/listinfo" => "",
"/options" => "",
"/private" => "",
"/rmlist" => "",
"/roster" => "",
"/subscribe" => "")
}
server.document-root = "/var/www"
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
index-file.names = ( "index.html" )
server.dir-listing = "disable"
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
As a bonus, I wanted to import my existing email exchange with my GSoC mentors into the mailinglist. First I was planning on manually sending the email messages to the list, but a much easier option is to just import them in mbox format.
To extract all email messages, I first wrote the following python snippet:
import mailbox, itertools
box = mailbox.mbox('~/out')
for message in itertools.chain(mailbox.mbox('~/sent'), mailbox.Maildir('~/Mail/Web/', factory=None)):
if (("wookey" in message.get('to', "").lower()
or "wookey" in message.get('cc', "").lower()
or "wookey" in message.get('from', "").lower()
or "abate" in message.get('to', "").lower()
or "abate" in message.get('cc', "").lower()
or "abate" in message.get('from', "").lower())
and not message['subject'][0] == '['
and not message['subject'] == "multistrap"):
box.add(message)
box.close()
It iterates through messages in my mbox and maildir mailboxes, filters them for
emails by wookey or pietro, strips away some messages I found to not be
relevant and then saves the filtered result into the mbox mailbox ~/out
.
It is important to specify factory=None
for the Maildir parser, because it
otherwise defaults to rfc822.Message
instead of MaildirMessage
.
Also do not forget to call box.close()
. I initially forgot to do so and ended
up with missing messages in ~/out
.
I then copy the archive in its place:
scp out lists.mister-muffin.de:/var/lib/mailman/archives/private/debian-bootstrap.mbox/debian-bootstrap.mbox
Another thing that initially caused me trouble, was that the mbox didnt have the correct permissions due to the scp. Fixing them:
chown -R list:www-data /var/lib/mailman/archives/private/
chmod 664 /var/lib/mailman/archives/private/debian-bootstrap.mbox/debian-bootstrap.mbox
And update the mailman archive like this:
sudo -u list /usr/lib/mailman/bin/arch debian-bootstrap /var/lib/mailman/archives/private/debian-bootstrap.mbox/debian-bootstrap.mbox
Initially I was running the above command as root which screws up permissions as well.