fml8 にはインストールされている fml のバージョン依存性を考慮するため に、本章で述べるようなブートストラップの過程があります。
fml (libexec/distribute) が boot していく様子 functions class ---------------------------------------- main::Bootstrap() libexec/loader | V main::Bootstrap2() FML::Process::Switch | V ProcessSwitch() FML::Process::Switch | | | switch to ($obj = FML::Process:Distribute) | V ProcessStart($obj,$args) FML::Process::Flow
たとえば配送処理の場合、 loader から次々とモジュールが呼ばれていく様子は次のようになります。
/usr/local/libexec/fml/distributre (の実体 /usr/local/libexec/fml/loader) は /usr/local/etc/fml/main.cf を読みこ み、fml_version 変数から使うべきライブラリのバージョンを決めます。 たとえば fml_vesrion が current-20010501 となっていたら /usr/local/lib/fml/current-20010501/ 以下にあるライブラリを使うといっ たぐあいです。
@INC を再設定した後、 loader は FML::Process::Switch をロードし、 $0 (プロセス名)を調べます。 その名前から自分の仕事は配送処理なので FML::Process::Distribute クラスをロードし、配送処理に移ります。
なお、プログラム名とクラスの対応関係は /usr/local/etc/fml/defaults/バージョン/modules で定義されています。
こういった処理は見かけ上 FML::Process::Flow::ProcessStart() という関数 が制御しています。ProcessStart() が引数として FML::Process::Distribute オブジェクトを渡され、FML::Process::Distribute オブジェクトを実行して いくという流れになります。
author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.
For questions about FML, e-mail <fml-bugs@fml.org>.