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

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

○ 動作実績
	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] MLサーバの理論をかく


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

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

	ユーザ root になり、configure そして make install です。
	つまり典型的なインストール手順を行なって下さい。
		# ./configure
		# make install

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

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

	ユーザ fml を作るだけでなく、きちんとユーザ fml さんのホームディ
	レクトリも作って下さい。

	パッケージ作成者のかたへ: 
		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 と使い方は一緒です。

	ML作成時には 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版)を使ったML

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

	POP によるMLの実行は実装済みですが、IMAP 版は未実装です。


7章 fml8 のアップグレード

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

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

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


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

	ML作成時にデフォルトで CGI スクリプトが用意されます。
	無効の .htaccess で動作しないようになっています。

	別途 WWW サーバの設定(CGI および認証の設定)が必要です。

	[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 
	という2つの変数で定義されています。後者は 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)。


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

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

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

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

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

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

		MLの作成			OK
		MLの削除			OK
		MLのメンバーの登録と削除	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

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

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

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

		まとめおくりは、簡易バージョンが動いています。

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

	[TODO]	rmml したMLをふっかつさせることは?

		renew コマンドでしょうか?

		動作は「一番日付が最近の @xxx.yyyymmdd を探して戻す」
		となります。しかしながら aliases を復活させる問題があ
		るので、もう一度 newml もする必要があるだろう…

	[TODO]	期限つきのML入会 subscribe

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

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

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


	[TODO]	期限つきのML作成


	[TODO]	期限つきの自動ML作成 (途中まで実装済み)

		libexec/faker
			時刻を FML::User::DB でどっかに記録
				shared_db_dir/ml_create_time
				
		いや、うむをいわさず、newml コマンドでごーでいいのかな?
			
		/etc/postfix/virtual
		   @nuinui.net       faker=nuinui.net

		/etc/mail/aliases
		   faker=nuinui.net  :include:/ml/nuinui.net/@@faker@@/include


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

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

		key = value

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

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

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

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


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

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

	例: デフォルト (メンバーであれば投稿可能)
		article_post_restrictions =
				reject_system_special_accounts
				permit_member_maps
				reject

	例: PGP 電子署名で認証

		article_post_restrictions =
				reject_system_special_accounts
				check_pgp_signature
				reject

	例: 誰でも投稿可能
		article_post_restrictions = permit_anyone


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

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

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


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

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

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

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

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



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

		うーん、コマンドごとに指定できるようにしないとか?

		$subscribe_command_mode	=	auto / manual
		$chaddr_command_mode	=	auto / manual
		$unsubscribe_command_mode =	auto / manual

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

		今はデフォルトで confirm つきの自動登録です。
		いまは confirmation タイプしかありません。

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

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

	[TODO] モデレータ 

		moderator_*_map だけ定義がある。定義があるだけ;)

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

	[TODO] 登録と削除をまとめておこなう

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

	[TODO] qmail-ext によるコマンド

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


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] site local のディレクトリを決める
		/etc/fml/ 以下?
		site_local/ ?
		$domain/ ?

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

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

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


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

	実装済み (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章 トラフィックを制限する(メール爆弾対策)

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

	ML全体で同じデータベースを使う。
		下準備はしてある → 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で公開する

	デフォルトで作ることになっています。デフォルトでは

		~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が出来るが、これらも選択できるほうが
		良いかも#2万通以上のMLがあるとallは不要と思えてくる...

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



21章 まとめ送り

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

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


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

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


V部 その他のトピック

26章 日々の運用について

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

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

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

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

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

		log_rotate_size = バイト数

	[削除]	var/log/_smtplog.数字ではなくなりました。

	[TODO] スプールの圧縮
	[TODO] スプールを tar などにまとめる (mode_archive)
	[TODO] スプールの expire (mode_expire)
	[TODO] 設定ファイルなどの RCS 管理
	[TODO] 設定ファイルなどの CVS 管理
	[TODO] log suffix extension: log.YYYYMMDD とかは?

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

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


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

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

	[TODO] カスタマイズを可能にする
	[TODO] カスタマイズされたモジュールの置き場所
	[TODO] エラーメールのフォワードについて改良 (fml-devel 451)

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

		+(ヘッダ情報+そのエラーメールのアドレスの分析レポー
		ト)とかなんか付けると便利?


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

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


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

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


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

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


VII部 Advanced Study

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

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

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

	[TODO] PostgreSQL 対応


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

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

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

	[TODO] 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.37 2005/06/26 00:08:00 fukachan Exp $