2011年11月13日日曜日

Bitnami Redmineスタック(Virtual Machineバージョン)に微妙にハマる

SVN(Subversionのことね)+Redmineを入れる簡単な手段としてBitnamiの配布している仮想マシンイメージ(Ubuntu10.10にRubyやらApacheやら一式インストール済み)がある。
「お、これいいじゃん」と思って使ってみたのだが、mod_dav_svnではなくてsvnserveを使うように設定されている。こいつでApache経由でhttpアクセスしようとする(mod_dav_svnを使おうとする)と結構ハマりポイントがある…。

1.SVNのlibが読まれていない

/opt/bitnami/apache2/conf/httpd.conf のLoadModuleのコメントを外す。

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

で、Apacheを sudo apachectl restart …でフツーにモジュールが読み込まれるつもりだったのだが次のエラーが出る。

Cannot load /opt/bitnami/apache2/modules/mod_dav_svn.so into server:
 libsvn_repos-1.so.0: cannot open shared object file: No such file or directory

ldconfig -p すると確かにlibsvn_repos-1.so.0が読み込まれていない。
bitnamiではsvnは/opt/bitnami/subversionにインストールされているので、/etc/ld.so.conf.d/libc.conf に /opt/bitnami/subversion/lib を追加してsudo ldconfigする。

再度ldconfig -p すると今度は読み込まれているはず。
この状態でsudo apachectl restartするとOK.

2.SVNが依存しているSQLiteがthread-safeじゃないと怒られる

で、などを書いてhttp://hoge/svn/fuga にブラウザでアクセスするとリポジトリの参照ができた。次にTortoiseSVNを入れて上記のリポジトリにコミットをすると…

Couldn't perform atomic initialization

なんのこっちゃわからん。apacheのエラーログを見ると…

SQLite is required to be compiled and run in thread-safe mode

ググると、SQLiteを --enable-threadsafeをつけてコンパイルしなおせと。
しかしそう言うことではなかった。

まず、lddでmod_dav_svn.soが参照しているライブラリを調べる。

ldd /opt/bitnami/apache2/modules/mod_dav_svn.so
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0

ありゃ、SQLiteは /opt/bitnami/sqlite に入っているはずだが…
なるほど/usr/lib/libsqlite3.so.0があかんのか。

/user/lib/libsqlite3.so.0 をls -l で調べてみとシンボリックリンクだ。
libsqlite3.so.0 -> /usr/lib/libsqlite3.so.0.8.6

じゃあ、この先を変えてやればいいか。

ln -s libsqlite3.so.0 /opt/bitnami/sqlite/lib/libsqlite3.so.0.8.6

これでsudo ldconfigして、sudo apachectl restartする。

おおー、コミットできたー。

という訳でSVN関連のライブラリパスがうまく設定されていないのが原因でした。

0 件のコメント: