Project

General

Profile

tickets #70018

Updated by hellcp over 3 years ago

Because I'm lazy, I pretty much scripted the entire process of importing the mailing lists 

 on baloo with an account allowed to read subscriber lists 
 ```sh 
 #!/usr/bin/sh 

 mkdir -p /tmp/transition 
 ls /var/spool/mlmmj/ > /tmp/transition/mailing-lists 
 for i in $(cat /tmp/transition/mailing-lists); do 
   for j in /var/spool/mlmmj/$i/archive/*; do 
     cat /var/spool/mlmmj/$i/archive/$j >> /tmp/transition/$i.mbox 
   done 
   mlmmj-list -L /var/spool/$i > /tmp/transition/$i.subscribers 
   mlmmj-list -L -n /var/spool/$i > /tmp/transition/$i.nomail 
   mlmmj-list -L -o /var/spool/$i > /tmp/transition/$i.owners 
   mlmmj-list -L -m /var/spool/$i > /tmp/transition/$i.moderators 
 done 
 ``` 

 on a local machine for verification and to write $list.mapping file listing mailman list ids and $list.address file listing mailman list address, since mailing lists have to be set up manually, since mailman lacks a few essential settings when creating mailing lists by itself (we basically need to have them setup in postorius to be private, so relying on cli isn't the best of ideas) 
 ```sh 
 #!/usr/bin/sh 

 rsync --info=progress2 -r hellcp@baloo.infra.opensuse.org:/tmp/transition ./ 
 rsync --info=progress2 -r transition hellcp@mailman3.infra.opensuse.org:/tmp/ 
 ``` 

 on mailman3 with mailman user 
 ```sh 
 #!/usr/bin/sh 

 for i in $(cat /tmp/transition/mailing-lists); do 
   cd /var/lib/mailman/ 
   mailman addmember -d regular members -a /tmp/transition/$i.subscribers $(cat /tmp/transition/$i.mapping) 
   mailman addmember -d disabled /tmp/transition/$i.nomail $(cat /tmp/transition/$i.mapping) 
   cd /var/lib/mailman_webui/ 
   python3 manage.py hyperkitty_import -l $(cat /tmp/transition/$i.address) /tmp/transition/$i.mbox 
   python3 /tmp/transition/modop.py $i 
 done 
 ``` 

 and additional python script to add owners and moderators under /tmp/transition/modop.py referenced above 
 ```python 
 #!/usr/bin/python3 

 import sys 
 import os 
 import mailmanclient 

 list_name = sys.argv[0] 

 mapping = '' 

 with open('/tmp/transition/' + list_name + '.mapping') as mapping_file: 
   mapping = mapping_file.read().replace('\n', '') 

 client = mailmanclient.Client("localhost:8001", "mailman", os.environ['MAILMAN_PASSWORD']) 
 list = client.get_list(mapping) 
 with open('/tmp/transition/' + list_name + '.owners') as owners: 
   for owner in owners: 
     list.add_owner(owner) 
 with open('/tmp/transition/' + list_name + '.moderators') as moderators: 
   for moderator in moderators: 
     list.add_moderator(moderator) 
 ``` 

 For the external `$domain`s: 
 * DNS entry: A and AAAA with the IP of proxy.o.o 
 * MX DNS entries (mx*.o.o) 
 * haproxy config 
 * postfix config to ensure `$domain` mails get routed to mailman3

Back