		STATUS: fml-devel で現在できること/できないこと
		Last Modified: $Date$ (GMT)

	* このドキュメントは"fml bible" の目次に沿って、fml version 8 で
          何ができて何がまだできないかをリストアップしたものです。

○ 動作実績
	perl 5.8.8   on NetBSD 2.0.2				
	perl 5.8.5   on NetBSD 2.0				*
	perl 5.6.1   on NetBSD 2.0				*
	perl 5.6.1   on NetBSD 1.6				*
	perl 5.6.1   on NetBSD 1.5.x (1.5 stable)		*
	perl 5.6.1   on FreeBSD 5.2.1
	perl 5.00503 on FreeBSD 4.6.2 RELEASE			*
	perl 5.00503 on FreeBSD 4.7 RELEASE-p3
	perl ?       on FreeBSD 4.6 RELEASE
	perl 5.00503 on FreeBSD 4.3 STABLE
	perl 5.6.1   on Turbolinux Server 8 (qmail)		*
	perl 5.6.1   on Redhat Linux 7.2 (postfix)		*
	perl 5.00503 on Redhat Linux 6.2 (sendmail8.11.6)	*
			smrsh はリンク張る必要はあります。

	postfix       + perl 5.6.1 on Solaris 7			*
	postfix 2.0.3 + perl 5.6.1 on Solaris 9			*

		[注意]
		  * 新 installer がうまく動いている OS 
		 () テスト中

3章
	[TODO] ＭＬサーバの理論を書く


II部　fmlのセットアップ〜MLの作成

4章　Unix上でのfmlのインストール

	「ユーザ root になり、configure そして make install を実行」です。
	つまりフリーソフトウエアの典型的なインストール手順を行なって下さい。
		# ./configure
		# make install

	fml プロセスのユーザや使用するディレクトリは
	configure のオプションで変更可能です。

	メールサーバの設定は 4.0 の場合と同様です。

	ユーザ fml を作るだけでなく、きちんとユーザ fml さんのホームディ
	レクトリも作って下さい。というのは ~fml/public_html でＭＬの公
	開をする、ＣＧＩを動かすというのがデフォルトの設定だからです。

	パッケージ作成者のかたへ: 
		fml8 一式を / 以外の場所へインストールする際は、
		以下のように install_root でディレクトリを指定して下さい。
		# make install install_root=/tmp/dir
	
	[TODO] sendmail + smtpfeed の場合のセットアップ方法

	[TODO] MacOS X Server の場合のセットアップ方法


5章　Unix上でMLを作る

	makefmlコマンドを使って"makefml newml elena" などと実行します。
	つまり fml 4 と使い方は一緒です。

	ＭＬ作成時には postfix と qmail、sendmail、procmail の設定見本
	を作ります。

	[TODO] sendmail + smtpfeed の場合
	[TODO] MacOS X Server の場合

	なお fml8 では newml 時に設定用 CGI や、HTML 化された記事をお
	くディレクトリ ~fml/public_html/ .. なども作成します。

	バーチャルドメインの扱いは fml4 と異なりバーチャルドメインを含
	めて統一化した使い勝手となっています。なので、全てのＭＬをバー
	チャルドメインとして扱う方が便利だと思います。

	たとえば nuinui.net を例にとります。まず最初に nuinui.net 用の
	トップディレクトリを指定します。

		% makefml newdomain nuinui.net ディレクトリ

	newml の際には

		% makefml newml elena@nuinui.net

	のようにドメインつきの名前を指定して下さい。

	注意: main.cf の古い変数名 virtual_maps は obsolete です。これ
	は ml_home_prefix_maps になりました。ml_home_prefix_maps が
	virtual_maps を含んでいるので virtual_maps も一応つかえます。


6章　Windows 2000/NT4上でのfmlのインストール

	[TODO]	Microsoft ものは全然手をつけていません。
	[TODO]	Microsoft ものは IMail から手をつけるのがいいんじゃないかな
	[TODO]	sendmail (NT版)を使ったＭＬ

	なお fetchfml (POP/IMAP サーバからメールを取り出す MTA + MLエ
	ミュレーション)により、メールサーバを立ち上げなくとも自宅でＭ
	Ｌを実行すると行ったことが可能です。→ fetchfml の項目を検索

	POP によるＭＬの実行は実装済みですが、IMAP 版は未実装です。
		→ fetchfml の項目を検索


