Migration from Mailman 2.x to Mailman 3.x


Before doing the migration, review the official migration instructions to get an overview of the procedure.

The debops.mailman role does not support installation of Mailman 2.1 and Mailman 3 on the same host. You should create a new host for the Mailman site and import the list configuration as well as the list archives from the old one. Don't remove the old Mailman 2.1 installation just yet, you might need it to modify the list configuration files in case the import doesn't work. For example, there are known issues with the bounce_info configuration not being parsable by Mailman 3. You can use the existing Mailman installation to reset these values.

Example migration steps

Here's an example migration procedure of the example-list@lists.example.org mailing list, based on the Mailman packages distributed in Debian. We assume that both hosts (old Mailman 2.x installation and new Mailman 3.x installation) are running and are accessible only from the Ansible Controller, cannot communicate directly. The procedure can be performed before the Mailman 3 website is available publicly.

Old Mailman 2.1.x host

Reset bounce information for a given list:

# Switch to 'root' account
sudo -i

# Reset bounce configuration (repeat for each list)
echo 'bounce_info = {}' > /tmp/reset_bounceinfo.py
config_list -i /tmp/reset_bounceinfo.py example-list

# Create tarball w list configuration and archives
tar -czvf /tmp/example-list.tar.gz -C /var/lib/mailman \
    lists/example-list/config.pck \

Ansible Controller

Copy the tarball between the old Mailman 2.1.x host and new Mailman 3.x host:

scp -3 old-mailman:/tmp/example-list.tar.gz \

New Mailman 3.x host

Extract the tarball contents:

cd /tmp
tar -zxvf example-list.tar.gz

Create new mailing list and import the old configuration and archives:

# Switch to 'root' account
sudo -i

mailman create example-list@lists.example.org
mailman import21 example-list@lists.example.org /tmp/lists/example-list/config.pck

# Import list archives
/usr/share/mailman3-web/manage.py hyperkitty_import \
    -l example-list@lists.example.org \

# Refresh archive index
/usr/share/mailman3-web/manage.py update_index

After these steps, you should be able to see the mailing list information in the Postorious interface, as well as the mailing list archives in HyperKitty.