これまでメーリングリスト管理プログラムとしてMailman 2を使っていたのだが、Debian 11 (bullseye) ではなくなってしまった。
いちおうMailman 3が後継のパッケージなのだが、中身が全然違うしドキュメントが整備されていないので、移行作業にはかなり苦労した(今でも苦労している最中)。
誰かの役に立つかもしれないので、雑然とまとめておく。
1. まずMailman 3をインストールして動かすのが大変
$ sudo apt install mailman3-full
でインストールできるはずなのだが、私の場合なぜか設定スクリプトが走らなかったので明示的に実行する必要があった。
$ sudo dpkg-reconfigure mailman3
$ sudo dpkg-reconfigure mailman3-web
$ sudo dpkg-reconfigure python3-mailman-hyperkitty
設定の詳細については省略。たぶんググると出てくる。(無責任)
2. Webサーバーとしてnginxを使っている場合には設定を変更する必要あり
Mailman3ではメッセージのアーカイブもWebサーバーを経由して行われるので、その辺の設定ができていないとメッセージがアーカイブされないことになってしまう。ググると設定例がいくつか出てくるが、これがみなApacheの場合なんだな。私のようにnginxを使っている場合には、いくつか設定変更が必要。
(1) まず、Mailman3専用のホスト名を用意し、/etc/mailman3/nginx.confを適宜書き換える。Apacheと同じように、URLのサブディレクトリをMailman3に割り当てることもできるのかもしれないが、私の場合、いろいろ試してみてもうまくいかなかった。
(2) /etc/mailman3/mailman-hyperkitty.cfgで、base-urlを「
http://localhost/mailman3/hyperkitty/」から「<Webサーバーの外部URL>/hyperkitty/」に変更する。
(3) /etc/mailman3/mailman-web.pyで、MAILMAN_ARCHIVER_FROMを「('127.0.0.1', '::1')」から「('<Webサーバーの外部IPv4アドレス>', '<Webサーバーの外部IPv6アドレス>')」に変更する。
(4) 下記を実行して、変更後の設定を読み込ませる。
$ sudo systemctl reload nginx
$ sudo systemctl force-reload mailman3-web
私の場合、(3) になかなか気が付かなくて苦労した。テスト用に作ったメーリングリストにテストメッセージを送り、/var/log/mailman3/web/mailman-web.logを見ると「hyperkitty.views.mailman Access to the archiving API endpoint was forbidden from IP XXXX:XXXX:XXXX:XXXX::XXXX, your MAILMAN_ARCHIVER_FROM setting may be misconfigured」というエラーが出ていたので気が付いた。
ちなみにアーカイブされなかったメッセージは/var/lib/mailman3/archives/hyperkitty/spool/にたまって行く。つまりここに何かあるときは、アーカイブがうまくできていないことを示している。
3. Mailman 2.1からMLを移行するには
https://docs.mailman3.org/en/latest/migration.htmlに書いてある通り。
簡単に言うと、次のようにすればよい。ここではML名を「test」、ドメイン名を「example.com」としている。Mailman3ではドメイン名込みでMLを指定する必要があることに注意。
$ sudo mailman-wrapper create test@example.com
$ sudo mailman-wrapper import21 test@example.com /var/lib/mailman/lists/test/config.pck
$ sudo /usr/share/mailman3-web/manage.py hyperkitty_import -l test@example.com /var/lib/mailman/archives/private/test.mbox/test.mbox
4. その他雑多な情報
Mailman3の場合、REST APIを使ってWeb上で設定することが想定されているようで、Mailman2のように便利なコマンドは用意されていない。MLの細かい(でもないんだけど)設定を行うには、Pythonの知識が必要になってくる。
ちなみに私の場合、なぜかREST APIが使えない(「AttributeError at /postorius/lists/test.example.com/ 'NoneType' object has no attribute 'preferred_address'」などとエラーになってしまう)ので、コマンドラインからやるしかない状態。
(1) MLを非公開にする
mailman-wrapper createで作成したMLは、デフォルトで公開になっている。非公開で作成するオプションは提供されていないみたい。
mailman-wrapper import21でMailman2のMLをインポートした場合には、ちゃんと公開/非公開の設定も引き継がれる。
ちなみに公開/非公開はMailman2ではpublic/privateと呼ばれていたが、Mailman3ではadvertised/unadvertisedと呼ばれている。ややこしい。
Mailman3でMLを非公開にするには、以下のようにすればよい。
$ sudo mailman-wrapper withlist -l test@example.com
>>> m.advertised = False
>>> commit()
>>> quit()
(2) アーカイブを非公開にする
なんかMLの非公開とは別に設定しないといけないみたい。
$ sudo mailman-wrapper withlist -l test@example.com
>>> m.archive_policy = ArchivePolicy.private
>>> commit()
>>> quit()
(3) 保留されたメッセージを配送/破棄する
配送するには:
$ sudo mailman-wrapper unshunt
破棄するには:
$ sudo mailman-wrapper unshunt --delete