7章　fml8 のアップグレード

	もう一度 fml8 をインストールをし、/usr/local/etc/fml/main.cf の 
	fml_version を編集してください。これだけで任意のバージョンへの
	アップグレードとダウングレードが可能です。つまり main.cf の編
	集をするだけでアップグレードもダウングレードも思いのままです。
	システムコール一発、数ミリ秒で。

	main.cf の編集だけですので、fml8 のアップグレード/ダウングレー
	ドの際にメールサーバの停止は不要です。

	ＭＬ固有のアップグレードに関する注意はないとおもいます。
	さすがに特定のＭＬだけアップグレード/ダウングレードという方法
	はありません。


8章　Unix上でのCGIのセットアップ

	ＭＬ作成時にデフォルトで CGI スクリプトが用意されます。

	この時、無効の .htaccess を生成して、デフォルトでは CGI が動作
	しないようになっています。
	また、別途 WWW サーバの設定(CGI および認証の設定)が必要です。

	[TODO] apache の設定見本を生成

	[TODO] .htaccess の設定支援ツール

		設定支援ツールがまだありません。いまのところは、エディ
		タでファイルを消すなり、編集するなりして下さい。

	[TODO] config 

	[TODO] $maintainer のリストを CGI から設定したい

	[TODO]	cgi のスタイルシート対応
		文字を小さくした方がいいとか…の類。
		＃だれか、やってぇ〜 ;)

	[TODO] エラーフレームワーク
		CGI からのエラーは __ERROR_.(キーワード)__ で croak() 
		していますが、もう少し良いフレームワークがあるとよいです。


9章　fmlの動作確認

	これは fml 4.0 と同様とおもいます。


III部　fmlのカスタマイズ
10章　MLのメンバーができること

	(一般ユーザが)コマンドメールで利用可能なコマンドは
		$user_command_mail_allowed_commands
		$anonymous_command_mail_allowed_commands 
	という２つの変数で定義されています。後者は guide や subscribe
	など、メンバーでなくても使えないといけないコマンドのリストです。

	一般ユーザ向けのコマンドの例 ($user_command_mail_allowed_commands)
		help get mget get mget send subscribe add unsubscribe
		bye remove resign signoff chaddr confirm guide info
		objective summary

	誰でも使えるコマンドの例 ($anonymous_command_mail_allowed_commands)
		guide info add subscribe chaddr confirm

	これらは FML::Command::User:: クラスで定義されています。

	リモート管理のためのコマンドは別のクラスになっています。
	利用可能なコマンドリストは $admin_command_mail_allowed_commands で、
	モジュールの実体は FML::Command::Admin 以下にあります。

	なお、簡単なまとめおくりも可能です。

		use_article_digest_function = yes / no

	により使う/使わないが指定できます(デフォルトは yes)。

	まとめおくりは MIME/Multipart のみサポートしています。


	[TODO] get: ファイル数が多い場合、分割して送返(fml-devel 485)
		reply_message() によろしくねーとしかしてないので、
		メールキューに入れる時に分割？

