サーバ

mod_python による Trac と Apache の連携

mod_python の設定はこんな感じ。

Alias /tracrepo /sw/share/trac/htdocs/
LoadModule python_module modules/mod_python.so

<Location "/tracrepo">
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /Users/yusukey/tracrepo
#PythonHandler trac.ModPythonHandler
#PythonOption TracUriRoot "/tracrepo"
#PythonOption TracEnvParentDir /Users/yusukey/tracrepo
</Location>

コメントアウトされている設定は古いバージョンで必要な設定だったりするものらしく、やや試行錯誤した名残。

うまく動いたぞ、と思えば “timeline” 等のページでエラーがでる。libexpat というライブラリは、バージョン6が必要なのにバージョン2があると。
libexpat は C のストリーミングベースの XML パーサらしい。
traceback(Javaでうスタックトレースのことらしい)どうも Subversion のライブラリ内でダイナミックライブラリをロードするあたりでエラーがでてるらしい。

Trac detected an internal error:
Failure linking new module: /sw/lib/python2.4/site-packages/libsvn/_fs.so: Library not loaded: /sw/lib/libexpat.0.dylib
Referenced from: /sw/lib/python2.4/site-packages/libsvn/_fs.so
Reason: Incompatible library version: _fs.so requires version 6.0.0 or later, but libexpat.0.dylib provides version 2.0.0

Web上のリソースをしらべてみると、 otool ってのでバージョンを確認してみろとある。

$ otool -L /sw/lib/libexpat.0.dylib 
/sw/lib/libexpat.0.dylib:
/sw/lib/libexpat.0.dylib (compatibility version 6.0.0, current version 6.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.0.0)
/usr/lib/libmx.A.dylib (compatibility version 1.0.0, current version 92.0.0)

うーん、問題なく要求されてる version 6.0.0 に対応しているっぽい。
tracd でスタンドアロンでの起動はうまくいくので、Apache 周りで問題があるはず。
探してみると apache2.0.55/lib/ に libexpat.0.dylib があった。

$ otool -L /Users/yusukey/apache2.0.55/lib/libexpat.0.dylib 
/Users/yusukey/apache2.0.55/lib/libexpat.0.dylib:
/Users/yusukey/apache2.0.55/lib/libexpat.0.dylib (compatibility version 2.0.0, current version 2.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.5)

なるほど。Apache が バージョン 2 の libexpat をロードしているのでしょう。
Apache に Fink のライブラリを使わせるにはってことで調べたら FAQ に辿り着いた。(ここに辿り着くまで約半日・・・)
・The Fink F.A.Q. – Q8.3: Fink でインストールしたソフトウェアを使って、自分で何かをコンパイルするにはどうしたらいいのですか?
http://fink.sourceforge.net/faq/faq.ja.html#usage-general.compile-myself

というわけで、LDFLAGS とかを設定して Apache と mod_python を再コンパイルしたところようやく動作!

CGI で動かしたときよりはなんとなく早い感じ。
G4 1.5GHz のローカル環境ではなんとなく、でも G3 300MHz のサーバ環境では違いは明らかでしょう。