mailman

Hier, heute mal Leichenfledderei :) Sprich, es gibt einen Beitrag, der auf unserer internen Dokumentation basiert, aber etwas erweitert wird. In Das Backup hatten wir schon angemerkt, dass wir fuer uns intern eine Mailingliste nutzen. Da wir ja beinahe alles selber machen moechten, haben wir dafuer mailman bei uns im Einsatz. Mailman ist eine Software fuer die Erstellung und Verwaltung von Mailinglisten. Gibt es eigentlich Alternativen?

Sowohl die Einrichtung, als auch die Wartung und Pflege von mailman ist erfreulich uebeschaubar. Wenn man es halt mal gemacht hat. Vor der Installation legen wir in unserem DNS noch einen A- und MX-Record fest, da wir gerne eine eigene Subdomain fuer die Listen nutzen moechten. Wir nehmen dafuer „lists“. Anschliessend installieren wir mailman via root@server:~# aptitude install mailman. Im Rahmen der Installation koennen wir ein paar „Sprachpackete“ auswaehlen und werden darauf hingewiesen, dass wir, nach der Installation, noch newlist mailman laufen lassen sollen.

Erst einmal wollen wir aber schauen, dass wir mailman spaeter auch via Brower erreichen koennen.

root@server:~# ln -s /etc/mailman/apache.conf /etc/apache2/sites-enabled/mailman
root@server:~# apache2ctl configtest
root@server:~# apache2ctl graceful

Das Apache-Modul cgi braucht es auch noch. Wenn das also nicht aktiv ist, dran denken. Nun wollen wir Postfix noch anpassen. Dafuer nehme ich folgende Anpassungen in der /etc/postfix/main.cf vor.

relay_domains = lists.ptlx.de
transport_maps = hash:/etc/postfix/transport
mailman_destination_recipient_limit = 1
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases

Bei bestehender Postfix-Konfiguration mag das natuerlich etwas anders aussehen, bzw. es koennte schon der ein oder andere Eintrag bei euch vorhanden sein. Damit wir spaeter keine „loops back to myself“-Meldungen erhalten, passen wir in der /etc/postfix/main.cf noch das my destination an und fuegen die Domain, die wir auch bei relay_domains angegeben haben (siehe oben), hinzu.

In der /etc/postfix/master.cf sollten wir nun folgender Eintrag zu finden sein.

mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}

Nun erstellen wir noch die Datei /etc/postfix/transport, tragen dort list.ptlx.de mailman: ein und erstellen/aktualisieren anschliessend via postmap -v /etc/postfix/transport (-v fuer verbose) die sogenannte „Postfix lookup table“. Soweit, so Postfix.

Nun noch etwas fuer mailman konfigurieren (warum wir uns heute ja auch getroffen haben). Wir haben fuer uns folgendes in der /etc/mailman/mm_cfg.py eingestellt:

DEFAULT_URL_PATTERN = 'https://%s/cgi-bin/mailman/'
DEFAULT_EMAIL_HOST = 'lists.ptlx.de'
DEFAULT_URL_HOST   = 'www.ptlx.de'
MTA='Postfix'

Dann noch via newlist mailman die, nennen wir es mal, „initiale“ Liste anlegen und anschliessend die Aliases in /etc/aliases einstellen.

mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Was zu unserem Glueck nun noch fehlt ist die Initialisierung der sogenannten „alias-datenbank“ und der Neustart von Postfix (sicher ist sicher).

root@server:~# newaliases
root@server:~# /etc/init.d/postfix restart

Statt newaliases kann im Uebrigen auch sendmail -bi verwendet werden.

Im Rahmen der Erstellung der ersten Liste sollte es nun auch eine Mail an die Adresse gehen, die hier fuer „Enter the email of the person running the list:“ eingetragen habt. Dort findet sich dann unter anderem dem Link, ueber den mailman nun via http(s) konfiguriert werden kann. So, fertig :)

Migration?

Wenn mailman laeuft ist die Migration einer Liste recht einfach. Dafuer werden erst einmal alle Listendaten auf dem alten Server eingesammelt…

root@server:/var/lib/mailman# tar cfz /root/archiv.tar.gz archives/
root@server:/var/lib/mailman# tar cfz /root/data.tar.gz data/
root@server:/var/lib/mailman# tar cfz /root/lists.tar.gz lists/

…und nach dem Uebertragen auf den neuen Server koennen die Daten dort entpackt und an die richtige Stelle gebracht werden.

root@foo ~ # tar xzf archiv.tar.gz
root@foo ~ # tar xzf data.tar.gz
root@foo ~ # tar xzf lists.tar.gz
root@foo ~ # mv archives/* /var/lib/mailman/archives/
root@foo ~ # mv data/* /var/lib/mailman/data/
root@foo ~ # mv lists/* /var/lib/mailman/lists/

Nachfolgend sollte noch ein check_perms ausgefuehrt werden, der die Berechtigungen auf fuer mailman wichtige Verzeichnisse prueft. Die Option -f besagt, dass falsch gesetzte Berechtigungen auch gleich in Ordnung gebracht werden.

root@foo ~ # check_perms -f
root@foo ~ # /etc/init.d/mailman start

Probleme?

Was kann passieren oder ist vielleicht noch interessant zu wissen? Mir ist schon passiert, dass ich mailman nicht gaengig bekommen habe und in der /etc/mail.log die Meldung postfix/smtpd[25778]: fatal: open database /var/lib/mailman/data/aliases.db: No such file or directory zu sehen war. Dann muss die Datei aliases.db noch angelegt werden.

root@server /srv/dav # touch /var/lib/mailman/data/aliases.db
root@server /srv/dav # postalias /var/lib/mailman/data/aliases.db
root@server /srv/dav # /etc/init.d/postfix restart
 * Stopping Postfix Mail Transport Agent postfix                                                                 [ OK ]
 * Starting Postfix Mail Transport Agent postfix                                                                 [ OK ]

Wenn nach der Migration in der Mailingliste der konfigurierte Hostname nicht mehr stimmt, kann das wie folgt in Ordnung gebracht werden.

root@server /var/lib/mailman/bin $ ./withlist  -l -r fix_url LISTNAME -u foo.ptlx.de -v
Importing fix_url...
Running fix_url.fix_url()...
Loading list hosting (locked)
Setting web_page_url to: http://foo.ptlx.de/cgi-bin/mailman/
Setting host_name to: lists.ptlx.de
Saving list
Finalizing

Und um eine Mailingliste von http auf https, oder umgekehrt, zu bringen kann man wie folgt vorgehen. Erst einmal den DEFAULT_URL_PATTERN in der /etc/mailman/mm_cfg.py anpassen. Damit werden alle neuen Listen schon mal wie gewuenscht erstellt. Fuer alte Listen muss man noch dann nur noch fix_url aufrufen.

root@server /var/lib/mailman/bin $ withlist -l -a -r fix_url

Wobei die Optionen -l, -a und -r fuer lock list, all lists und run module stehen.

Zurück zur Uebersicht