<!--
   $FML: chapter.sgml,v 1.6 2005/06/25 15:11:40 fukachan Exp $
-->


<chapter id="virtualdomain">
	<title>
	バーチャルドメインの取り扱いについて
	</title>

<para>
余談:
現在の第五世代 fml.org サーバ群のＭＬは全てバーチャルドメインで実装さ
れています。この方が統一が取れていて美しいです。
だんだんドメインが増えることを考えると、
はじめからバーチャルドメインで統一してあった方が扱いやすいと思います。
</para>

<caution>

<para>
2003/11: バーチャルドメインの取り扱い方を拡張しました。
</para>

<para>
/usr/local/fml/etc/main.cf における virtual_maps は obsolete となりま
した。今後は virtual_maps の代わりに ml_home_prefix_maps を使うことに
なります。が、互換性のため virtual_maps も引続き有効です。
</para>

<para>
また、ml_home_prefix_maps を操作する newdomain と rmdomain コマンドが
創設されました。
</para>

</caution>


<sect1 id="virtualdomain.fml8.motif">
	<title>
	バーチャルドメインのデザインモティーフ
	</title>

<para>
「
&fml8; 全体で統一的に扱えるようにしたい。
また、できるだけ &fml4; の素直な拡張であってほしい。
さらに、引越しなどが出来るだけ楽であると嬉しい。
」
これがバーチャルドメインを設計する上での主要な条件です。
</para>

<para>
まずＭＬ名には「ユーザ＠ドメイン」形式の文字列を使うことにします。
これでデフォルトのドメインかバーチャルドメインかを &fml8; が解釈するこ
とが可能です。
</para>

<para>
ＭＬ名以外は従来のコマンド体系で素直に扱えます。
</para>

<para>
新ドメインのＭＬを作る際の最初の一回だけは MTA への追加設定が必要ですが、
それ以外はデフォルトドメインと同様に扱えます。
</para>

<!--
<para>
また、
引越しやディレクトリ名の変更を楽に行なうコマンドを用意する予定です。
</para>
-->

</sect1>


<sect1 id="virtualdomain.fml8.overview">
	<title>
	概要: &fml8; におけるバーチャルドメインの取り扱い
	</title>

<para>
あるドメインを使いはじめる時は、最初に newdomain コマンドを実行して下さい。
このコマンドは
<link linkend="install.virtual">
ml_home_prefix_maps 
</link>
(正確には primary_ml_home_prefix_map)を適宜、編集してくれます。
</para>

<para>
この後は &fml4; と同様に makefml (or fml) コマンドを使ってください。
ただし、makefml (or fml)コマンドを使う際には、
ＭＬ名を「ユーザ＠ドメイン」形式で指定することだけが異なります。
</para>

<para>
なお、デフォルトのドメインの場合には＠ドメインが省略可能です。
つまり、この場合に限り &fml4; と同じ形式に戻るというわけです。
</para>

<para>
例えば、コマンドの操作はＭＬではなく、ＭＬ＠ドメイン名を使うことになり
ます。つまりコマンドの使い方は
<screen>
makefml newml	ML@virtualdomain
makefml add	ML@virtualdomain	address
makefml bye	ML@virtualdomain	address
</screen>
などといった具合いになります。
</para>

<para>
なお、CGI での操作ではドメイン名の指定は不要です。これは、config.cgi 
生成時にドメインがスクリプト中に埋め込まれているためです。画面にもドメ
イン名が出ているはずですし、そもそも URL にドメイン名が入っている
<screen>
http://lists/~fml/cgi-bin/fml/$domain/admin/config.cgi
</screen>
ので、どのドメインの操作をしているのかはわかっているはずです。
</para>

<warning>
<para>
なお、CGI の URL にドメイン名が入っているのは、操作する人にとって分か
りやすいようにという配慮であって、CGI が URL を元に自分の操作対象ドメ
イン名を決めているわけではありません(それは危険です)。
</para>

<para>
ＭＬ名やドメイン名は newml 時に作成される .cgi スクリプトにハードコー
ディングされています。
</para>

<para>
つまり、URL のドメインや環境変数を CGI スクリプトは見ていません。
ハードコーディングされた設定だけを見ています。
</para>

