|  |  |  |  |  |  |
- 日時: 2013/02/16 10:48
- 名前: スガラボット
ID:Vwda0t.g
- 参照: http://vmorita.com/bbs/patio/forum.shtml
- Forum Patio ファンの皆さん、
今回は、掲示板サーバをクラッシュさせる危険があるスクリプトを修正した緊急アップデートです。諸般の事情でスクリプトを一式アップデートできない場合でも、3つ目にアップした download.cgi だけは新しいスクリプトと差し替えて頂くようお願い致します。
実は、新年を期してこの掲示板を公開しているサーバを「さくらレンタルサーバ」から「さくらVPS(1G)」に乗り替えました。この時このサーバOSとして CentOS6.3 の 64bit 版を採用しました。 また公開するサーバアプリは Apache-2.4.3, perl-5.16.2, php-5.4.11, 等全て最新版をソースからコンパイルしてインストールしたのです。
ここまでは良かったのですが、暫くして友人からある掲示板に新しい記事が投稿できなくてエラーになると連絡があったのです。「えっ、そんなはずは…」と思って早速サーバにアクセスして状況を確認したところ、何と df コマンドでパーティションが 100% 使用されていて、いわゆる「ディスク・フル」の状況になっていました。そして、HTTPD (Apache) のエラーログが何と 79GB まで膨れあがっているではありませんか。このファイル一つが全ディスク容量の八割を専有してサーバが一切のディスク書込みができない状況になっていたのです。
慌てて このファイルを rm コマンドで削除してもう一度 df コマンドを打ってもまだパーティション 100% の状況は変わりません。そうです、rm コマンドでファイル削除して ls コマンドでこのファイルが表示されなくなっても、このファイルを握っている HTTPD を停止するまではディスクスペースは解放されないのです。 まあ、この様にして HTTPD をリスタートして一応サーバは復旧はしたのですが、問題はその原因です。
今までの「さくらレンタルサーバ」ではこんな経験はなかったのに…、と思って振り返ってみると原因の一つはOSを64bit版にしたために79GBもの巨大ファイルが作成できてしまうということでしょうか。32bit版だとアドレスの限界は拡張しない限り4GBですかららね。ただそれにしてもなぜこれほどエラーログを吐き続けるのでしょう。それから数日間色々解析して分かったことは、掲示板スクリプトの中で添付ファイルをダウンロードする download.cgi が原因だったのです。Forum Patio 掲示板では写真などの画像ファイルはブラウザが描画するためにターゲットファイルを開いて内容を送信するだけですが、ZIP ファイルなどは download.cgi スクリプトを使ってターゲットファイルを GET のクエリー・パラメータで指定してダウンロードします。 具体的には http://yourdomain.com/cgi-bin/download.cgi?bfile=xxxxx などと GET ダウンロードファイルを指定する仕組みにしています。掲示板の閲覧画面から添付ファイルをクリックしてターゲットをダウンロードするときは問題なく動作するのですが、今回はロボット検索エンジンが download.cgi を "?" 以下のクエリー・パラメータを付けずにアクセスしたようなのです。それでオープンしたのは ./upl/ ディレクトリの以下のファイルは空ですから何とディレクトリそのものをオープンしてしまい、ファイルでないために続く read() 関数がエラーリンターンして読み込んだバイト数が undef になり、ファイルを最後まで読み込む while {} ループ (v1.52版の download.cgi では 89~93行目) を抜けることができず、undef ( not initialized ) のエラーログを吐きながら無限ループになってしまったという次第でした。皆さんもブラウザから?以下のパラメータを付けずに download.cgi をアクセスすると同様の状況が発生すると思いますが、危険ですからおヤメ頂いた方がいいと思います。
今回、この様な状況が発生しないよう二重・三重のガードを入れて download.cgi を修正しましたので、少なくともこのスクリプトだけは新しいものに差し替えて下さい。 あと、バグ修正として init.cgi, read.cgi, lib/tree.pl の以下の項目を修正しています。
① UTF-8 文字列の出力時にエンコードエラーで "wide character in print" がエラーログに出力されるバグを修正。 ( init.cgi, read.cgi, tree.pl )
② 検索語のハイライト機能で記事本文中のキーワードがハイライト表示されなくなっていたバグを修正 ( init.cgi, read.cgi, lib/tree.pl )
③ あと v1.52 版からサポートした Patio/Forum 両形式のスレッド・インデックス・ページで、スレッドの目次の下に新着記事を5個表示する機能をデフォールトで有効にしました。新着記事表示をせず、従来通りの表示とするには、init.cgi (serverconf.cgi または会議室毎の roomini.cgi の方が良いです) の our $newArticle = 5 の値を 0 に修正して下さい。
【補足】 さくらVPSで CentOS6.3 にして分かったことですが、CentOS で標準的に配布される perl モジュールには CGI.pm が含まれていないようなので、CPAN などからインストールしないとサーバエラーになってしまいます。ご注意下さい。
以上です。
-
|