RFC: ドメイン(default + virtual)の操作の統合 [ビジョン] 利点: MLを用意するのに必要な操作のほぼ全部をコマンド 操作にすることで自動チェックが効く。 誤操作相談が減る(かも)。 ひっこしが楽になる(はず)。 /etc/fml/ と/var/spool/ml/$ml_name/ 以下のファイルについて この構成がminimumと言えるか?がこれを実装してみると分かる。 欠点: ツールを作る時(最初)だけは気合いが要るねぇ;-) [重要な変更] 1. /etc/fml を group writable にしたい(group は fml)。 root でオペレーションすればいいんだけど、でも、CGIやCUIなどツー ル類のことをかんがえると group writable にしておいたほうが楽。 2. ml_home_prefix のディレクトリ群を入れ子にしてはいけない [使い方] 0. ml_home_prefix のディレクトリ群を入れ子にしてはいけない 入れ子にしてしまうとchange*コマンドが使えない 例: 禁止 /var/spool/ml (fml.org) /var/spool/ml/nuinui.net (nuinui.net) 例: だから、 /var/spool/ml/domain_01/ /var/spool/ml/domain_02/ とか /var/spool/ml_virtual/domain_01/ /var/spool/ml_virtual/domain_02/ みたいな使い方をして欲しい。 また、ツールのことを考えると /var/spool/ml_virtual (ml_home_prefix の更に親)はユーザ fml グループ fml にしておく 方が良いとおもう(前述の[重要な変更]の部分にならっている)。 1. デフォルトドメインしか使わない人 いままで通りなので、気にしないで〜 # principle of least surprise 1.1 デフォルトドメインしか使わないが、/var/spool/ml 以外を使いたい 1.1.1 configure で指定する。 1.1.2 インストール後、makefml newdomain で設定する。 2. 複数ドメインを使う可能性を考えている人 一連の作業がこのように変更される(と予想している)。 MLの作成は、「ドメインの宣言」+「MLの作成」の二段階にする。 #もちろん「ドメインの宣言」は最初の一回だけです。 % makefml newdomain fml.org (デフォルトドメインの場合は省略可) % makefml newml elena もしくは makefml newml elena@fml.org MLの削除は今までどおり % makefml rmml elena 一つのドメインの削除 == そのドメインの全MLを削除 % makefml rmdomain fml.org [作業] I. あらたに「makefml newdomain」コマンドを創設する。 % makefml newdomain ドメイン ディレクトリ このコマンドは、ディレクトリを用意し、さらに /etc/fml/ml_home_prefix ファイルに「ドメイン ディレクトリ」の 行を付け加える。 /etc/fml/main.cf では、次のように定義を修正する。 # virtual 部分は互換性を取るためだけ。 # ml_home_prefix ファイルが一応、正式。 # 中身は「ドメインと$ml_home_prefixの対応関係」を記している。 ml_home_prefix_maps = $config_dir/ml_home_prefix $virtual_maps virtual_maps = $config_dir/virtual 注意: /var/spool/ml および ml_home_prefix ファイルに writable permission がないとエラーになる。 例: 各ドメインごとに使うディレクトリを用意する % makefml newdomain fml.org /var/spool/ml/fml.org % makefml newdomain nuinui.net /var/spool/ml/nuinui.net ... 例: デフォルトドメイン(fml.org)について fml4 との互換性を保つ % makefml newdomain fml.org /var/spool/ml 注意: 同じディレクトリに複数のドメインをマップすることが可能。 例: ドメインA ディレクトリA ドメインB ディレクトリB という定義をした場合、つまり次のようなコマンド列を打った場合を 考える。 % makefml newdomain example.org /var/spool/ml/example.org % makefml newdomain example.jp /var/spool/ml/example.org % makefml newml info@example.org (この後 makefml newml info@example.jp を実行するとエラー) この場合、info@example.jp は example.org の include ファイルを 叩くようにすると思います。To: とか Cc: は素通りなので、まぁい いですが、List-* は .org の方になってるという具合いでしょう。 まぁ、それはしょうがない。 TODO: makefml newml がよろしく newdomain も呼ぶケースがある? まぁ、ありえるのはわかるけど、 permission の問題が解決できるかなぁ? II. あらたに「makefml rmdomain」コマンドを創設する。 % makefml rmdomain ドメイン このコマンドは、/etc/fml/ml_home_prefix ファイルから該当するド メイン行を削除する。 ディレクトリには何もしない。 オプションで、MLのホームディレクトリ群も消す(-r?)。 ~fml/.qmail-ドメイン-* ファイル群を消す。 III. では、引越しのために、「makefml changemlhomeprefix」は作れるか? - ん〜難しいかな?;-) - こんな長いコマンド名はちょっと…良い案募集 - めったに使うものでもないので、長い名前でも良いとも思える。 - 諸般の事情により、ディレクトリパス名を変更したい場合 - 容量がなくなって/var/mlから/home/user/ml/以下に移したい場合 % makefml changemlhomeprefix ドメイン 旧ディレクトリ 新ディレクトリ 例: (たぶん、こういう操作が必要のはずで、それを自動化する) % makefml changemlhomeprefix fml.org (0. MTA を停止) 1. ディレクトリを変更する。 旧ディレクトリ -> 新ディレクトリ 2. fml8 が作る MTA 用の設定を変更する。 /var/spool/ml/etc 以下のファイル (例: /var/spool/ml/etc/mail/aliases) の中に埋め込まれているディレクトリ名を変更して回り、 .db などを再生成する。 3. MTA の設定を変更する。内容は MTA 依存。 postfix の場合、virtual_maps と alias_maps (4. MTA リスタート) IV. では、ドメイン名を変更したい場合は? - ん〜難しいかな?;-) - こんなコマンド名では曖昧かなぁ。良い案募集 % makefml changedomain 旧ドメイン 新ドメイン 例: (たぶん、こういう操作が必要のはずで、それを自動化する) (0. MTA を停止) 1. 全MLの MTA 用設定ファイルを変更して回る。 例: /var/spool/ml/elena/include-ctl /var/spool/ml/elena/include /var/spool/ml/elena/include-error 2. fml8 が用意する MTA 用設定ファイルを変更する /var/spool/ml/etc/mail/aliases /var/spool/ml/etc/procmail/procmailrc ~fml/.qmail-$ml_domain-$ml_name /etc/fml/ 以下のファイル main.cf 3. MTA の設定を変更する。内容は MTA 依存。 postfix の場合、virtual_maps と alias_maps 4. *.cgi を再生成する ドメイン名などは .cgi 内にハードコードされているため。 (5. MTA リスタート) TODO: map の中も頑張って書き換える? やりすぎの予感もあるが、それよりも map に書き込めない 場合も考えないといけないのが難しい。 V. ドメインとディレクトリ両方を変更したい場合 % makefml changedomain 旧ドメイン 新ドメイン % makefml changemlhomeprefix 新ドメイン 旧ディレクトリ 新ディレクトリ とせずとも、これに相当することを一発で行なえるコマンドにしておく。 この真意は、ディレクトリのマップは ml_home_prefix_maps に書い てあるはずなので、明示的にコマンドラインで指定されなくても可能 なはずであるということにある。その方がミスが減るだろう。 VI. ml_home_prefix_maps を表示するコマンドを用意 % fml $ml_name list ml_home_prefix [ケーススタディ] Q: ML名もディレクトリ名も変更しない。 A: 作業は不要。 例: 単に物理的に引っ越す場合 例: IP アドレスが変わるだけ Q: ドメイン名の変更をするが、ディレクトリ名は変わらない。 A: changedomain コマンド一発 Q: ドメイン名は変更せず、ディレクトリは変更する。 A: changemlhomeprefix コマンド一発 Q: 両方やる場合 A: うーん… コマンドが頑張るしかないわねぇ [その他、雑多な考察] Q: これ以上、小さな仕様になるか? include ファイルや aliaes にはディレクトリかML名が現れるが、 これ以上設定項目を減らすことは無理だろう。 Q: ML名はプライマリキー? yes aliases や virtual ファイルで定義の固まりを示している。 include ファイルは「プログラム ML名」という使い方をしている。 Q: IPアドレスの変更は? 無関係 [リファレンス] fml-devel の 2003/10末、600 番台あたりの議論を読もう。 ------------------------------------------------ $FML: 01_RFC_DOMAIN_OP.txt,v 1.5 2003/11/16 14:36:30 fukachan Exp $