11章　fml管理者ができること

	makefml で操作可能な項目は FML::Command::Admin:: クラスの
	コマンドすべてです。$admin_command_mail_allowed_commands は
	コマンドメールによるリモート管理に制限を加えますが、CUI
	(makefml/fml)の動作には制限を加えていません。

	つまり CUI によるＭＬサーバ上での操作ではリモートコマンドより、
	いろいろな操作が可能です。操作できる自由度は 

		CUI (makefml/fml コマンド) > コマンドメール > GUI

	の順に大きなものとなっています。

		ＭＬの作成			OK
		ＭＬの削除			OK
		ＭＬのメンバーの登録と削除	OK
		登録しているアドレスの変更	OK
		off/on				OK

	コマンド一覧: add add2active add2actives add2member
	add2members add2recipient add2recipients addactive addactives
	addadmin addmember addmembers addmoderator addpriv
	addrecipient addrecipients adduser adminadd admindel bye
	byeadmin byepriv chaddr changepassword check chpass config
	deladmin delmoderator deluser digest digestoff digeston dir
	edit error file flush flushq get htmlify initpass list log ls
	mailq mergeml mget moderatoradd moderatordel newdomain newml
	off on pass passwd password remove resign rmdomain rmml
	signoff spool subscribe summary thread unsubscribe useradd userdel

	ＭＬのカスタマイズはファイルの編集かメニュー操作(CUI/GUI)です。
	メニューは実装途中です。

	リモート管理は現在パスワード認証とPGP認証が利用可能です。

	[削除]	まとめおくり (fml 4 のような複雑なバージョン)

		MIME/Multipart のまとめおくりは実装されています。

		受信者ごとに時刻や圧縮形式を変えるといったことは出来ま
		せん。ただ fml 1 の設計された時代と環境が大きく異なる
		現代では、こんな仕様はオーバースペックで不要なのではな
		いかとも思います。

		そういうわけで間違いなく実装しないでしょう。

	[DONE]	rmml したＭＬを復活させる → reviveml コマンド

		1. 一番日付が最近の @xxx.yyyymmdd を探し
		2. それを元に戻し、
		3.もう一度 newml を実行し、aliases などの再設定を行なう。

		という動作をしています。

	[TODO]	期限つきのＭＬ入会 subscribe

		subscribe -> 一カ月すると削除される？

			FML::User::Info -> FML::User::DB	ok

		o.k. so, how to kick off removal process ?


	[DONE]	動的にＭＬを作成する → CREATE-ON-POST 機能


	[TODO]	期限つきの自動ＭＬ作成

		動的にＭＬを作成(CREATE-ON-POST)し、
		使われなくなったら(トラフィックがないなら)自動削除


	[TODO]	期限つきのＭＬ作成 (トラフィック？日にちで有無をいわさず？)




12章　fmlの設定ファイルを変更する

	各ＭＬの設定変更方法は、各ＭＬのホームディレクトリにある 
	config.cf を編集してください。フォーマットは Postfix 風です。

		key = 	value

		key = 	value1
			value2	

		拡張オプションとして += や -= が使えます。

		key += value3

		key -= value1

	/usr/local/etc/fml/site_default_config.cf は、そのサーバの上で
	動いているすべてのＭＬに同じ設定を強制します。これは fml4 の 
	site_force.ph に相当するファイルです。

	メニューによる設定支援ツール(CUI/GUI)は実装途中です。まだ実験
	的なものしか動きません。

	[TODO]	fml4 の site_init.ph にあたるものはありません。これ必要？

		って必要なのかなぁ…？？？


