fml4 のMLを fml8 形式のMLへ変換する
2004/03:
fml4 の $DIR ($ml_home_dirにあたるもの)、
たとえば /var/spool/ml/elena、
を fml8 形式の構成へ自動変換するコマンドを実装しました。
ただ、まだ設定ファイルの翻訳機能は予備的なもので、
順次、改良されていく予定です。
概要: fml4 から fml8 へ
要するに fml4 から fml8 への移行ということですが、fml4 の実行ファイル
を fml8 で上書きすれば、そのまま動くようにはなっていません。
上書きしてしまうと、一斉に移行を強制することになるし、失敗した時が痛過
ぎます。やっぱり、少しずつ移行していきたいよね?また、少しずつ移行する
場合にも、出来れば、逆戻りができたほうがいいでしょう。
そんなわけで、ML一つ一つを移行できるような仕組みにしておきたい。
できれば、リカバリも出来ると良いです。
ちなみに、いま考えている操作手順は、こんな感じです。
1. fml8 をインストールする
2. (postfix の場合) alias_maps に fml8 の aliases を追加
例:
alias_maps = hash:/etc/mail/aliases
hash:/var/spool/ml/etc/aliases (fml4)
hash:/var/spool/ml/etc/mail/aliases (fml8)
3. fml4 の ML を fml8 へコンバートする。
fml $ml mergeml fml4の$DIR
たとえば
fml elena mergeml /var/spool/ml/elena
fml8 へ移行したいMLに対して 3. を繰り返す。
aliases や include の自動変換は、makefml mergeml コマンドが頑張ります。
また、fml4 の設定ファイルとメンバーリストを fml8 形式へ変換する作業も
頑張ります。
さすがに、難しい設定がてんこ盛りのconfig.phは無理ですが、簡単な
config.ph であれば、fml8 の config.cf へ全自動で変換できる予定です。な
お、簡単な config.ph とは、たとえば、Subjectのタグと投稿制限の設定など
の、makefml config (メニュー)で設定変更ができたレベルのものを想定して
います。
概要: fml4 と fml8 の相違点
fml8 は fml4 を一旦忘れて、一から再設計、再コーディングされたソフトウ
エアです。そのため、fml4 と fml8 では直接の対応関係がない機能や変数が
あります。
また、対応関係があったとしても、一対一対応でないものも多いです。
以下、いくつかの例をあげます。
誰でも投稿可能にしたい
「登録されたユーザからのみ投稿が可能」なのは fml4 でも fml8 でもデフォ
ルトです。もし誰でも投稿可能にしたいなら、fml4 (の config.ph ファイル)では
$PERMIT_POST_FROM = "anyone";
としますが、fml8 (の config.cf)では
article_post_restrictions = reject_system_special_accounts
permit_anyone
reject
となります。
Subject タグ
デフォルトでは「Subjectのタグがない」。
これも &fml4; と &fml8; で同じです。
そして、fml4 での
$SUBJECT_TAG_TYPE = '[:]';
は fml8 の
article_header_rewrite_rules += rewrite_article_subject_tag
article_subject_tag = [$ml_name:%05d]
に相当しています。
特定のコマンドを使えなくする
「members コマンドなどが使えない」これは fml8 ではデフォルトです。
fml4 の以下のコマンドに対応するものは不要です。
&DENY_PROCEDURE('member');
&DENY_PROCEDURE('active');
&DENY_PROCEDURE('members');
&DENY_PROCEDURE('actives');
&DENY_PROCEDURE('status');
&DENY_PROCEDURE('stat');
fml4 以前および fml4 非推奨設定の状態では「フィルタは使わない」ように
なっています。しかし、fml8 では「フィルタを使う」がデフォルトです。
そのため、場合によっては /usr/local/etc/fml/site_default_config.cf で
一度「デフォルトでは使わない」に設定を変更し、その上で、あらためて以下
の例外ルールを適用する必要があります。
fml4 と異なり、subscribe, chaddr, unsubscribe はconfirmation が必須と
なっています。現状、confirmation を抑制することは出来ません。
実装: ブートプロセスの変更
以下の作業ですが、実際には変換するコマンド(makefml mergeml)が自動で頑
張ります。
しかしながら、行なっている作業について理解してもらうために、
aliasesとincludeファイルについての説明をしておきます。
まず、メールサーバに fml4 から fml8 を起動させるように変更しなくてはな
りません。最終的に fml8 が起動されることができれば、fml4 の config.ph
を適宜解釈するとかする部分は、なんとかなるとはおもいます。
もうすこし詳細な解説をしましょう。
MLドライバの仕組み
を思い出してください。
たとえば Postfix を使う場合、Postfix は aliases ファイルから include
ファイルを読むべきことを知り、include ファイルから fml8 の起動の仕方を
知ります。最終的に Postfix は /usr/local/libexec/fml/distribute コマン
ドを実行します。
起動された distribute コマンドは、config.cfを読み込み、config.cfからメ
ンバーリストなどの場所を知り、さまざまな処理を行なうといった具合です。
つまり、fml8 が起動されるまでに
aliases ファイル (MTA の設定)
include ファイル
の2つの段階を経るわけです。
そして、aliases ファイル(群)には同じMLの設定が重複していてはいけま
せん。だから /etc/postfix/main.cf には次のように fml4 と fml8 の設定両
方を書いてもよいのですが、
alias_maps = hash:/etc/mail/aliases
hash:/var/spool/ml/etc/aliases (fml4)
hash:/var/spool/ml/etc/mail/aliases (fml8)
fml4 と fml8 の aliases ファイル間での重複はきちんと削除していかないと
いけません。
別の言い方をすると、
MTA -> fml4のaliases -> fml4のinclude -> fml4 (fml.pl)を起動する
となっている起動の順番を次のように変更するわけです。
MTA -> fml8のaliases -> fml8のinclude -> fml8 を起動する
そのためには
fml4 の aliases ファイルから該当するML部分の設定を削除
fml8 の aliases ファイルに該当するML部分の設定を追加
が必要です。
逆に
aliases
の重複さえなければ、
同じシステム上に
&fml4;
と
&fml8;
が存在しても問題ありません。
もちろん同一MLが
&fml4;
と
&fml8;
の双方に存在しても問題ありませんが、
実際に動くのは、
もちろんいづれか(MTA から起動されるようになっている)一方だけです。