fchiba memo

2009年02月

・その7
mod_backtraceで、どの関数で落ちたか分かるようになってそれはそれで便利に。
が、やっぱりデバッガ使いたい。
(エラー箇所のメモリの番地しかわからず、addr2lineの使い方もよくわからん)

今回作ろうとしているものは、「XMLを入力にして、データをかき集めて加工し、(XMLとは)別な形式で出力する」というもの。
あまりapacheのアーキテクチャーとは関係のない部分が多かったので、コマンドラインからも動かせるようにリファクタリング。(APRには依存しても、apacheには依存しないように修正)

一番のネックはロギングで、一番末端のロジックまでapacheが密着してしまっている。
マルチスレッドに対応しないといけないので、グローバル変数に頼るわけにもいかず困った。

結局、ログ出力関数をloggerクラスとしてラップし、これを各クラスで持ちまわすことで対応。
(ロジック中は抽象クラスで書いて、モジュール版はap_log_rerrorに出力するサブクラス、コマンドライン版ではstderrに出力するサブクラスをリンク)

・その6
Segmentation Faultなどが発生してもログには1行しか吐かれないし、デーモンをgdbでデバッグするのは大変。(面倒であきらめた)
せめて簡単にバックトレースを出したい、ということで
mod_backtrace
を使った。
ソースはここから取ってくる。

これをコンパイルするためには、
--enable-exception-hook
というオプションを付けて、apacheをconfigureしないといけないらしい。
apacheはパッケージからインストールしているので、src RPMをいじって対処することにする。

1.リポジトリ(IIJとか)からsrc.rpmをとってきて、
rpm -ivh httpd-2.2.3-11.el5_2.centos.4.src.rpm
などとしてソースをインストール。(事前にmkdir /usr/src/redhatしておく)
2./usr/src/redhat/SPECS/httpd.specにあるspecファイルから、configureをしている箇所を探し
--enable-exception-hook
を加える。
3.rpmbuild -bb --clean /usr/src/redhat/SPECS/httpd.spec
でhttpdとhttpd-develのrpmができる。
(バージョンを変えていないので紛らわしいが自分だけしか使わないので気にしなーい)
rpm -Uvh で上書きインストール。

4.モジュールは
apxs -ic mod_backtrace.c
でインストールする。

5.httpd.confに
LoadModule backtrace_module modules/mod_backtrace.so
EnableExceptionHook On
を加える。

参考にしたサイト
カスタムRPMの作成第1回:カスタムRPMの基礎とspecファイル
http://www.stackasterisk.jp/tech/systemManagement/rpm01_01.jsp
カスタムRPMの作成第2回:rpmbuildとtarballからのカスタムRPM作成
http://www.stackasterisk.jp/tech/systemManagement/rpm02_01.jsp

壊れたHDDだが、しばらく忙しくて放っておいたら復活した。
カコンカコンって音がするほどの重症だったのに。
こんなこともあるもんなんだな。

また、いつ壊れるかもわからないので、急いで新しく買ったNASにバックアップをとる。
で、HDDを交換してOSを再インストール…と思ったけど、面倒になってしまった。
だって動いてるし。

・その1
apache module 開発事始め
を読んで雰囲気をつかむ。

・その2
その間に
The Apache Modules Book: Application Development With Apache (Prentice Hall Open Source Software Development)The Apache Modules Book: Application Development With Apache (Prentice Hall Open Source Software Development)
(2007/01/26)
Nick Kew

商品詳細を見る

を注文して読む。

・その3
APRに関しては、
リファレンス

libapr(apache portable runtime) programming tutorial
を読めば、だいたいわかる。
ディープなところは、
https://www.codeblog.org/blog/inoue/
を参考にした。

・その4
今回はC++のライブラリなどを使うので、
http://d.hatena.ne.jp/dayflower/20080904/1220510124
を参考に(というかほぼ全コピー)させてもらいMakefileを作った。

・その5
あとは、既存のモジュールを読む。XMLをごにょごにょするフィルタを作りたかったので
modxslt
mod_transform
mod_ext_filters
などを主に参考にした。

(続く)

最近、mozyでPCのバックアップを取り始めていたのですが、その矢先にHDDが壊れました。

(立ち上げた直後から異音がしてWindows XP の起動画面までは行くが、一瞬ブルースクリーンののち再起動)

mozyのバックアップは容量無制限の代わりに1MB/sでしかバックアップをとれないので、
1日中PCを立ち上げっぱなしにしていたのですが、それがとどめを刺した模様。

Dropboxも使っていたので、一部のデータは消失をまぬがれたが、
いくつか重要なデータや自作のプログラムが消えた。

これに懲りて、RAIDのNAS
I-O DATA ミラーリング/ストライピング対応 LAN接続ハードディスク 500GB×2 HDL2-G1.0I-O DATA ミラーリング/ストライピング対応 LAN接続ハードディスク 500GB×2 HDL2-G1.0
(2008/06/30)
不明

商品詳細を見る

を購入。

このページのトップヘ