13章　MLのスタイルのカスタマイズ (ケーススタディ)

	◎ 記事の投稿に対する制御

	投稿の制御は $article_post_restrictions で制御します。
	restrictions という名前から分かる通り Postfix 的な考え方の制御
	方法を採用しています。

	＊＊＊重要な変更＊＊＊
	2008/08/03 以降の fml8 では「SPAM メールの隔離」がデフォルトの
	動作です(デフォルトも reject を isolate に書き換えてました)。

	古い fml8 で restrictions を config.cf に書いている場合、
	書き直しが必要です。書いていないなら、アップグレードするだけで
	メールの隔離が動作するようになります。


	例: デフォルト (メンバーであれば投稿可能）

		article_post_restrictions =
				isolate_system_special_accounts
				permit_member_maps
				isolate

	例: PGP 電子署名で認証

		article_post_restrictions =
				isolate_system_special_accounts
				check_pgp_signature
				isolate

	例: 誰でも投稿可能

		article_post_restrictions = permit_anyone

	従来はルールにマッチしない場合 reject 命令で終っていました。
	これは、送信者に返事を出してしまいます。

	isolate 命令は、隔離するだけで返事を出しません。

	[TODO] 隔離レポートを管理者へ送信。

	[TODO] 隔離メールをＭＬに流す命令の実装

	[TODO] 隔離レポートで、メールをＭＬに流す操作はどうする？


	◎ コマンドメールに対する制御

	(一般ユーザからの)コマンドメールにたいする制限は
	$command_mail_restrictions で制御します。

	コマンドメールを禁止するには $use_command_mail_function を no 
	にすればよいです。これはコマンドメールの機能自体を停止します。
	コマンドメールを受けると受信はしますが、そのまま無視します。

	$command_mail_restrictions で reject とだけ指定してもコマンド
	メールの禁止になりますが、この場合コマンドメールの処理が行なわ
	れてしまいます。

	＊＊＊重要な変更＊＊＊
	2008/08/03 以降の fml8 では「SPAM メールの隔離」がデフォルトの
	動作です(デフォルトも reject を isolate に書き換えてました)。

	古い fml8 で restrictions を config.cf に書いている場合、
	書き直しが必要です。書いていないなら、アップグレードするだけで
	メールの隔離が動作するようになります。

	restrictionsと同様にメンバーリストも member_maps のように
	複数かけることが前提です。*_restrictions と *_maps の細かな定
	義を使うと特別な hack なしでもいろいろなことができます。

	例: メールマガジン型
		$member_maps から $primary_member_map をはずす。
		$member_maps に投稿可能なメンバーのリストを追加
		さらに MTA の設定で IP アドレス制限などかけてね。

		投稿者を PGP 認証で制限するのもよいことです。

	例: 階層化されたＭＬ:
		 $member_maps $recipient_maps をよろしく書くだけです。

	例: procmail によるＭＬ
		makefml newml が見本を作るので、それを使うだけです。


	[DONE] 自動登録/手動登録をどこで指定するの？デフォルトは自動

		コマンドごとに指定できるようにする。

		$subscribe_command_operation_mode   = automatic / manual
		$chaddr_command_operation_mode      = automatic / manual
		$unsubscribe_command_operation_mode = automatic / manual

	[DONE] 自動登録の confirmation 以外のモードは必要か？ 

		confirmation ではなくリクエストをそのまま
		管理者へフォワードするオプションあり。

		$subscribe_command_auth_type   = confirmation / manual
		$chaddr_command_auth_type      = confirmation / manual
		$unsubscribe_command_auth_type = confirmation / manual

	[DONE] コマンドメールによる手動登録

		confirmation は fml8 で、登録作業は makefml コマンドなど。

		設定例: subscribe を
		$subscribe_command_auth_type      = confirmation
		$subscribe_command_operation_mode = manual


	[DONE] モデレータ 

		fml4 のタイプ 2 だけ実装しましたが 1 と 3 は未実装

	[DONE] 複数の管理者による運用

		$maintainer_recipient_maps を定義すれば、
		その管理者たちへ転送される。 

	[TODO] 登録と削除をまとめておこなう (コマンド一つ＋複数アドレス)

	[TODO] listserv 風のコマンドアドレス

	[DONE] qmail-ext を使ったコマンド e.g ML-subscribe@DOMAIN 可能

	[削除] ＭＬ本体でコマンドメールも受けられる機能


14章　ヘッダの書き換え

	FML::Header とフックを使えばできます。
	多くのヘッダ操作は FML::Header クラスの提供するアクセスメソッ
	ドになっています。

	[TODO] RFC 3282 (Content Language Headers) を考慮する


15章　fmlの返すメッセージをカスタマイズする

	/usr/local/share/fml/$fml_version/message/$charset/
	にあります。

	Accept-Language: X-Accept-Language: Content-Type: 
	などを見て、返すメッセージの言語を決めています。
	曖昧な場合、複数の言語で返します(mime/multipartになります)。


	[TODO] メッセージカスタマイズ設定の支援ツール


	[TODO] site local のディレクトリを決める
		/etc/fml/ 以下?
		site_local/ ?
		$domain/ ?

	Q: ML LOCAL なメッセージの変更は？

		例えば、文字コードが euc-jp のメッセージ・テンプレートは

			$ml_home_dir/local/share/message/euc-jp/
	
		に置くとそちらが優先される


16章　記事のフィルタリング

	[DONE] フィルタは実装済み (FML::Filter クラス)
		ヘッダフィルタ
		本文に対するフィルタ
		text/plain に対するフィルタ
		MIME 構造に基づくフィルタ
		その他
			特殊なウィルスなども含む

	4.0 の ContertFilter 相当機能は mime_component_filter です。
		ファイル名は	/etc/fml/mime_component_filter
		デフォルト値は  /etc/fml/mime_component_filter

	[TODO] 統計をとりたい(どのルールにどのくらい引っかかったか？)
		
	[TODO] 統計を見せるコマンド（必要？）

	[TODO] 統計のためのデータベース

	[TODO] フィルタの拡張機能？ content-type が正しいかどうかを調べる

		Q: content-type が正しいかどうかを調べる
			image/gif なら本当に gif ?

		A: ん〜全部は無理だなぁ。File::なんとかで、
		   ファイルのタイプを識別するモジュールとかあれば OK 
		   なのかもしれず(?)

		Q: まだ、text/plain 部分は言語依存パートになってない（？）

			だいたい言語依存とかいうなら virus checker を
			切り離せよ ＞ おれ

			など、てんこもりなので、text_plain_filter って
			ちょっと整理が大変だなと。

		Q: 古いメールは SPAM に違いない


17章　トラフィックを制限する（メール爆弾対策）

	コマンドメールで、コマンドごとのリクエスト数制限は実装されている。

	ＭＬ全体で同じデータベースを使う。
		下準備はしてある → UDB 
	
	[TODO] トラフィックフィルタ自体は未実装


18章　リモート管理（メールでfmlを操作する）

	管理者がコマンドメールで使える特権コマンドつまり admin コマン
	ドは $admin_command_mail_allowed_commands という変数で定義
	されているものが利用可能です。

	利用可能なコマンドは FML::Command::Admin:: クラスの部分集合です

	各ＭＬのホームディレクトリ/etc/passwd-admin
		fml4 の etc/passwd は fml8 の etc/passwd-admin です。
		フォーマットが微妙に違います（拡張されている）
		操作ツール、コマンドは fml4 と同じです。

	[DONE] 共通鍵暗号認証

	[DONE] 公開鍵暗号認証 (電子署名が正しいなら認証OK)

	[TODO] "approve パスワード コマンド"型構文サポート


19章　MLの暗号化 (配送時の暗号化)

	[TODO] 配送時の暗号化 共通鍵暗号認証

	[TODO] 配送時の暗号化 公開鍵暗号認証


20章　MLの記事をWWWで公開する

	[DONE] 記事の WWW アーカイブ → デフォルトで作成。

		デフォルトでは

		~fml/public_html/fml/mlarchive/$domain/$ml_name/

		というディレクトリに作ります。このまま作るなり、適宜
		alias を切るなりして使うとよいでしょう。

	[TODO] permission はこれでいい？

	[TODO]	Mail::Message::ToHTML
		X-Sequence: fml-devel 515

		2) indexの要、不要について

		現状ではall,monthly,threadが出来るが、これらも選択できるほうが
		良いかも#２万通以上のMLがあるとallは不要と思えてくる...

		3) thread.htmlの月別の作成＆出来れば逆順のもの



