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 のサーバ環境では違いは明らかでしょう。