技術メモ?(暫定的、の予定です)
前置きとして。
fml、perl 関連についてちょっとかじりかけている程度の人間のメモです。
嘘の情報だと思って読んでください。
ml に問い合わせてみようかなとも思ったけど、時間がなかったのと、原因が絞り切れていないような
気がするのでとりあえずメモっておく。
意外とこっちの設定ミスなだけという状況の気がしないでもないので。
ちゃんと動かないよ、という情報がネット上に少ないようなので・・・(弱気)
majordomo でとっておいたアーカイブを fml で利用できるように作業した。
spool の移動
/var/spool/ml/listname/spool/ 以下にmajordomo のアーカイブを移動させ、
移動させたファイルを chmod 600 と、 chown fml:fml しておく。
listname-ctl@ 宛に get コマンドを送ればとりあえずは取得できるようになる。
get 123 とか。
summary の作成
fml には summary というのもあって、summary 1-100 とかすると summary(タイトルだけ)
のリストを取り寄せることができる。majordomo にはない。
これを現在の spool 以下にあるファイルを元に summary を作成することができる。
これが、/usr/local/fml/bin/gen_summary.pl である。
本来は、summary が壊れたときに作り直すことが目的?
今日ハマったのは
「gen_summary.pl で日本語タイトルがデコードされない」
という現象。正常に実行終了されるがデコードされてない。
これがデコードされていないと、summary コマンドで一覧取得したときに読めない。
また、1通1通投稿されるたびに追加される summary はちゃんとデコードされてるので、
古い部分だけがそのままで残ってしまう。
半日以上かけて追いかけて原因は多分、/usr/local/fml/libMIME.pl であろうというところまで
絞り、内容を一部変えてテストしたところ動作するところまで確認した。
検証は2つのバージョンで行った。
うまくデコードされたlibMIME.pl のバージョン
libMIME.pl,v 2.15.2.3 2001/10/03 12:08:59 (fml-4.0.3 のソース)
うまくデコードされなかったバージョン
libMIME.pl,v 2.15.2.5 2004/02/15 06:11:37 (fml-4.0-stable-20040215 のソース)
違いは、&DecodeMimeString のサブルーチン部分の処理。
コメントアウトされていた &MIME::MimeDecode(@_); の方式を使うようにしてみたらデコードされた。
Mail::Message::Encode モジュール周辺がうまく設定できてないのか?でもエラーでないし・・・??
% diff libMIME.pl.org libMIME.pl.custom
105c105
< my ($buf) = @_;
---
> #my ($buf) = @_;
108c108
< # &MIME::MimeDecode(@_);
---
> &MIME::MimeDecode(@_);
110,112c110,112
< use Mail::Message::Encode;
< my $encode = new Mail::Message::Encode;
< return $encode->decode_mime_string($buf, 'jis');
---
> #use Mail::Message::Encode;
> #my $encode = new Mail::Message::Encode;
> #return $encode->decode_mime_string($buf, 'jis');
通常処理の配送時や summary 作成時などに支障があるといけないので、
この処理専用に名前を変えて動作させてみた。
尚、それに伴い、gen_summary.pl も
% diff gen_summary.pl.org gen_summary.pl
152c152
< if ($USE_MIME) { require 'libMIME.pl'; $s = &DecodeMimeStrings($s);}
---
> if ($USE_MIME) { require "/usr/local/fml/libMIME.pl.custom"; $s = &DecodeMimeStrings($s);}
として変更してある。
ちなみに実行したコマンドは、
% cd /var/spool/ml/listname
% /usr/local/bin/perl /usr/local/fml/bin/gen_summary.pl -I /usr/local/fml/module/fml-devel -mBv spool とかでテストしてみた。
-I /usr/local/fml/module/fml-devel
は
-I /usr/local/fml
とするのが通常のようであるがそもそもここがおかしいのかな。
最終的には
% /usr/local/bin/perl /usr/local/fml/bin/gen_summary.pl -I /usr/local/fml/module/fml-devel -mB spool > summary2
として、 summary2 に作成して summary と差し替えて確認した。
一応、MLの過去記事検索と、fmlバイブルで対応策になりそうな箇所は探してみたつもり。
もう少し追いかけて正しい対応を探したいなー。。
