_ めも。OpenSolaris なカーネルで Debian なユーザランドのディストリだそうな。
_ いきなり complete GNU-based って文言が出てくるのな。ドメイン名からして gnusolaris.org だし、まず何をさしおいても宣伝しなくっちゃならないことがそれなんだろうな。別にそんなのどーでもいい、っつーか、そこまで宣伝されるとハナについてイヤなんだけど(別にわしはアンチ GNU じゃないぞ)。
_ Nexenta の中身はまぎれもない Solaris だから、ちゃんと ZFS も使えるようだが、これとは別に Porting ZFS file system to FreeBSDだそうな。すばらしい。生の FreeBSD で使うだけでなく、 FreeNASに ZFS をのっけて USB メモリから起動する RAIDZ な NAS とか妄想は膨らむ。
_ 使いかた。
postfix 2.2 から smtpd_client_XXX_limit というパラメータでアクセスレート制御ができるようになってるけど、サーバ全体でひとつの設定値しか持てない。これをクライアントごとに異なる値で制限することをできるようにする。DoS まがいの大量の spam 打ち込みを食らってるような大規模サーバ向け。上の例では、example.com からの最大同時接続数を10までに、192.0.2.1 からの1分あたりの接続数を30までに制限する。ほかも推して知るべし。-- main.cf smtpd_delay_reject = no smtpd_client_restrictions = hash:/etc/postfix/rate_limit -- rate_limit example.com client_connection_count_limit 10 192.0.2.1 client_connection_rate_limit 30 example.org client_message_rate_limit 20 example.net client_recipient_rate_limit 50 192.0.2.100 client_new_tls_session_rate_limit 30_ postfix 2.4-20060824 へのパッチだけど、2.3.x でも使えるんじゃないかな。TLS の部分を消せば 2.2.x でも動くと思う。たぶん。まともな動作確認はほとんどしていないので注意。TLS にいたってはまったくテストしていない。
_ ちなみに、sendmail は 8.13 以降で標準装備。
_ イギリスの国旗の意匠から「米」という文字を読み取り、いつのまにかアメリカの国旗に脳内変換されてた。どうなってんだわしの脳味噌。
_ Linux ディストリの系譜。うーん、いまいちおもしろくないな。つーか、Linux 最初期のディストリビューションのひとつである Yggdrasil が載ってない時点でアレだ。
_ 一方、 こっちの UNIX の系譜はしっちゃかめっちゃかに入り組んでいて、見ててたいへん疲れる。でも、これだけあってもまだ全部じゃないんだよな。
_ BSD 系に限定するなら、FreeBSD には /usr/share/misc/bsd-family-tree っつーファイルがありますな。ほかの *BSD に似たようなファイルがあるかどうかは知らん。
_ この前のは TLS のテストはしてないと書いたが、脳内シミュレーションの結果、あの程度のかんたんなパッチで実現するのは無理という結論に落ち着いた。不可能ではないが、もっと大がかりな変更が必須。で、実際に環境を作ってテストしてみて、ほんとに動作しないことを確認。TLS セッションが確立した後でエラーを出すことは可能だけど、TLS が重いからリソース保護のため過剰な TLS 要求を拒否したい、というのがそもそもの動機なわけであって、エラーを出すのが TLS セッション確立後じゃ意味がない。
_ ほかにレート制御がほしいのは、単位時間あたりの SMTP AUTH の認証エラー回数の制限かなぁ。同一クライアントからのエラー回数と同一認証ユーザ名でのエラー回数のそれぞれで制限をかけられるとうれしい。ちらっとソースを眺めてみたところ、前者はわりと簡単にパッチを作れそうだけど、後者はちょっとめんどくさそうな感じ。
_ このあたりのつづき。hoge.php というスクリプトに QUERY_STRING ではなく PATH_INFO で引数を与えたいが URL は hoge.php/fuga/piyo ではなく /hoge/fuga/piyo にしたいという件。なんか気が向いたので、それぞれの設定の細かい挙動を調査してみた。実験環境は Apache 2.2.3 + PHP 5.1.5 でいずれも ports でインストール。一部の例を除いて PHP かどうかは関係なく、CGI でも同じ結果になる(はず)。
_ なお、下に挙げた以外に mod_rewrite を使う方法もあるが、嫌いなのでやらない。つーか、こんなにいろんな方法があるのに rewrite はいらんでしょ。
_ その1: 実際に拡張子なしスクリプトにする方法。スクリプトが /home/yamaya/public_html/hoge で、.htaccess に
と記述。結果(一部の環境変数のみ)。<Files hoge> SetHandler php5-script # PHP4 なら php-script だし、CGI なら cgi-script </Files>スクリプトは /home/yamaya の下にあるが、PATH_TRANSLATED は DocumentRoot の下になっている。なんか解せないけどそういう仕様。[REQUEST_URI] => /~yamaya/hoge/fuga/piyo [SCRIPT_FILENAME] => /home/yamaya/public_html/hoge [SCRIPT_NAME] => /~yamaya/hoge [PATH_INFO] => /fuga/piyo [PATH_TRANSLATED] => /usr/local/www/apache22/data/fuga/piyo [PHP_SELF] => /~yamaya/hoge/fuga/piyo_ その2: type-map を使う方法。hoge.php はそのままで、他に type-map ファイルを作る。
結果。-- hoge URI: hoge.php Content-Type: text/html -- .htaccess <Files hoge> SetHandler type-map </Files>hoge → hoge.php にリダイレクトされるため、REDIRECT_xxx という環境変数が設定される。[REDIRECT_STATUS] => 200 [REDIRECT_URL] => /~yamaya/hoge [REQUEST_URI] => /~yamaya/hoge/fuga/piyo [SCRIPT_FILENAME] => /home/yamaya/public_html/hoge.php [SCRIPT_NAME] => /~yamaya/hoge.php [PATH_INFO] => /fuga/piyo [PATH_TRANSLATED] => /usr/local/www/apache22/data/fuga/piyo [PHP_SELF] => /~yamaya/hoge.php/fuga/piyo_ その3: MultiViewsMatchを使う方法。.htaccess に以下を設定。hoge.php はそのまま。
結果。Options +MultiViews MultiviewsMatch Handlersスクリプトのファイル名が違う以外はその1と同じ。確認してないけど、 application/x-httpd-php で MultiViews する場合もたぶん同じ結果になると思う。ただし、以前書いたとおりコンテンツネゴシエーションに難ありなので使うな。[REQUEST_URI] => /~yamaya/hoge/fuga/piyo [SCRIPT_FILENAME] => /home/yamaya/public_html/hoge.php [SCRIPT_NAME] => /~yamaya/hoge.php [PATH_INFO] => /fuga/piyo [PATH_TRANSLATED] => /usr/local/www/apache22/data/fuga/piyo [PHP_SELF] => /~yamaya/hoge.php/fuga/piyo_ その4: この前は書かなかったけど、方法はほかにもある。Action を使う方法。hoge.php とは別に、中身は何でもいいから hoge というファイルを作る(サイズ0でも可)。んで、.htaccess にこう書く。
これにより、hoge へのアクセスで hoge-handler が呼ばれ、hoge-handler として登録された hoge.php が起動される。ちなみに、Apache 2.2 では、Action の3番目の引数として "virtual" を指定すると hoge というファイルは実際には存在していなくてもいい。結果。Action hoge-handler /~yamaya/hoge.php <Files hoge> SetHandler hoge-handler </Files>PATH_INFO が /fuga/piyo ではなく、/~yamaya/hoge/fuga/piyo になっていること、PATH_TRANSLATED が DocumentRoot ではなくユーザのホームディレクトリからのパスになっていることの注意。設定される値が他と異なるので、スクリプトを書く立場ではこの形式をサポートするのはめんどうかもしれない。その他、hoge → hoge.php にredirect されてるので REDIRECT_xxx が設定される。REDIRECT_HANDLER は以前のバージョンの Apache ではたしか設定されなかったような気がする(未確認)ので、互換性を考える場合はアテにしない方がいいと思う。[REDIRECT_HANDLER] => hoge-handler [REDIRECT_STATUS] => 200 [REDIRECT_URL] => /~yamaya/hoge/fuga/piyo [REQUEST_URI] => /~yamaya/hoge/fuga/piyo [SCRIPT_FILENAME] => /home/yamaya/public_html/hoge.php [SCRIPT_NAME] => /~yamaya/hoge.php [PATH_INFO] => /~yamaya/hoge/fuga/piyo [PATH_TRANSLATED] => /home/yamaya/public_html/hoge/fuga/piyo [PHP_SELF] => /~yamaya/hoge.php/~yamaya/hoge/fuga/piyo_ その5: おまけ。PHP 限定の方法。mod_php ではなく、CGI 版としてビルドした php バイナリを用意して、cgi-bin/php.cgi として置いておく。スクリプトは hoge にリネーム。んで、.htaccess で以下のように設定。
結果。Action php-cgi /~yamaya/cgi-bin/php.cgi <Files hoge> SetHandler php-cgi </Files>hoge へのアクセスで php.cgi にリダイレクトされ、php.cgi が hoge を読み直して PATH_INFO を設定しなおしている。php.cgi が受け取った環境変数は ORIG_xxx として残される(昔のバージョンでは ORIG_xxx は設定してなかったはず。いつからこういう動作をしているのかは未確認)。PHP_SELF の値が激しく謎。[REDIRECT_HANDLER] => php-cgi [REDIRECT_STATUS] => 200 [REDIRECT_URL] => /~yamaya/hoge/fuga/piyo [REQUEST_URI] => /~yamaya/hoge/fuga/piyo [SCRIPT_FILENAME] => /home/yamaya/public_html/hoge [PATH_INFO] => /fuga/piyo [PATH_TRANSLATED] => /usr/local/www/apache22/data/fuga/piyo [ORIG_PATH_TRANSLATED] => /home/yamaya/public_html/hoge/fuga/piyo [ORIG_PATH_INFO] => /~yamaya/hoge/fuga/piyo [ORIG_SCRIPT_NAME] => /~yamaya/cgi-bin/php.cgi [ORIG_SCRIPT_FILENAME] => /home/yamaya/public_html/cgi-bin/php.cgi [PHP_SELF] => a_ ちなみに、最後の方法は CGI 版の PHP を使っているので、スクリプトは Apache とは別プロセスで動き、mod_suexec でユーザ権限で動作させることが可能。それでいて、CGI のようにスクリプトを chmod して実行権限を与えたり、#! でインタープリタの場所を教えてあげる必要もない。こういう起動方法は PHP がまだ PHP/FI という名前だった極めて初期のころからサポートされているんだけど、ほとんど知られていないようなので、/hoge/fuga/piyo とはあまり関係ないんだけどあえて取り上げてみた。