summaryrefslogtreecommitdiff
path: root/fml/doc
diff options
context:
space:
mode:
Diffstat (limited to 'fml/doc')
-rw-r--r--fml/doc/ja/tutorial/internals/bootloader.sgml153
-rw-r--r--fml/doc/ja/tutorial/internals/main.cf.sgml86
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>
+
+=&gt;
+<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>