<!--
   $FML: merge.fml4to8.sgml,v 1.7 2008/08/19 07:11:02 fukachan Exp $
-->


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

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

<para>
2004/11: 
<link linkend="mergeml.fml4.overview">
&fml4; の fml.pl を &fml8; の fml.pl と入れ換え可能
</link>
としました。つまり、&fml8; による &fml4; の直接エミュレーションです。
これは &fml4; の fml.pl を &fml8; の fml.pl に入れ換えるだけで 
&fml4; から &fml8; へのアップグレードを可能にしようとするものです。
</para>


<sect1 id="mergeml.fml4to8.overview">
	<title>
	概要: &fml4; から &fml8; への移行(1) &fml8; 形式への変換
	</title>

<para>
ようするに &fml4; から &fml8; への移行ということですが、
「&fml4; の実行ファイルを &fml8; で上書きすれば、そのまま動く」
というわけではありません。
</para>

<para>
今の &fml8; では、それに近いことも出来ますが、その際にも、
設定ファイルの自動変換など、
バックグラウンドでは、
さまざまな処理が行なわれています。
</para>

<para>
そもそも 4 を 8 で上書きしてしまうと、一斉に移行を強制することになるし、
失敗した時のエラーリカバリが大変です。
やはり、少しずつ移行していきたいでしょう。
また、少しずつ移行する場合にも、できれば逆戻りが可能であるべきです。
</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; 形式へ変換する作業も mergeml コマンドが行ないます。
</para>

<para>
さすがに、難しい設定てんこ盛りの config.ph は無理ですが、
簡単な config.ph であれば
&fml8; の config.cf へ全自動で変換できているつもりです。
</para>

<para>
なお、簡単な設定とは、Subject のタグと投稿制限の設定など &fml4; の 
makefml config (メニュー)で設定変更ができたレベルのものを想定しています。
</para>

</sect1>


<sect1 id="mergeml.fml4.overview">
	<title>
	概要: &fml4; から &fml8; への移行(2) 
	&fml4; の実行ファイルを入れ換え、そのまま使う
	</title>

<para>
2004/11: &fml4; の fml.pl を &fml8; の fml.pl と入れ換え可能としました。
いわば、Postfix の /usr/sbin/sendmail (sendmail 互換コマンド)
同様の扱いと考えてください。
</para>

<para>
たとえば、次のように link を張ってください。
<screen>
% 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
</screen>
</para>

<para>
正確には &fml4; の設定ファイルをそのまま使っているわけではありません。
fml.pl (&fml8;) が起動された時に config.cf が見つからないと、
ＭＬのホームディレクトリにある config.ph から config.cf を自動生成し、
そのファイルを読み込んで &fml8; プロセスが動作しています。
</para>

<para>
設定ファイルの自動変換が可能な範囲は限られていますが、
&fml4; のメニューで設定可能な(単純な)ものなら
自動変換して何とかなるようになっています。
</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

注: fml8 2008/08/17 以降のバージョンでは isolate (SPAM の隔離)が推奨です。

article_post_restrictions = isolate_system_special_accounts
                            permit_anyone
                            isolate
</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 から メンバーリストなどの場所を知り、
さまざまな処理を行なうといった具合でブートストラップしていきまsす。
</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>
