[______TOC_______] [NEXT CHAPTER]

1 概要

    ＊＊＊ まだまだ、整理途上です。 ＊＊＊

    ここは 内部構造について、fml 開発者向け情報の集積地です。旧
    fml/doc/smm/ の一番濃い部分がここに移されてきたと思ってもいいです。

    -- ＭＬサーバの設計ポリシーとはなんだろうか…

       ・日々の routine work をいかに自動処理化できるか？

       ・可能な限り user および ＭＬ管理者 にとっての自由度をあげる

       ・デフォールトは単に配送とユーザ用のコマンド(help や記事の取り
         寄せ、配送先の変更/停止等)

       ・しかしそれ以外の様々な機能もひととおり準備されていると便利
         これらの高度な設定は管理者が明示的に設定しなければならない。
         というのは管理者は何をしているのか知っているべきだし、
         何をしているかの把握はセキュリティ的にも望ましい。

        ………

    1.1	ML Server Process Overview

    ＭＬサーバは本質的にフィルタリングをするものです。ＭＬ宛のメールが来た
    ら配送プログラム(MTA)から起動されいろいろな処理をした後、配送するべき
    (MLの)メンバーリストを配送プログラムへ渡します。後は配送プログラムが配
    送を行ないます。つまり配送はＭＬサーバの役目ではありません。

    [図]

    あるホスト                                    ＭＬサーバのマシン

    ＭＬのメンバーからのメール

       |
       V
      MTA (e.g. sendmail)  ------------------>     MTA (e.g. sendmail)

                                                    |  kick off the ML server
                                                    V

                                                ＭＬサーバ(ドライバともいう)

                                                    |
                                                    V

                                        MTA (e.g. sendmail)  配送プロセス

                                                 |  |  |  |  |  |
                                                 V  V  V  V  V  V

                                                 ＭＬのメンバー

    配送プロセスは上図のように動きます。ＭＬサーバが普通のメールではなくあ
    る命令(ＭＬを辞める、過去の記事を読むなど)を含んだメールをうけた場合は、
    それ(コマンド)を実行してその結果をリクエストした人へ送り返します。

    上図からわかるとおりＭＬ宛のメールが来た時だけＭＬサーバは起動されます。
    つまり"不定期"にです。そのためリアルタイムにＭＬの記事(メール)を読みた
    くない人、例えば3時間に一度過去3時間のメールをまとめて読む「まとめ送り」
    の場合は"定期的に"まとめ送り(../digest 2.0)を実行するプログラムが起動さ
    れる必要があります。FMLは定期的に起動しなければならないプログラム群は
    cronというオペレーティングシステムが提供する機能を使っています。
    ../digest 2.17
    ../digest 2.17

    1.2	Historical View

    FML は Mailing List Server の package (Perl Scripts package) で、
    僕が壱から Full Scratch したものです。
    ＃おまけCDROMつき雑誌等にある「…の改良」の記述は間違った推測なのです

    これからＭＬをはじめる方にはそのままＭＬサーバをカスタマイズして使いた
    いとおもっている方には改造の PLATFORM として利用してもらうことを想定し
    ています。

    最初の発端は(フリーソフトの例にもれず)

    	bug っているサーバ、
    	機能の足りないサーバ、
    	直すより自分で書いた方が早い

    単にそういう話でした(ま、よくある話ですね:-)。

    歴史的に hml 1.6 を一時期使っていて、その設定ファイルをコンバートする
    のは面倒でした。そのためhml 1.6 を emulation するように設定することも
    できます。

    1.3	Policy

    『Mailing List は Private Communication を便利にするツール(Filter) 』
    という観点を重視しているため、デフォールトではメンバーのみが投稿やコマ
    ンドを使える という考え方を尊重しています。

    プログラムを使う以上は日々の routine work をいかに自動処理化できるか？
    使いやすくできるか？が重要です。そのためにもユーザにみえるインターフェ
    イスなどは様々なインターフェイスが提供されて好きなものを使うのが理想で
    しょう。デフォールトは

    	『投稿用のアドレス』と『コマンド用のアドレス』があり、
    	それらのアドレスでMTA (e.g. sendmail)が受けて fml.pl を起動する

    という形態です。しかし『可能な限り user および ＭＬ管理者 にとっての自
    由度をあげる(簡単に設定できる自由度をできるだけ確保するべき)』という理
    想も追求したいところです。その結果として

       ・設定ファイルには sendmail.cf なみに様々な変数が定義されている

    のを筆頭に

       ・コマンド用のアドレスは listserv(majordomo) スタイルでも可能

       ・ sendmail が動いていなくても POP3 を使ってＭＬを実行する

    等様々なインターフェイスがパッケージ中に収録されています。

    ＭＬサーバというものは一番肝心な部分はかなり簡単なのですが、実際にはさ
    まざまな例外処理が発生します。それをいかに封じ込めるかをノウハウという
    わけです。またユーザー環境による違いを吸収するためにさまざまな関数をサ
    ポートする必要がありました。例えば ish, lha サポートはその一例といえる
    でしょう。

    一方セキュリティ的には

       ・必要なことはしても、できるだけ何もしない
       ・機能の増加は簡単な configuration で、しかし明示的に指定しない限り
         よきにはからって動くべきではない

    といえます。これが

       ある機能をONにする変数はあるが、明示的に指定しない限りONにはしない
       つまりデフォールトでは様々な機能はOFFにされている。

    ということの背景です。

    多くの変数があるのは、簡単にある変数の値を変えるだけで挙動が変えられる
    ようにするためです。また、それにより設定を操作するためのインターフェイ
    スを割と簡単に書くことができます。例えば makefml です。makefml を使っ
    てのインストールや簡単な設定の変更が可能です(ある程度以上複雑なことは
    手でやって下さい)。また頑張ればWWWインターフェイスもすぐ書けるでしょう
    (でも誰も作らないな:-)。

    各種機能はそれぞれの目的に応じて選んでみて下さい。例えば『あるＭＬのロー
    カルな再配送』のような場合はコマンド機能を落して使うべきでしょう。

    例: ip-connection を受けるアドレス (include ファイルを呼び出すアドレス)
    に使う時は、makefml config listname で 配送モード指定を「誰でもPOST可
    能」にする。

    	$PERMIT_POST_FROM = "anyone";

    1.4	機能の概要

    ＭＬサーバはおおまかに
    				設定ファイル(config.ph)の変数
    	_____________________________________________________

    	配送用のアドレス	$MAIL_LIST
    	コマンド用のアドレス	$CONTROL_ADDRESS

    からなります。特別な場合には(歴史的理由により) hml 1.6 (正確にはその元
    祖の shell script) というサーバを Emulate します。特別な場合とは

    	配送用のアドレス==コマンド用のアドレス
    	($MAIL_LIST == $CONTROL_ADDRESS)

    に相当します。

    ＭＬサーバの現在の代表的な機能は以下のようなものです。

       ○ 配送用のアドレスとコマンド用のアドレス
    	-- Chapter ../how_to_subscribe 6.1

    	それぞれについてアクセス制御や自動登録の設定
    	なお特別な場合「配送用のアドレス==コマンド用のアドレス」は hml 1.6

       ○ 様々な自動登録方式
    	-- Chapter ../how_to_subscribe 4.0

    	前述のどのアドレスで？ x 4種類 x 各カスタマイズ変数…

       ○ unsubscribe confirmation

    	confirmation を bye/unsubscribe コマンドでも使用可能に

       ○ リモートメインテナンス/リモート管理
    	-- Chapter ../remote_control 4.0

    	PGP, パスワード認証等の選択
    	-- Chapter ../encryption 4.0

       ○ 様々なヘッダカスタマイズ
    	-- Chapter ../header_rewrite 5.0

       ○ セキュリティ: 内蔵トラフィックモニタ (e.g. メール爆弾対策)
    	-- Chapter ../resource_control 2.0

    	例: トラフィックがある程度以上になると
    	ＭＬはメールを自動的に受け付けなくなる

       ○ セキュリティ: フィルタリングコード (e.g. SPAM 対策)
    	-- Chapter ../filter 4.1

    	ヘッダの各フィールドごとのフィルタリングコード

       ○ 様々なコマンド
    	-- Chapter 5.0

    	ファイル取り寄せのコマンド mget コマンドのいろいろなファイル形
    	式のサポート

       ○ まとめおくり
    	-- Chapter ../digest 2.0

       ○ SMTP配送方式(リレー)
    	-- Chapter ../smtp 3.1

       ○ その他(MIME処理等)
    	-- Chapter ../Japanese 2.0

       ○ ＭＬに投稿された記事をHTML 4.0形式で作成する。thread化もする。
    	-- Chapter ../html_convert 1.1 ../html_convert 1.0

       ○ 記事のアーカイブ、Expire等
    	-- Chapter ../daily 3.0 ../daily 5.0

       ○ 複数のコマンドインターフェイス (listserv や majordomo style)
    	みかけがあたかも listserv のようなコマンドの送り方を可能にする
    	-- Chapter ../utility_programs 3.0

    必要に応じて設定ファイルで機能の追加・削減を行うことができます。
    簡単なものは makefml で可能です。

    1.5	インストール

    とりあえず細かいチューニングを行なわなくてよいなら

    	make install

    ことで、インストールをします。ML の作成は

    	perl makefml newml ＭＬの名前

    で何個でも作れます。説明は INSTALL というファイルを見て下さい。

[______TOC_______] [NEXT CHAPTER]