</warning>

</sect1>


<sect1 id="virtualdomain.movement">
	<title>
	ケーススタディ: FML.ORG サーバ間引越の例
	</title>

<para>
FML.ORG で第四世代から第五世代サーバへ引越しをした時の記録を参考資料と
してまとめておきます。
</para>

<para>
結論から言えば、&fml4; → &fml8; コンバータは使いませんでした。
全てをコピーして、MTA 用の設定を生成しました(include の類は強制上書き)。
</para>

<para>
(1) 新サーバを用意します。
ホスト名は今まで使ったことのない新しいものをつけました。
この段階では、
新サーバではインターネットからのメールを受け付けないようにして下さい。
</para>

<para>
(2) Postfix は localhost と新ホスト名だけを mydestination として受けと
るように設定します。かつて使ったことのあるドメイン全てはバーチャルドメ
インとして処理するためです。
</para>

<para>
(3) 旧サーバの Postfix を停止し、新たにメールを受け付けないように設定
しておいてください。
</para>

<para>
そしてキューをフラッシュしつくします。残っているキューを調べＭＬ宛のも
のがないことを確認します(mailq と postcat、削除するなら postsuper も使
う)。ps で走っているプロセスがないか？も確認して下さい。
</para>

<para>
旧サーバで処理されるべきメールが全てなくなった、つまりＭＬの更新がいっ
さいなくなったことに自信ができたら次に進みます。
</para>

<para>
(4) 旧サーバから新サーバへＭＬ全体(/var/spool/ml 相当)をコピーします。
時間をかけないために、もちろん事前にコピーはしてあり、最後の差分だけを 
rsync するということです。
</para>

<para>
(5) ＭＬを再配置します。
<screen>
ベースディレクトリ/ドメイン名/ＭＬ名
</screen>
として、ドメイン名がはっきり分かるようにしました。
</para>

<para>
(6) ドメインごとにＭＬの設定を再生成します。
<screen>
% su root
# makefml newdomain ドメイン名 ベースディレクトリ/ドメイン名
# suspend
% makefml --force newml ＭＬ名１
% makefml --force newml ＭＬ名２
   ... 必要なもの全部 ...
</screen>
config.cf include ファイル群、ＭＴＡ用の設定ファイルが生成されます。
デフォルト値と異なる設定のＭＬは config.cf を編集してください。
</para>

<para>
(7) ドメインごとに Postfix の alias_maps と virtual_maps へ設定を追加
し、動作確認をします。
</para>

<para>
(8) ドメインの数だけ (6)(7) を繰り返します。
</para>

<para>
(9) ローカルでテストをして問題がないようなら、
新サーバでインターネットからのメールを受け付けるようにします
(/etc/postfix/main.cf の inet_interfaces か /etc/postfix/master.cf を
編集し、念のため reload ではなく stop and start)。
</para>

<para>
終りです。奇麗になりましたね。
</para>

<para>
なお、WWW アーカイブの作りなおしとか必要なら、さらに作業が続きます。
本ドキュメントの該当する記述を参照して下さい。
</para>

</sect1>


<!--
<para>
ドメインの変更は考えなくても良いか？
ドメインの変更なんてそんなにあるか？
変更するならＭＬも作りなおすような気がする（嘘？）。
いずれにせよ、ドメインの移行はいっぱい直すところが
あるので、そんなに簡単じゃない。
</para>

<para>
ホストを新しくするか？
うむ、これは割とありそうだ。
</para>

<para>
解決しないといけない問題はディレクトリのパスが変わること。
/usr/local/etc/fml/ の変更だけで解決できないか？

いや、include ファイルがこんな風になっているが、
<screen>
"| /some/where/libexec/distribute elena@fml.org"
</screen>
書式変更が必要ではないのか？
</para>

<para>
4.0 から 8.0 へは？ mergeml コマンドがある。
</para>

<para>
一応、fml.pl は互換性のため fml.pl $DIR も可で、
libexec/distribute libexec/command など新しいコマンドは
ＭＬ名を引数にとるということにしてある。
</para>

-->


</chapter>
