バーチャルドメインの取り扱いについて 余談: 現在の第五世代 fml.org サーバ群のMLは、 すべてバーチャルドメインとして運用しています。 この方式が統一が取れていて美しいです。 はじめは一つでも、だんだんドメインが増えていくのはよくあることで、 それを考えると、 はじめからバーチャルドメインで統一しておくと扱いやすいと思います。 2003/11: バーチャルドメインの取り扱い方を拡張しました。 /usr/local/fml/etc/main.cf における virtual_maps は obsolete となりま した。今後は virtual_maps の代わりに ml_home_prefix_maps を使うことに なります。しかしながら、互換性のため virtual_maps も引続き有効です( なんのことはない、互換性のため、 ml_home_prefix_maps の定義に virtual_maps も含めているというだけのことです。 Postfix の virtual_maps と virtual_alias_maps の関係みたいな感じ)。 また、makefml および fml コマンドには ml_home_prefix_maps を操作する newdomain と rmdomain コマンドが 創設されました。 バーチャルドメインのデザインモティーフ 「 &fml8; 全体でドメインを統一的に扱えるようにしたい。 また、できるだけ &fml4; の素直な拡張であってほしい。 さらに、引越しなどが出来るだけ楽であると嬉しい。 」 これがバーチャルドメインを設計する上での主要な条件でした。 まずML名には「ユーザ@ドメイン」形式の文字列 @ドメインがない場合は、デフォルトドメインと解釈します。 素直ですよね? を使うことにします。 これでデフォルトのドメインかバーチャルドメインかを &fml8; が解釈するこ とが可能です。 ML名以外は従来のコマンド体系そのままです。 新ドメインのMLを作る際の最初の一回だけは「ドメインとパス」のあいだの設定を 仕込まないといけないので、MTA への追加設定が必要になりますが、 それ以外はデフォルトドメインの場合と同様に操作可能です。 素直な拡張になっていると思うのですが、どうでしょうか? 概要: &fml8; におけるバーチャルドメインの取り扱い 新たに、あるドメインを使いはじめる時、 最初に newdomain コマンドを実行して下さい。 このコマンドは ml_home_prefix_maps (正確には primary_ml_home_prefix_map)を適宜、編集してくれます。 この後は &fml4; と同様に makefml (or fml) コマンドを使ってください。 ただし、makefml (or fml)コマンドを使う際には、 ML名を「ユーザ@ドメイン」形式で指定するところが異なります。 注意して下さい。 なお、デフォルトのドメインの場合には@ドメインが省略可能です。 つまり、この場合に限り &fml4; と同じ形式に戻るというわけです。 たとえば、コマンドの操作はMLではなく、ML@ドメイン名を使うことにな ります。つまりコマンドの使い方は makefml newml ML@virtualdomain makefml add ML@virtualdomain address makefml bye ML@virtualdomain address などといったぐあいになります。 なお、CGI での操作ではドメイン名の指定が不要です。これは、config.cgi 生成時にドメイン名をスクリプト中に埋め込んでいるためです。画面にもドメ イン名が出ているはずですし、そもそも URL にドメイン名が入っている http://lists/~fml/cgi-bin/fml/$domain/admin/config.cgi ので、どのドメインの操作をしているのかはわかっているはずです。 なお、CGI の URL にドメイン名が入っているのは、操作する人にとって分か りやすいようにという配慮であって、CGI が URL を元に自分の操作対象ドメ イン名を決めているわけではありません(それは危険です)。 ML名やドメイン名は newml 時に作成される .cgi スクリプトにハードコー ディングされています。 URL のドメインや環境変数を CGI スクリプトは無視します。 ハードコーディングされた設定だけを見ます。 CGI 実行時に、ユーザが HTTP 経由で操作対象を変更することは出来ません (させません)。 ケーススタディ: FML.ORG サーバ間引越の例 FML.ORG で第四世代から第五世代サーバへ引越しをした時の記録を参考資料と してまとめておきます。 結論から言えば、&fml4; → &fml8; コンバータは使いませんでした。 すべてをコピーして MTA 用の設定を生成しました (include の類は強制上書きしました)。 (1) 新サーバを用意します。 ホスト名は今まで使ったことのない新しいものをつけました。 この段階では、 新サーバではインターネットからのメールを受け付けないようにして下さい。 (2) Postfix は localhost と新ホスト名だけを mydestination として受けと るように設定します。かつて使ったことのあるドメインすべてをバーチャルド メインとして処理するためです。 (3) 旧サーバの Postfix を停止し、新たにメールを受け付けないように設定 しておいてください。 そしてキューをフラッシュしつくします。残っているキューを調べML宛のも のがないことを確認します(mailq と postcat、削除するなら postsuper も使 う)。ps で走っているプロセスがないか?も確認して下さい。 旧サーバで処理されるべきメール(fml へ入力する方向のメール)がすべてなく なった、つまりMLの更新がいっさいなくなったことに自信ができたら次のス テップへ進みます。 (4) 旧サーバから新サーバへML全体(/var/spool/ml 相当)をコピーします。 時間をかけないために、もちろん事前にコピーがしてあり、最後の差分だけを コピーするということです(たとえば rsync を使って行なってください)。 (5) MLのパスを再配置します。 ベースディレクトリ/ドメイン名/ML名 として、ドメイン名がはっきり分かるようにしました。 (6) ドメインごとにMLの設定を再生成します。 % su root # makefml newdomain ドメイン名 ベースディレクトリ/ドメイン名 # suspend % makefml --force newml ML名1 % makefml --force newml ML名2 ... 必要なもの全部 ... config.cf include ファイル群、MTA用の設定ファイルが生成されます。 デフォルト値と異なる設定のMLは config.cf を編集してください。 (7) ドメインごとに Postfix の alias_maps と virtual_maps へ設定を追加 し、動作確認をします。 (8) ドメインの数だけ (6)(7) を繰り返します。 (9) ローカルでテストをして問題がないようなら、 新サーバでインターネットからのメールを受け付けるようにします (/etc/postfix/main.cf の inet_interfaces か /etc/postfix/master.cf を 編集し、念のため postfix reload ではなく postfix stop して postfix start)。 これで終りです。奇麗になりましたね。 なお、WWW アーカイブの作りなおしとか必要なら、さらに作業が続きます。 本ドキュメントの該当する記述を参照して下さい。