subversion + trac ではまりまくり

そろそろ何かバージョン管理ツールを覚えないと、と思い、Subversion実践入門―達人プログラマに学ぶバージョン管理 を見ながら subversion を一通り触ってみた。

で、本も読了したので次は trac のセットアップにチャレンジしたら、これがもう、何かやるたびにエラーでつまづく、といった有様。

環境があまり一般的ではない(Slackware 使っていたり)ので、他の人の参考にはならない気がしますが、一応メモ。

まずは python のコンパイル。うちの環境は gcc が /usr/bin と /usr/local/bin にあるのですが、/usr/local/bin を優先するようになっています。が、これがはまりの元。LD_LIBRARY_PATH で /usr/local/lib を最初に参照するようにしているにも関わらず、なぜか /usr/lib/libgcc_s.so.1 を参照しに行ってしまいエラーとなる。/usr/local/lib/libgcc_s.so.1 を参照して欲しいのに。で、結局原因が分からないので、PATH から /usr/local/bin を外し、LD_LIBRARY_PATH から /usr/local/lib を外して、/usr/bin/gcc を使うようにして再度 ./configure; make; make install を実行。とりあえずこれで正常に。

次に subversion の python バインディングをインストールしようとして、subversion のソースのあるディレクトリで make swig-py を実行するも大量のエラー。SWIG を latest stable の 1.1p5 から latest development の 1.3.27 にアップグレードしたら解決。

そして今度は、 clearsilver のインストールでまたはまる。make install を実行すると、以下の様なエラーが。

/usr/bin/ginstall -c neo_cgi.so
/usr/bin/ginstall: too few arguments
Try `/usr/bin/ginstall --help' for more information.
make: *** [install] Error 1

python/Makefile を覗いてみたところ、どうやら PYTHON_SITE が定義されていないのが原因っぽい。ということで、Makefile の適当な位置に、

PYTHON_SITE = /usr/local/lib/python2.4/site-packages

を追加して make install を実行すると今度は正常に完了。

そしていよいよ trac のセットアップ。これは正常に完了。が、

trac-admin project initenv

を実行すると、

Failed to initialize environment. No module named svn
Traceback (most recent call last):
  File "/usr/local/lib/python2.4/site-packages/trac/scripts/admin.py", line 616,
 in do_initenv
    repos = self.__env.get_repository()
  File "/usr/local/lib/python2.4/site-packages/trac/env.py", line 155, in get_re
pository
    from trac.versioncontrol.svn_fs import SubversionRepository
  File "/usr/local/lib/python2.4/site-packages/trac/versioncontrol/svn_fs.py", l
ine 25, in ?
    from svn import fs, repos, core, delta
ImportError: No module named svn

というエラーが。これは以下の様に環境変数 PYTHONPATH を設定することで解決。

export PYTHONPATH=/usr/local/lib/svn-python

trac プロジェクトが作成できたところで、apache + mod_python で trac を動かそうとするも、うまく動かねー。ここにあるテストは正常に動作したので、俺の httpd.conf の書き方が悪いのだと思うけど、原因がさっぱり分からん。

でも、CGI では動かしたくないし、private なプロジェクトは LDAP で認証したいので、tracd を standalone で動かすのもイヤ。かといってこんなことで時間かけるのもアホらしい。

というわけで、tracd を standalone で動かしつつ、apache でリバースプロキシ という解決策を採用。こうすれば、tracd の軽さを活かしながら、apache で柔軟な設定が可能に。

最後に tracd のポートへの外部からの直接アクセスを、iptables で DROP して完了。

せっかく苦労して環境作ったので、公開しときます