tickets #70018
Updated by hellcp over 4 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