&fml4; のMLを &fml8; 形式のMLへ変換する 2004/03: &fml4; の $DIR ($ml_home_dirにあたるもの)、 たとえば /var/spool/ml/elena 以下のファイル群を &fml8; 形式の構成へ自動変換するコマンドを実装しました。 ただ、まだ設定ファイルの翻訳機能は予備的なもので、 順次、改良されていく予定です。 2004/11: &fml4; の fml.pl を &fml8; の fml.pl と入れ換え可能 としました。 つまり、&fml8; による &fml4; の直接エミュレーションです。 これは &fml4; の fml.pl を &fml8; の fml.pl に入れ換えるだけで &fml4; から &fml8; へのアップグレードを可能にしようとするものです。 概要: &fml4; から &fml8; への移行(1) &fml8; 形式への変換 ようするに &fml4; から &fml8; への移行ということですが、 「&fml4; の実行ファイルを &fml8; で上書きすれば、そのまま動く」 というわけではありません。 今の &fml8; では、それに近いことも出来ますが、その際にも、 設定ファイルの自動変換など、 バックグラウンドでは、 さまざまな処理が行なわれています。 そもそも 4 を 8 で上書きしてしまうと、 一斉に移行を強制することになるし、 失敗した時のエラーリカバリが大変です。 やはり、少しずつ移行していきたいでしょう。 また、少しずつ移行する場合にも、できれば逆戻りが可能であるべきです。 そんなわけで、 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; 形式へ変換する作業も mergeml コマンドが行ないます。 さすがに、 難しい設定てんこ盛りの config.ph は無理ですが、 簡単な config.ph であれば &fml8; の config.cf へ全自動変換できているつもりです。 なお、簡単な設定とは、 Subject のタグと投稿制限の設定など &fml4; の makefml config (メニュー)で設定変更できた範囲を想定しています。 概要: &fml4; から &fml8; への移行(2) &fml4; の実行ファイルを入れ換え、そのまま使う 2004/11: &fml4; の fml.pl を &fml8; の fml.pl と入れ換え可能としました。 いわば、Postfix の /usr/sbin/sendmail (sendmail 互換コマンド) 同様の扱いと考えてください。 たとえば、次のように link を張ってください。 % su fml % make configure % su root # make install # mv /usr/local/fml/fml.pl /usr/local/fml/fml.pl.orig # ln -s /usr/local/libexec/fml/fml.pl /usr/local/fml/fml.pl # ln -s /usr/local/libexec/fml/msend.pl /usr/local/fml/msend.pl # ln -s /usr/local/libexec/fml/mead.pl /usr/local/fml/libexec/mead.pl 正確には &fml4; の設定ファイルをそのまま使っているわけではありません。 fml.pl (&fml8;) が起動された時に config.cf が見つからないと、 MLのホームディレクトリにある config.ph から config.cf を自動生成し、 そのファイルを読み込んで &fml8; プロセスが動作しています。 設定ファイルの自動変換が可能な範囲は限られていますが、 &fml4; のメニューで設定可能な(単純な)ものなら 自動変換して何とかなるようになっています。 概要: &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 注: fml8 2008/08/17 以降のバージョンでは isolate (SPAM の隔離)が推奨です。 article_post_restrictions = isolate_system_special_accounts permit_anyone isolate となります。 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 から メンバーリストなどの場所を知り、 さまざまな処理を行なうといった具合でブートストラップしていきまsす。 つまり、&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 ファイル間での重複 (ML名 e.g. elena の重複) は削除があってはなりません。 別の言い方をすると、 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 から起動されるようになっている)一方だけです。