やっぱりどうにもCVSはリファクタリングとの相性の悪さに耐え兼ねるということで、Subversionに移管することになった。
目標
- Subversion + Apache によるWebDAV経由の自動バージョン管理
- 既存のCVSリポジトリはそのまま移行
正攻法
- Subversion, mod_dav_svn, Apacheをインストール。
- ユーザーsvnを作成して、svn所有のリポジトリを作成。
- Subversionを使うユーザーとapacheユーザーをまとめてsvnグループに追加。
- cvs2svn.py でCVSをSubversionに移管。このスクリプトは:pserverなリポジトリの指定は受け付けないみたいなので、CVSサーバーから丸ごとSubversionサーバーにリポジトリを持ってきて、実行。
- で、あとはよしなにApacheを設定。
問題
- ブラウザからアクセスすると500でメッセージは次のとおり。
Could not open the requested SVN filesystem
- cvs2svn.pyを実行した直後の状態では、リポジトリが壊れている。
と言われてしまった。Error string not specified yet: Berkeley DB error while opening environment for filesystem /path/to/repository/db:\nDB_RUNRECOVERY: Fatal error, run database recovery
- svnadmin recoverした。
- 今度はこんなエラーが。
Error string not specified yet: Berkeley DB error while opening environment for filesystem /path/to/repository/db:\nPermission denied
svnadmin recover
がgroupのwを無くしてしまうため。db/*を0664に設定。
- まだ壊れているとか言われる。
結局の対処法
- cvs2svnの直後にsvnadmin dumpでリポジトリをダンプ。
- 一度、リポジトリをディレクトリごと削除
- 再度、リポジトリを作成
- svnadmin loadでダンプファイルからリポジトリをロード
- svnadmin recoverでリポジトリを修復
- db/*のパーミッションを0664に設定
- ついでに、db/ をchmod +sしておく。
以上でHTTP経由でリポジトリにアクセスできるようになった。
WebDAV書き込み問題
……と思ったら、WebDAVでは書き込めなかった。error_logを見ると、こんなログが出ていた。
[error] [client **.**.**.**] could not open dbm file s. [500, #13]
[error] [client **.**.**.**] Can't open activity db: Permission denied [500, #13]
原因は、WebDAV書き込み時には /path/to/repository/dav/ にも書き込みが必要だということ。ここのgroupのwビットが立っていなかったのでapacheが書き込めなかった模様。Subversionのメーリングリストの記事にあったとおり、リポジトリ以下のファイルをすべて0660にした。ついでにdav/ をchmod +sしておく。