Innnards: GNU Mailman: mailing list software of the gods, but tricky to upgrade

As the author of the WWW FAQ, I regularly answer questions about the workings of the Web. If a question is frequently asked, I simply add an article to the FAQ. But sometimes a question is more detailed, more in-depth— not really a FAQ, but still of interest to others. You'll find those questions, with my answers, here in Innards along with commentary on other web-technology-related topics.


I run a number of mailing lists, for myself and a small number of hosting customers. For the most part, I recommend GNU Mailman for this purpose. I've found it vastly more stable than other mailing list managers. The archive features well. Users can subscribe and unsubscribe painlessly. An extensive installation manual is provided. Two thumbs up. But.

Today I needed to change the admin password of a mailing list, without knowing it. And although I'm obviously the administrator, I couldn't figure out how the heck to do that. A bit of googling revealed clear directions... to do this with GNU Mailman 2.1. But I was still on the 2.0 series.

Oh well, probably time for an upgrade anyway, right? So I fetched version 2.1.6 and started reading the documentation. Hmm, almost nothing here about upgrades, just a quick note that they work. Ooo-kay. Let's go to it then: configure, make, make install, we're done. Right?

Well no, not quite. I hit two snags:

1. A fairly nasty error message in bin/update, which converts your existing databases to the 2.1.x format:

during Traceback (most recent call last):
File "bin/update", line 781, in ?
errors = main()
File "bin/update", line 705, in main
File "bin/update", line 584, in update_pending
addr = data[0].address
AttributeError: 'str' object has no attribute 'address'

I threw in a print statement and found out that data[0] is just a string... at least in the version I was upgrading from. So I fixed it trivially:

addr = data[0]

And submitted a bug report to the GNU Mailman team. A better fix, I'm sure, would check whether data[0] is actually an instance of str first before treating it as one.

Now everything looked great... but no mail would go out. Why? It turns out that version 2.0.x used a cron job to manage the delivery of mail, and version 2.1.x doesn't. Version 2.1.x has its own init scripts, just like those in /etc/init.d.

You can find this information in the Mailman FAQ... but not where it needs to be: in a clearly labeled "UPGRADE" section of the installation manual.

Update 10/10/2005: I found the upgrade documentation. It's in a text file called UPGRADING in the top level of the distribution. OK, I'm a little embarrassed that I didn't spot that sooner! But it still makes sense to include this information in that pretty installation manual that draws your attention right off the bat. And, of course, the bug I found is still a bug.