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 $