Chapter 32. バージョン依存性を解決するための fml ブートローダ

Table of Contents
例: 配送の場合
FML::Process:: クラスの階層構造
プロセス実行時に使われるモジュール群
議論: ml_name と ml_domain の値はどこで解決するのが正しいか?

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 オブジェクトを実行して いくという流れになります。

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
fml 4.0 project homepage is www.fml.org/software/fml4/.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

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>.