Konata.netでは、毎日0時にApacheの再起動をしている。
なんで、こんなコトしてるかというと、2chProxyで使っている鯖リストを更新させるためなので、板構成が変わらない限りはこの影響をうけることはない。

Apacheの再起動もgracefulで再起動させているので、既存の接続には影響をあたえず再起動できるはずだったのだけれど、今朝チェックしてみるとApacheの再起動で表題のエラーが出て0時から10時ちょいまでサービスが止まっていた。(´・ω・`)

Google様にお伺いをたてると、gracefulオプションで再起動したときに出る症状らしい。
ちなみに、現時点での konata.netの Apache のバージョンは 2.2.17 でほぼ最新。
とりあえず、再現されてもめんどくさいので、Apacheの再起動をstopとstartに分けて実行するようにスクリプトを変更して様子をみることにする。

自分は神奈川住みである。
でもって、神奈川は地震の影響の計画停電の中に組み込まれているので、
これから4月末までは、毎日停電があり、konata.netは一定の時間Downすることになる。

たとえば、平日は会社に行っているので停電した時間から自分が部屋に帰ってくるまで、konata.netは停止し続ける。
当然、この間、自分は会社から2chもできない。

このダウンタイムを短くするために、色々と工夫を凝らしてみた。
まず、使っているルータのWR8700にはWakeOnLanのパケットを送信する機能があるので、konata.netのサーバを遠隔から立ち上げる事ができる。
この機能は最近のファームアップで対応したらしい。
当然、鯖側のNIC及びBIOSでWakeOnLanに対応していることが前提だけど。
今回はたまたま幸運なことに、全部の条件を満たしていた。

次に、konata.netの鯖の実態はノートPCである。
つまり、停電しても少しの間はバッテリーで駆動できる。
今までは停電した後バッテリーがなくなったらそのままOSが落ちていたのだけれど、流石にそれはハードウェアに与えるダメージが気になる。
ので、バッテリー駆動に切り替わったのを検知して、shutdownを発行するシェルスクリプトを書いた。
で、それをcronで回す。

次に、ニコイチBOXが繋がっていると、BIOSが立ち上がらないというこのノート固有の問題に対処するために、朝出勤する前にニコイチBOXの電源を切ることにした。
ここだけは仕方が無いので人力。
あと、ニコイチBOXのHDDを初期状態ではマウントしないようにfstabを変更。
起動後にfsckとマウントをするシェルスクリプトを書いて、やっぱりこれもcronで回す。

とりあえず、ここまで。
後は、実際に遠隔起動を試してみるばかりである。

リリースの話は聞いていたのでちゃちゃっとアップデート。
というわけには行かなかった。

会社で昼休み中に遠隔ログインでfreebsd-updateを実行後、rebootしたら立ち上がらない。
そーいや、ニコイチBOXの電源いれたままだとFreeBSDのカーネルすら起動しないんだよなぁ……
ということを、rebootした後に思い出す。

結局、帰宅するまでkonata.netの全機能は停止したままだったのでした。

といっても機能的にはあまり大きな変更はない。

書き込みデータは、いったんPHPを介することになったので、
今までは、Apacheのフィルタでやっていた書き込みサイズの制限と、書き込み間隔の制限のチェックをPHP側でするようにした。

書き込みサイズはContent-Length頼みだったので、おおよそ200バイト、といういかにも曖昧なところが、きっちり200バイトで制限できるようになった。
書き込み間隔も、「上記全てを承諾して書き込む」を明確に投稿間隔チェックの対象外にすることが出来たおかげでクエリが綺麗になったり。

まぁ、普通に使う分には影響はなかったりする。

今のところNGワードでの制限はmod_securityに任せているのだけれど、
将来的にもっと複雑な制限を加えるのもPHPで書けるので楽になりそう。
制限が必要なければそれが一番良いのだけれど。

ここまでのあらすじ

おためし●のメールは、翌日になってgmailの迷惑メールフォルダに入ってるんじゃなかろうか?
と思ったら案の定、迷惑メールとして振り分けられていた。
早速登録しておためし●の利用開始。

まずはWindows側で書きこむ際にどういう動作をしているかWireSharkで覗いてみることにする。
お試し●利用時は、sid というパラメータがPOSTメソッドに加わっているようだ。
sidは2chブラウザの再起動で新しい物に書き換わるけれど、レスの度に変化するものではないようなので、このプロクシ側でもsidを付与してやれば良いことになる。

この時点で案は2つ
1、Apacheの mod_ext_filter でPOSTデータにsidを追加する。
2、POSTデータにsidを追加するApacheモジュールを新規に組む。

ちなみに、2、には過去に似たような事にチャレンジして挫折した過去がある。
どうやら、1が楽そうなのでそっちの検証を実環境で試すことに。

が、POSTデータの改変をするところで予期せぬエラーが。
以下のエラーが出て、POSTデータの改変ができない。
(9)Bad file descriptor: apr_file_close(child input)
どうやら標準入力を受け損ねている様子。

結局行き詰まったまま、就寝時間を迎える。
さて、どうしたものか……