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 から起動されるようになっている)一方だけです。