diff options
| author | fukachan <fukachan> | 2001-05-01 14:52:05 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2001-05-01 14:52:05 +0000 |
| commit | 5cc1a00ab493f7d3be157f5a813e6784298640a1 (patch) | |
| tree | 1eadc36fc898ad55d1481a8a3a36184967afee84 | |
| parent | 08fb808a4eb1d44ad2dd33f00f6168517df9f4c2 (diff) | |
| download | fml8-snap-20010501.tar.gz fml8-snap-20010501.tar.bz2 fml8-snap-20010501.zip | |
make tutorial/internals/snap-20010501
| -rw-r--r-- | fml/doc/ja/tutorial/internals/bootloader.sgml | 153 | ||||
| -rw-r--r-- | fml/doc/ja/tutorial/internals/main.cf.sgml | 86 |
2 files changed, 239 insertions, 0 deletions
diff --git a/fml/doc/ja/tutorial/internals/bootloader.sgml b/fml/doc/ja/tutorial/internals/bootloader.sgml new file mode 100644 index 00000000..9d5e10b0 --- /dev/null +++ b/fml/doc/ja/tutorial/internals/bootloader.sgml @@ -0,0 +1,153 @@ +<!-- + $FML: bootloader.sgml,v 1.2 2001/04/24 06:51:59 fukachan Exp $ +--> + +<chapter id="bootloader"> + +<title> バージョン依存性を解決するための fml ブートローダ </title> + +<para> + +fml 5.0 にはインストールされている fml のバージョン依存性を考慮するた +めに、実行時には本章で述べるようなブートストラップの過程があります。 + +<programlisting> +boot していくイメージ + +libexec/loader -> + FML::Process::Switch -> + FML::Process::Flow -> + FML::Process::それぞれのプログラムのモジュール +</programlisting> +</para> + + +<sect1> +<title> 例: 配送の場合 </title> + +<para> +loader から次々と呼ばれていく様子は、例えば配送処理の場合、次のよう +になる。 + +<programlisting> +libexec/loader は FML::Process::Switch をロードし、 +FML::Process::Distribute を実行すると決める。 + +FML::Process::Flow::ProcessStart() は引数として +FML::Process::Distribute を渡され、 +FML::Process::Distribute を実行していく。 +</programlisting> +</para> +</sect1> + + +<sect1> +<title> FML::Process:: クラスの階層構造 </title> + +<para> +<programlisting> +FML::Process::Distribute >-| +FML::Process::Command >-|-- FML::Process::Kernel +FML::Process::Mead >-| | + |-use-a FML::Parse + |-use-a FML::Config + |-use-a FML::Log + |-use-a ... その他 ... +</programlisting> + +=> +<ulink url="../../../fml/lib/FML/Process/programs.ja.html"> +FML::Process::それぞれのプログラムのモジュールについて +</ulink> + +</para> +</sect1> + + +<sect1> +<title> ブートしていく順番について </title> + +<itemizedlist> + + <listitem> + <para> + libexec/loader (wrapper) + Bootstrap() を実行する。 + fml.pl などはこの loader へのシンボリックリンクです。 + /usr/local/libexec/fml/ を参照して下さい。 + </para> + </listitem> + + <listitem> + <itemizedlist> + <listitem> + <para> + /etc/fml/main.cf を読み込む。 + 読み込むと fml のバージョンが分かる。 + default_config.cf はバージョン依存であるので、 + ここでまずバージョンを評価しなければいけないことに注意。 + </para> + </listitem> + + <listitem> + <para> + ( fml.pl を例にとると) + @ARGV を評価し、 + どのMLの config.cf 群をロードすればいいのかを準備する。 + 変数の評価と展開には libexec/Standalone.pm を用います。 + + これはあまりよくないような気がします。 + libexec/ を @INC に加えないといけないこと、 + libexec/loader と libexec/Standalone.pm の2つが + 入れ換えないといけないものになってしまうので。 + </para> + </listitem> + + <listitem> + <para> + 次に + FML::Process::Switch + ( バージョン依存 )ファイルを + ロードします。 + </para> + + <itemizedlist> + <listitem> + <para> + Bootstrap2() および ProcessSwitch() を実行し、 + 配送用、コマンドモード用などの各 + プログラム/プロセスなどへ制御を移します(分岐する)。 + この時は $0 から自分の名前を知り、 + どのプロセスへ分岐すればいいのかを判断しています。 + </para> + </listitem> + + <listitem> + <para> + (ポリモーフィズムの例) + モジュールをダイナミックバインディングし、 + 該当するプロセスオブジェクトを生成する。 + そして、プロセスをスタートさせます。 + + FML::Process::Flow の中に、 + どのように fml プロセスを実行するかが + 定義されています。 +<programlisting> +$process = new FML::Process::なにか; +$process->prepare($args); +$process->run($args); +$process->finish($args); +</programlisting> + のように実行されています。 + 各プロセスは、それぞれについて適当な関数を + 用意してください。 + </para> + </listitem> + </itemizedlist> + </listitem> + </itemizedlist> + </listitem> +</itemizedlist> +</sect1> + +</chapter> diff --git a/fml/doc/ja/tutorial/internals/main.cf.sgml b/fml/doc/ja/tutorial/internals/main.cf.sgml new file mode 100644 index 00000000..55e37fe1 --- /dev/null +++ b/fml/doc/ja/tutorial/internals/main.cf.sgml @@ -0,0 +1,86 @@ +<!-- + $FML: main.cf.sgml,v 1.1 2001/04/24 11:40:58 fukachan Exp $ +--> +<sect1 id="main.cf"> +<title> /etc/fml/main.cf </title> + +<para> +/etc/fml/main.cf は各MLの設定ではありません。 +これは、バージョン依存性を解決するための設定ファイルです。 +fml のプログラム群が起動する時に参照します。 +</para> + + +<para> +<screen> +# fml version +# This is important +# Example: fml 5.0 +# fml-current YYYYMMDD +# fml-devel YYYYMMDD +fml_version = current-20010423 + + +### +### DIRECTORIES +### + + +# $config_dir holds the global main configuration and +# several version-dependent default configurations +# Example: /etc/fml +config_dir = /etc/fml + +# Example: /etc/fml/defaults/$fml_version +default_config_dir = $config_dir/defaults/$fml_version + +# Example: /usr/local +default_prefix = /usr/local + + +# Example: /usr/local/libexec/fml +libexec_prefix = $default_prefix + +# Example: /usr/local/lib/fml +lib_prefix = $default_prefix + +# Example: /usr/local/libexec/fml/$fml_version +libexec_dir = $libexec_prefix/libexec/fml/$fml_version + +# Example: /usr/local/lib/fml/$fml_version +lib_dir = $lib_prefix/lib/fml/$fml_version + +# site local library location +# which is prepared but not used by fml itself +local_lib_dir = $default_prefix/lib/fml/site_local + + +# ml's home directories +# $ml_home_dir (e.g. /var/spool/ml/elena ) is taken from loader's @ARGV. +# This is compatible with fml 4.0. +# Example: /var/spool/ml +ml_home_prefix = /var/spool/ml + + + +### +### CONFIGURATION FILES AND DEFAULT PARAMETERS +### + + +# default domain +default_domain = fml.org + + +# version dependent default_config.cf location +# whic holds +# Example: /etc/fml/defaults/5.0/default_config.cf +default_config = $config_dir/defaults/$fml_version/default_config.cf + + +# domain specific configurations +# Example: /etc/fml/domains/fml.org/default_config.cf +domain_default_config = $config_dir/domains/$default_domain/config.cf +</screen> +</para> +</sect1> |
