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