21章　まとめ送り

	簡易版のまとめおくりはサポートされている。

	[TODO] fml 4 のような粒度の細かなまとめ送り


IV部　トラブルシューティング

	[TODO] トラブルシューティング事例を集める


V部　その他のトピック

26章　日々の運用について

	スプールは真っ平ら or 一階層構造のどちらでもとれます。
	何万通も流れそうなＭＬでは一階層構造がお薦めです。
	デフォルトは fml4 との互換性のため真っ平らです。

	デバッグのためにメールを一定量つねに保存しています。
	これは記事の保存とは別の仕組みで、全プロセスの入出力の記録です。

	   受けとったメール(incoming mails)をすべて保存する。
		var/mail/incoming/ 以下に保存します。
		fml4 と異なり保存がデフォルトの挙動です。

	   出ていくメールを保存する。
		var/mail/outgoing/ 以下に保存します。
		fml4 と異なり保存がデフォルトの挙動です。

	ログファイルへの newsyslog (fml4 の $LOGFILE_NEWSYSLOG_LIMIT)
		use_log_rotate = yes

		log_rotate_size = バイト数

	[削除]	「var/log/_smtplog.数字」ファイルは無くなりました。

	[DONE] スプールの expire (mode_expire)

	[DONE] log suffix extension: log.YYYYMMDD とかは？

	[TODO] スプールの圧縮

	[TODO] スプールを tar などにまとめる (mode_archive)

	[DONE] 古い記事の自動消去

		use_article_expire = yes (デフォルトは no)

		デフォルトのリミットは 90 日。	
		article_expire_limit = 90d

	[TODO] 設定ファイルなどの RCS 管理

	[TODO] 設定ファイルなどの CVS 管理

	[TODO] log suffix extension: log.YYYYMMDD とかは？

	[TODO] 「このＭＬはもうありません」オプション

		libexec/ の下の全部のプログラム全部が対応して、
		ml や ml-ctl 宛に来たメールにみんな返事を返すべきだ。
		ただし、negative cache つきで（同じアドレスには一回し
		か返事をしない)。コマンドじゃなくて変数でしょうねぇ。
		デフォルトでは off (SPAM 対策）。


27章　エラーメールを自動解析する

	Mail::Bounce モジュールを使う。
	自動削除も可能。

	[TODO] カスタマイズを可能にする

	[TODO] カスタマイズされたモジュールの置き場所

	[TODO] エラーメールのフォワードについて改良 (fml-devel 451)

		maintainer_recipient_maps は実装済み
		デフォルトは未定義、フォワーディングはしない

		＋（ヘッダ情報＋そのエラーメールのアドレスの分析レポー
		ト）とかなんか付けると便利？


28章　メールサーバの変更/引越し

	手間は 4.0 とほとんど同じかな

	[TODO] fml project 第５世代への移行ログを残すこと。	


29章　バーチャルドメイン

	デフォルトで考えてある。


VI部　fmlの内部構造と機能拡張

30章　変数と関数

	変数一覧は常に更新されている。fml8 チュートリアルを参照。


31章　リストファイルのフォーマット

	fml8 チュートリアルを参照。


32章　fml.plプロセスの動作

	[TODO] 汎用エラートラップフレームワーク
		CGI も含めて汎用のフレームワークがほしい

		エラーをどのように呼びだし側へ組織的に伝えるか？

		$curproc->error_regist( { キー => オブジェクト } );
		croak(エラーのキー);

		？ 必要な場所すべてに $curproc ってのが難しそう？

		エラーをどのように呼びだし側へ組織的に伝えるか？
		オブジェクトか HASH_REF ごとわたせないか？


33章　デバッグをする

	モジュール単位で $debug という変数がある場合がある。
	デバッグの時はモジュールを直接書き換えるしかないけど

	デバッグ用のディレクトリを作って main.cf で制御してもよいね


34章　コマンドメールのカスタマイズ

	Q: カスタマイズされたモジュールを置く場所は？

	$ml_home_dir の下に local/lib ってのがある、その下におく

	例: $ml_home_dir/local/lib/FML/Command/User/help.pm

		を作ると、そのＭＬ独自のヘルプコマンドとなる


35章　ケーススタディ：HOOKによる拡張

	[レシピ] subject: によってフォワード先を変えられる？


VII部　Advanced Study

36章　fmlからデータベースへのアクセス

	はじめから前提です。
		IO::Adapter に組み込まれている

	[削除] replace メソッドは削除した

	[DONE] PostgreSQL 対応


37章　配送の高速化について (+ 配送関係の TIPS )

	[レシピ] フォワードする関数
		multipart ということではなく、いきなり曲げる
		宛先を変えるということか？

	[TODO] 配送ルーチンが自動分割を頑張るオプション
		reply_message() の先？
		それって、メール爆撃するあれか？ ;) 
		text/plain を適当に切ると読めないような気がするが…

	[削除] Mail::Delivery の LMTP モード 
		キュー管理しないといけない
		→ 無駄に難しいので不要では？

	[TODO] outgoing address hack
		SPAM 対策についてドキュメントを書く

	[TODO] execute $program on the disk NOT IPC.


38章　試論：現代的サーバデザインについて
VIII部　付録
付録D　virus_check.phの例


        ********* ********* ********* ********* ********* ********* 
	いまひとつ分類できないかな？

* スケジューラ
	alarm() によるスケジューラ
	queue manager for LMTP ? 


        ********* ********* ********* ********* ********* ********* 
	fml-devel 固有の TODO




---
$FML: STATUS.txt,v 1.42 2008/08/11 05:07:54 fukachan Exp $
