Debianにおけるmailman2.1 -> 3への移行

Pocket

mailman2はpython2で書かれており、Debian bullseye(11)ではもうmailman3しかパッケージがありません。かつ、パッケージ側でデータまわりのハンドリングは特になされないので、手動で移行作業を行う必要があります。意外とはまりどころが多かったので記録しておきます。

公式のドキュメント https://docs.mailman3.org/en/latest/migration.html

mailman3のインストール

apt install mailman3 mailman3-web
(debconfでPostrious(web UI)やhyperkitty(アーカイバ)の質問があるので適時答える)

mailman3上でのML作成

$ list_lists # ML一覧を得る
$ mailman-wrapper create ${ML-NAME}@example.com # mailman3ではドメイン名も必要

MLの一時停止 (一時的に新規メールを受け付けないため)

自分の場合postfixだったのでmain.cfからmailmanの設定を削除した。

import21の実行 (subscriber等設定のコピー)

$ mailman-wrapper import21 ${ML-NAME}@example.com /var/lib/mailman/lists/${ML-NAME}/config.pck

場合によってはimport21が失敗する。自分の場合はその原因が bounce_infoが空でなかったのが原因(参考: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/JEPMB3HW4FI57EUMOST4L7BD2ILIIS3P/)だったので、手動で削除した。

$ withlist ${ML-NAME} # ここでPython interactive modeになる
$ m.Lock()
$ m.bounce_info = {}
$ m.Save()
$ ^D

アーカイブの移行 (pipermail -> hyperkitty)

$ /usr/share/mailman3-web/manage.py hyperkitty_import -l ${ML-NAME}@example.com /var/lib/mailman/archives/private/${ML-NAME}.mbox/${ML-NAME}.mbox
(運が悪いとcodec周りで変換できずエラーになるメールが混じるが処理は中断されない)

web設定の修正 (apacheの場合)

# /etc/apache2/conf-available/mailman3.conf
# 末尾の / を削除
# ref: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=996105
# https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/USXUYZYB5KIXT37APMCOAUZLKBRPARTL/
# これがないとウェブのリンク先が正しく辿れない
--- foo 2021-10-13 16:27:11.000000000 +0900
+++ mailman3.conf       2021-10-12 19:15:31.000000000 +0900
@@ -8,5 +8,5 @@
 <IfModule mod_proxy_uwsgi.c>
        ProxyPass /mailman3/favicon.ico !
        ProxyPass /mailman3/static !
-       ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/
+       ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost
 </IfModule>

hyperkittyの設定変更 (API key設定)

$ grep MAILMAN_REST_API_PASS /etc/mailman3/mailman3-web.py # API鍵情報のチェック
$ edit /etc/mailman3/mailman-hyperkitty.cfg
(api_key: MAILMAN_REST_API_PASSの内容 に書き換え)

Django管理UIからドメイン名の修正 (デフォルトはexample.com)

  • http://${site}/mailman3/admin/ にアクセス
  • サイト (http://${site}/mailman3/admin/sites/site/) の「変更」を選択
  • example.com があるのでそれを自サイトに変更

mailman3の有効化 (postfix)

# /etc/postfix/main.cf
# ref: /usr/share/doc/mailman3/README.Debian
# 他のMTAについても記載あり
# Mailman related settings
#owner_request_special = no
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp
local_recipient_maps = proxy:unix:passwd.byname $alias_maps hash:/var/lib/mailman3/data/postfix_lmtp
relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}} hash:/var/lib/mailman3/data/postfix_domains

ACCOUNT_DEFAULT_HTTP_PROTOCOLの設定 (optional)

Debianのmailman3-webはデフォルトでweb UIはhttpsを想定しているので、httpしかない場合 /etc/mailman3/mailman-web.py の ACCOUNT_DEFAULT_HTTP_PROTOCOL を http にする。

UI/アーカイブの確認

http://${site}/mailman3/ にアクセスする。debconfで入力した管理者情報を入れてログインしようとすると、一度確認メールが送られるので注意。

検索インデックスの更新

# /usr/share/mailman3-web/manage.py update_index # mailman3向けのdjango-adminに相当するのがこの manage.py になる

漏れなどがあればご指摘ください。

2021-10-14: ACCOUNT_DEFAULT_HTTP_PROTOCOLと検索インデックスについて追記。