<!--
   $FML: merge.fml4to8.sgml,v 1.3 2004/03/31 06:28:19 fukachan Exp $
-->


<chapter id="mergeml.fml4to8">
	<title>
	fml4 のＭＬを fml8 形式のＭＬへ変換する
	</title>

<para>
2004/03: 
fml4 の $DIR ($ml_home_dirにあたるもの)、
たとえば /var/spool/ml/elena、
を fml8 形式の構成へ自動変換するコマンドを実装しました。
ただ、まだ設定ファイルの翻訳機能は予備的なもので、
順次、改良されていく予定です。
</para>


<sect1 id="mergeml.fml4to8.overview">
	<title>
	概要: fml4 から fml8 へ
	</title>

<para>
要するに fml4 から fml8 への移行ということですが、fml4 の実行ファイル
を fml8 で上書きすれば、そのまま動くようにはなっていません。
</para>

<para>
上書きしてしまうと、一斉に移行を強制することになるし、失敗した時が痛過
ぎます。やっぱり、少しずつ移行していきたいよね？また、少しずつ移行する
場合にも、出来れば、逆戻りができたほうがいいでしょう。
</para>

<para>
そんなわけで、ＭＬ一つ一つを移行できるような仕組みにしておきたい。
できれば、リカバリも出来ると良いです。
</para>

<para>
ちなみに、いま考えている操作手順は、こんな感じです。
<screen>
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
</screen>
fml8 へ移行したいＭＬに対して 3. を繰り返す。
</para>

<para>
aliases や include の自動変換は、makefml mergeml コマンドが頑張ります。
また、fml4 の設定ファイルとメンバーリストを fml8 形式へ変換する作業も
頑張ります。
</para>

<para>
さすがに、難しい設定がてんこ盛りのconfig.phは無理ですが、簡単な
config.ph であれば、fml8 の config.cf へ全自動で変換できる予定です。な
お、簡単な config.ph とは、たとえば、Subjectのタグと投稿制限の設定など
の、makefml config (メニュー)で設定変更ができたレベルのものを想定して
います。
</para>

</sect1>


<sect1 id="mergeml.fml4to8.config.diff">
	<title>
	概要: fml4 と fml8 の相違点
	</title>

<para>
fml8 は fml4 を一旦忘れて、一から再設計、再コーディングされたソフトウ
エアです。そのため、fml4 と fml8 では直接の対応関係がない機能や変数が
あります。
</para>

<para>
また、対応関係があったとしても、一対一対応でないものも多いです。
</para>

<para>
以下、いくつかの例をあげます。
</para>


<sect2>
	<title>
	誰でも投稿可能にしたい
	</title>

<para>
「登録されたユーザからのみ投稿が可能」なのは fml4 でも fml8 でもデフォ
ルトです。もし誰でも投稿可能にしたいなら、fml4 (の config.ph ファイル)では
<screen>
$PERMIT_POST_FROM = "anyone";
</screen>
としますが、fml8 (の config.cf)では
<screen>
article_post_restrictions = reject_system_special_accounts
                            permit_anyone
                            reject
</screen>
となります。
</para>

</sect2>

<sect2>
	<title>
	Subject タグ
	</title>

<para>
デフォルトでは「Subjectのタグがない」。
これも &fml4; と &fml8; で同じです。
そして、fml4 での
<screen>
$SUBJECT_TAG_TYPE = '[:]';
</screen>
は fml8 の
<screen>
article_header_rewrite_rules += rewrite_article_subject_tag

article_subject_tag           = [$ml_name:%05d]
</screen>
に相当しています。
</para>

</sect2>

<sect2>
	<title>
	特定のコマンドを使えなくする
	</title>

<para>
「members コマンドなどが使えない」これは fml8 ではデフォルトです。
fml4 の以下のコマンドに対応するものは不要です。
<screen>
&amp;DENY_PROCEDURE('member');
&amp;DENY_PROCEDURE('active');
&amp;DENY_PROCEDURE('members');
&amp;DENY_PROCEDURE('actives');
&amp;DENY_PROCEDURE('status');
&amp;DENY_PROCEDURE('stat');
</screen>
</para>

<para>
fml4 以前および fml4 非推奨設定の状態では「フィルタは使わない」ように
なっています。しかし、fml8 では「フィルタを使う」がデフォルトです。
</para>

<para>
そのため、場合によっては /usr/local/etc/fml/site_default_config.cf で
一度「デフォルトでは使わない」に設定を変更し、その上で、あらためて以下
の例外ルールを適用する必要があります。
</para>

<para>
fml4 と異なり、subscribe, chaddr, unsubscribe はconfirmation が必須と
なっています。現状、confirmation を抑制することは出来ません。
</para>

</sect2>

</sect1>


<sect1 id="mergeml.fml4to8.boot">
	<title>
	実装: ブートプロセスの変更
	</title>

<para>
以下の作業ですが、実際には変換するコマンド(makefml mergeml)が自動で頑
張ります。
</para>

<para>
しかしながら、行なっている作業について理解してもらうために、
aliasesとincludeファイルについての説明をしておきます。
</para>

<para>
まず、メールサーバに fml4 から fml8 を起動させるように変更しなくてはな
りません。最終的に fml8 が起動されることができれば、fml4 の config.ph 
を適宜解釈するとかする部分は、なんとかなるとはおもいます。
</para>

<para>
もうすこし詳細な解説をしましょう。
<link linkend="overview.ml">
ＭＬドライバの仕組み
</link>
を思い出してください。
</para>

<para>
たとえば Postfix を使う場合、Postfix は aliases ファイルから include 
ファイルを読むべきことを知り、include ファイルから fml8 の起動の仕方を
知ります。最終的に Postfix は /usr/local/libexec/fml/distribute コマン
ドを実行します。
</para>

<para>
起動された distribute コマンドは、config.cfを読み込み、config.cfからメ
ンバーリストなどの場所を知り、さまざまな処理を行なうといった具合です。
</para>

<para>
つまり、fml8 が起動されるまでに
<screen>
aliases ファイル (MTA の設定)
include ファイル
</screen>
の２つの段階を経るわけです。
</para>

<para>
そして、aliases ファイル（群）には同じＭＬの設定が重複していてはいけま
せん。だから /etc/postfix/main.cf には次のように fml4 と fml8 の設定両
方を書いてもよいのですが、
<screen>
alias_maps	=	hash:/etc/mail/aliases
			hash:/var/spool/ml/etc/aliases (fml4)
			hash:/var/spool/ml/etc/mail/aliases (fml8)
</screen>
fml4 と fml8 の aliases ファイル間での重複はきちんと削除していかないと
いけません。
</para>

<para>
別の言い方をすると、
<screen>
MTA -> fml4のaliases -> fml4のinclude -> fml4 (fml.pl)を起動する
</screen>
となっている起動の順番を次のように変更するわけです。
<screen>
MTA -> fml8のaliases -> fml8のinclude -> fml8 を起動する
</screen>
そのためには
<screen>
fml4 の aliases ファイルから該当するＭＬ部分の設定を削除
fml8 の aliases ファイルに該当するＭＬ部分の設定を追加
</screen>
が必要です。
</para>

<para>
逆に
aliases
の重複さえなければ、
同じシステム上に
&fml4;
と
&fml8;
が存在しても問題ありません。
もちろん同一ＭＬが
&fml4;
と
&fml8;
の双方に存在しても問題ありませんが、
実際に動くのは、
もちろんいづれか(MTA から起動されるようになっている)一方だけです。
</para>

</sect1>


</chapter>
