fml4からfml8への移行
#日記 #2020年 #11月2日 2020年11月-2 10:59
#fml #MLドライバ #fml8
移行作業中、調査中
Webの進化により新しいコミュニケーション媒体が登場した結果、ML(機械学習ではなくて、メーリングリスト)によるコミュニケーションや情報の蓄積というのは廃れてしまったように思われる。多くのMLドライバが、保守されなくなりつつある。このような状況ではあるが、私は、未だにメーリングリストサーバを自前で運用している。
私が使用している範囲で、現在も保守されているMLドライバは、mailmanか fml8くらいとなってしまった。
fmlについては、私は未だにfml4ベースのメーリングリストサーバを使用していたが、perl5の最新版でfml4を運用するのは困難になってしまっている。古いperlを入れてfmlを運用することは決して難しくはないが、メンテナンスの手間を考慮して、perl5の最新版で動作確認のとれているfml8に移行することにした。
調べてみると、fml8のドキュメントはfml4に比べてかなり不足していることが分かった。そこで、fml4からfml8への移行方法についてまとめることにした。
fml4 のMLを fml8 形式のMLへ変換する
fml4 から fml8 への移行(1) fml8 形式への変換に記載のmergemlコマンド
自動変換された config.cf は、ほとんどの内容がコメントアウトされており、そのまま動かすと、元の設定を再現しない可能性があると思われた。そこで、私は ml_name, ml_domain のコメントを外して、かつ、サブジェクトの書き換えルールを手動で追記して、正常動作を確認した。(これらの設定修正をせずに動作するかどうかのテストは未実施)
過去メールはスプールにコピーされない。手動でコピーする必要あり。 spool/ml/gehoML/spool以下にコピーし、owner をfmlに変更する(owner以外にpermissionがないのでI 重要。)。
fml4 と fml8 の相違
fml4からfml8へのアーキテクチャの変更は、sendmailとpostfixの違いに相当する、とのこと。
fml8の機能
過去メールの保存
$ml/spoolにメールを保存するには、、、
コマンド
過去メールの取寄せコマンド
メール本文に、下記のように複数のgetコマンドを改行区切りで記載してコマンド受け付けアドレスに送る。getの引数は、過去メールの通し番号。
code:txt
get 2-5
get 12
fml8のカスタマイズ
http://eurekamigoreng.blog.fc2.com/blog-date-201807.html
管理コマンドを有効化: 私はまだ内容を理解してない
use_article_filter = no しないと UTF-8な日本語メールや、MIME添付ファイルの送信ができないらしい。noにしたら、制限なくなることは確認した。ただし、添付ファイルのサイズ制限はしたいので、その方法を調査中。
check_header_size check_body_size permitとかの変数は関係ある?使い方は未調査
fml8設定用変数一覧
fml4に比べるとカスタマイズ用の変数が少なくなっている。その代わり、hookを使ってカスタマイズして欲しいようだ。
Message-IDをMLサーバ上で新規に作って付与する場合(fml4では動作変更用の変数が用意されていたが、fml8では下記の通り)
code: config.ph
$article_header_rewrite_end_hook = q{
my $header = $curproc->article_message_header()
#Message-IDを新規に生成
my $ml_name = $config->{ ml_name };
my $ml_domain = $config->{ ml_domain };
#IDにlocatimeを付与
my @datetime = localtime;
my $new_id = sprintf("%s-%s\@%s", $ml_name, join("", @datetime), $ml_domain);
# X-Message-Id にオリジナルの Message-Id をバックアップしておく
$header->add('X-Message-Id', $header->get('Message-Id'));
# Message-Id を入れ換える
$header->replace('Message-Id', $new_id);
};
上記は、https://www.fml.org/software/fml8/Documentation/ja/tutorial/customize.header.html#AEN2865 のサンプルコードをほんの少しだけ修正($$(プロセスID?)をlocaltimeに変更)。(しかし、perlが文末に ';'が必要ってことを忘れていて、なかなかお試しコードがperlコマンドで走らず手間取った。いきなりconfig.phを書き換えなくて良かったけど。)
あと、MTAの設定変更をした場合、うっかりオープンリレーになる場合あるかも知れないので、チェッカーを通す。
http://check.jippg.org/ (DBチェックの方は古いかも。でも、サービスを継続してくれてるのはありがたいです。)