svkに関するTips

svkローカルミラーにsvnserve経由でアクセスする

svkでローカルにミラーしたリポジトリに対して、inetd + svnserve経由でアクセス出来るようにする。 環境はUbuntu 7.04、svk 1.08、svnserve 1.4.3。

まずはSynapticまたはapt-getでsvk、subversionをインストールしておく。

svkローカルミラーの作成

svkでリモートリポジトリのミラーを作成する。 まずはsvk depot --initする。

$ svk depot --init
Repository /home/santamarta/.svk/local does not exist, create? (y/n)y

ここで、svnserveで公開するミラーの場所を~/.svk/localではなく/srv/svk/mirrorとしたいので、svk depot --relocateで配置しなおす。

$ svk depot --relocate // /srv/svk/mirror
Depot '' relocated to '/srv/svk/mirror'.
Repository /srv/svk/mirror does not exist, create? (y/n)y

Depotのパスが変わっていることを確認する。

$ svk depot --list
Depot                   Path
============================================================
//                      /srv/svk/mirror

ローカルミラー、ローカルブランチ用のディレクトリを作成する。

$ svk mkdir //mirror
Waiting for editor...
Committed revision 1.

$ svk mkdir //local
Waiting for editor...
Committed revision 2.

リモートリポジトリのミラーを作り、ミラーしたリポジトリの内容を同期する。

$ svk mirror svn://remote/project_x //mirror/project_x

$ svk mirror --list
Path                    Source
============================================================
//mirror/project_x      svn://remote/project_x

$ svk sync //mirror/project_x
Syncing svn://remote/project_x
Retrieving log information from 1 to 18
Committed revision 4 from revision 1.
Committed revision 5 from revision 2.
Committed revision 6 from revision 3.
 :

ローカルブランチを作る。

$ svk copy //mirror/project_x //local/project_x
Waiting for editor...
Committed revision 22.

svnserveの設定

/etc/servicesにsvnのサービス名と使用ポート番号が記述されていることを確認する(もしなければ追記する)。

  svn             3690/tcp        subversion      # Subversion protocol
  svn             3690/udp        subversion

/etc/inetd.confにsvnserveの起動パラメータを追記する。 -rオプションにはリポジトリを格納するディレクトリ(svkで作成した/srv/svk/mirror/)を指定する。 svnserve用にユーザを用意する場合は、useradd svnしてからsantamartaの部分をsvnに置き換える

svn stream tcp nowait santamarta /usr/sbin/tcpd /usr/bin/svnserve -i -r /srv/svk/mirror/

/etc/hosts.allowにsvnserveへのアクセスを許可するホストを記述する。 以下は内部ネットワークからの接続のみを許可する場合の例。

svnserve: 127.0.0.1 192.168.0.0/24

/srv/svk/mirror/conf/svnserve.confを編集して、認証なしでも書き込めるようにする。 参照のみにしたい場合はreadにする。

[general]
anon-access = write

ここまでで必要な設定が完了したので、inetdを再起動する。

$ sudo /etc/init.d/openbsd-inetd restart

以降、svnserve経由でアクセス出来るようになる。 svn log、svn checkout等で正常にリポジトリの内容にアクセスできればOK。

svn log svn://localhost/local/project_x/
svn checkout svn://localhost/local/project_x/ ./project_x/

上の例ではローカルブランチに対して操作しているが、localをmirrorに変えればローカルミラーに対しても操作できる。