27 Apr 2019
Mailman Mailinglisten umziehen
Alle paar Jahre kommt es vor, dass man doch seinen Maling-Listen-Server auf einen neuen Host umstellen muss. Mit dieser Anleitung verliert das seinen Schrecken.
Achtung - diese Anleitungen und Skripte sind wie immer FreeBSD-zentrisch, aber es dürfte sich unter Linux analog verhalten.
Export
- Auf dem Quell-Host die Listen anzeigen, und die Config der zu migrierenden Liste exportieren
# cd /usr/lib/mailman/bin/ # ./list_lists 3 matching mailing lists found: List-1 - Just some mailing list List-2 - Just another mailing list TheList - The list we are interested in # ./config_list -o /tmp/TheList.conf TheList
- Die Mitglieder dieser Liste exportieren: regular und digest
# cd /usr/lib/mailman/bin/ # ./list_members -o /tmp/TheList-regular.txt -r TheList # ./list_members -o /tmp/TheList-digest.txt -d TheList
- Das Listen-Archiv sichern
# cd /var/lib/mailman/archives/private # ls -lF total 32K drwxrwsr-x 12 root mailman 4.0K Jan 15 2011 List-1/ drwxrwsr-x 2 root mailman 4.0K Apr 9 2010 List-1.mbox/ drwxrwsr-x 4 root mailman 4.0K Nov 24 2010 List-2/ drwxrwsr-x 2 root mailman 4.0K Nov 23 2010 List-2.mbox/ drwxrwsr-x 55 root mailman 4.0K Sep 2 03:27 TheList/ drwxrwsr-x 2 root mailman 4.0K Apr 8 2010 TheList.mbox/ drwxrwsr-x 2 root mailman 4.0K Apr 7 2010 mailman/ drwxrwsr-x 2 root mailman 4.0K Apr 7 2010 mailman.mbox/ # tar czf /tmp/TheList-archive.tgz TheList # tar czf /tmp/TheList-mbox-archive.tgz TheList.mbox
Alle wichtigen Dateien einer Mailing-Liste sind nun nach /tmp/ exportiert. Von dort schaffen sie via scp auf den Ziel-Server, ebenfalls via scp. natürlich sind auch andere Methonden denkbar, YMMV.
Import
- Nun beginnt das importieren der Liste auf dem Ziel-Server. Dazu muss dort erst einmal die Liste angelegt werden. (–quiet verhindert, dass der Listen-Administrator per E-Mail benachrichtigt wird)
# ./newlist --quiet Enter the name of the list: TheList Enter the email of the person running the list: owner@example.com Initial TheList password:
- Dach kann die Konfiguration der Liste importiert werden:
# ./config_list -i /tmp/TheList.conf TheList
- Jetzt müssen die Mitglieder importiert werden:
# ./add_members -r /tmp/TheList-regular.txt TheList # ./add_members -d /tmp/TheList-digest.txt TheList
- Wenn man beschwingt ist, kann man auch das Listen-Archiv importieren. Das ist jedoch freiwillig
# cd /var/lib/mailman/archives/private # tar xzf /tmp/TheList-archive.tgz # tar xzf /tmp/TheList-mbox-archive.tgz
- Zum Schluss gilt es eventuell, die Berechtigungen anzupassen.
# chown -R root:mailman TheList TheList.mbox
Dieser Vorgang funktioniert, ich habe das mehrmals so durchgespielt. Handelt es sich um viele Mailinglisten, so artet das in umfangreiche Handarbeit aus. Deshalb habe ich kurzerhand diese Shell-Skripte erstellt:
Mailman-Export-Skript
Die zu Exportierenden Mailinglisten muss man aber von Hand einstellen. Und überhaupt sollte man das Skript ein bisschen verstehen. Das glieche gilt fu”r das Import-Script.
#!/usr/local/bin/bash
# commands
MPRE=/usr/local/mailman/bin
LIST_LISTS=$MPRE/list_lists
CONFIG_LIST=$MPRE/config_list
LIST_MEMBERS=$MPRE/list_members
TAR=/usr/bin/tar
#archive location
LIST_ARCHIVE=/usr/local/mailman/archives/private
#where to save export
OUT_DIR=~/lists
declare -a lists=('Baumlist' 'Bildung' )
for i in `seq 0 $(( ${#lists[@]} - 1 ))`
do
list_lower=`echo ${lists[$i]}|tr '[:upper:]' '[:lower:]'`
echo "Nr: $i - Name: ${lists[$i]} ($list_lower)"
$CONFIG_LIST -o ${OUT_DIR}/${lists[$i]}.conf ${lists[$i]}
$LIST_MEMBERS -o ${OUT_DIR}/${lists[$i]}-regular.txt -r ${lists[$i]}
$LIST_MEMBERS -o ${OUT_DIR}/${lists[$i]}-digest.txt -d ${lists[$i]}
$TAR czf ${OUT_DIR}/${lists[$i]}-archive.tgz -C ${LIST_ARCHIVE} $list_lower
$TAR czf ${OUT_DIR}/${lists[$i]}-mbox-archive.tgz -C ${LIST_ARCHIVE} ${list_lower}.mbox
done
Mailman-Import-Skript
#!/usr/local/bin/bash
#name of list host
LIST_HOST=mail.example.de
#archive location
LIST_ARCHIVE=/usr/local/mailman/archives/private
#where to get export to import
IN_DIR=~/lists
# commands
MPRE=/usr/local/mailman/bin
LIST_LISTS=$MPRE/list_lists
CONFIG_LIST=$MPRE/config_list
LIST_MEMBERS=$MPRE/list_members
NEWLIST=$MPRE/newlist
ADD_MEMBERS=$MPRE/add_members
TAR=/usr/bin/tar
# lists to handle, get with $LIST_LISTS and add which you want
declare -a lists=('Baumlist' 'Bildung' )
for i in `seq 0 $(( ${#lists[@]} - 1 ))`
do
list_lower=`echo ${lists[$i]}|tr '[:upper:]' '[:lower:]'`
echo "Nr: $i - Name: ${lists[$i]} ($list_lower)"
## newlist [options] [listname [listadmin-addr [admin-password]]]
$NEWLIST -u ${LIST_HOST} -e ${LIST_HOST} ${lists[$i]} admin@example.com secret
$CONFIG_LIST -i ${IN_DIR}/${lists[$i]}.conf ${lists[$i]}
$ADD_MEMBERS -r ${IN_DIR}/${lists[$i]}-regular.txt --welcome-msg=n ${lists[$i]}
#$ADD_MEMBERS -d ${IN_DIR}/${lists[$i]}-digest.txt --welcome-msg=n ${lists[$i]}
$TAR xzf ${IN_DIR}/${lists[$i]}-archive.tgz -C ${LIST_ARCHIVE}/
$TAR xzf ${IN_DIR}/${lists[$i]}-mbox-archive.tgz -C ${LIST_ARCHIVE}/
done