バーチャルドメインの取り扱いについて
余談:
現在の第五世代 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を作る際の最初の一回だけは
「ドメインとパス」のあいだの設定
(e.g. home.example.org は /var/spool/example.org 以下に作成)
を仕込まないといけないので、
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 スクリプトにハードコーディングされています。
CGI スクリプトはハードコーディングされた設定だけを見ます。
URL のドメインや環境変数は無視しています。
よって
CGI 実行時に、ユーザが HTTP 経由で操作対象を変更することは出来ません
(させません)。
ケーススタディ: FML.ORG サーバ間での引越
FML.ORG で第四世代から第五世代サーバへ引越しをした時の記録です。
以下に参考資料としてまとめておきます。
結論から言えば、&fml4; → &fml8; コンバータは使いませんでした。
すべてをコピーして MTA 用の設定を生成しました
(include のたぐいは強制上書きしました)。
(1) 新サーバを用意します。
ホスト名は今まで使ったことのない新しいものをつけました。
この段階では、
"新サーバでインターネットからのメールを受け付けない"
ようにしてください。
(2) 新サーバでの Postifx の設定をしてください。
Postfix
は
localhost
と新ホスト名だけを
mydestination
として受けとるように設定します。
使ったことのあるドメインすべてをバーチャルドメインとして処理するためです
(あとで &fml8; が生成する virtual_maps の設定で
Postfix がバーチャルドメインとしてメールを受信するようになります
)。
(3) 旧サーバでの &fml8; あてメールをすべて処理します。
旧サーバの Postfix でメールを新たに受信しないようにし、
新たにメールを受け付けないように設定しておいてください
(
例:
smtpd プロセスを止めるか、
Postfix で inet_interfaces = localhost に設定するなど…
もちろん smtpd プロセスを止めるほうがよいです。
)。
そして Postfix のキューを無くしてください(flush しつくしてください)。
残っているキューを調べML宛のものがないことを確認します
(mailq と postcat、削除するなら postsuper も使ってください)。
ps で走っているプロセスがないか?も確認してください。
旧サーバで処理されるべきメール
(fml へ入力する方向のメール)がすべてなくなった、
つまり、これ以上のMLの更新がなくなったことに自信ができたら、
次のステップへ進んでください。
(4) 旧サーバから新サーバへMLのデータすべてをコピーします
(つまり /var/spool/ml 以下すべてのデータをコピーといったことです)。
時間をかけないために、もちろん事前にコピーがしてあり、
最後の差分だけをコピーするべきです
(たとえば rsync を使って行なってください)。
(5) MLのパスを再配置します。
ベースディレクトリ/ドメイン名/ML名
例:
/pub/ml/labs.example.org/
/pub/ml/test.example.org/info
/pub/ml/test.example.org/test
...
として、ドメイン名がはっきり分かるようにしました。
(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) &fml8; が生成する Postfix の設定ファイルのパスを Postfix へ反映させます。
&fml8; がドメインごとに生成したファイルを
Postfix の alias_maps と virtual_maps へ設定を追加し、
動作確認をしてください。
(8) ドメインの数だけ (6)(7) を繰り返してください。
例:
MLで利用するドメインは /vol/ml/ドメイン/ としました。
この下に各ドメインのML群が生成されます。
以下の例では
bsg.example.org ffs.example.org nsrg.example.org
の3ドメインがあります。
[/usr/pkg/etc/postfix/main.cf の例]
alias_maps = hash:/etc/mail/aliases
hash:/vol/ml/bsg.example.org/etc/mail/aliases
hash:/vol/ml/ffs.example.org/etc/mail/aliases
hash:/vol/ml/nsrg.example.org/etc/mail/aliases
virtual_maps = hash:/usr/pkg/etc/postfix/virtual
hash:/vol/ml/bsg.example.org/etc/postfix/virtual
hash:/vol/ml/ffs.example.org/etc/postfix/virtual
hash:/vol/ml/nsrg.example.org/etc/postfix/virtual
(9) ローカルでテストをして問題がないようなら、
新サーバでインターネットからのメールを受け付けるようにします
(/etc/postfix/main.cf
の
inet_interfaces か /etc/postfix/master.cf を編集し、
念のため postfix reload ではなく postfix stop して postfix start)。
これで終りです。きれいになりましたね。
なお、WWW アーカイブの作りなおしなど必要なら、さらに作業が続きます。
本ドキュメントの該当する記述を参照して下さい。