🇩🇪 Deutsch 🇬🇧 English

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

  1. 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
    
  2. 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
    
  3. 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

  1. 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:
    
  2. Dach kann die Konfiguration der Liste importiert werden:
    #  ./config_list -i /tmp/TheList.conf TheList
    
  3. Jetzt müssen die Mitglieder importiert werden:
    #  ./add_members -r /tmp/TheList-regular.txt TheList
    #  ./add_members -d /tmp/TheList-digest.txt TheList
    
  4. 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
    
  5. 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