No Programming, No Life

プログラミング関連の話題や雑記

SubversionをWindows環境でユーザ名を指定して使う場合

Windows環境でユーザ名を指定して使いたくて、空いた時間をみつけてはちょこちょこ調べていてやっとできました。


リポジトリを「file:///…」の形式で指定しているとファイルをコミットした場合にマシンにログインしているユーザ名が残ってしまうようなので、svnserveを利用して、svnスキーム「svn://…」の形式でアクセスできるようにしてみました。

1.svnserve.confの修正

リポジトリのconfフォルダ内にある「svnserve.conf」というファイルのコメントをはずしてアクセス権限を設定します。

[general] 
anon-access = read       ←ユーザ名を指定しないでアクセスした場合。アノニマス。
auth-access = write      ←権限有りユーザでアクセス。通常これ。
password-db = passwd     ←パスワードファイル名(相対パス or 絶対パス)
realm = Test Repository  ←よくわからんが、リポジトリ名?

※anon-accessとかauth-accessとかの#コメントをはずすときは行の先頭に空白は入れずに左詰にしないとsvnserve起動時にエラーになるみたいなので注意。

svn: C:\svnrepos\www\conf\svnserve.conf:12: Option expected


アクセスのパラメータは、

none  : アクセス拒否
read  : 読み込み専用
write : 書き込み可能

の3種類。

2.権限の設定

password-dbで指定した「passwd」を修正してユーザ名とパスワードを設定する。

[users]
user1 = pass1
user2 = pass2

形式は

ユーザ名=パスワード

といった感じ。パスワードは平文でいいらしい。

3.svnserveでの起動

コマンドプロンプトから起動する方法とWindowsのサービスに登録する方法がある。
とりあえずコマンドプロンプトから起動する場合は、

svnserve -d -r C:\svnrepos\…

と入力します。停止するには Ctrl + C。
この方法だとコマンドプロンプトは残りっぱなしになる上、起動するたびに設定しないといけないので不便。
ということで

4.Windowsのサービスに登録する

SC.EXEというWindowsサービスの管理コマンドを使用してsvnserveをサービス化する。SC.EXEでのサービス化機能はSubversion 1.4.0からサポートされるようになったらしい。SC.EXEはWindows XPWindows Server 2003には標準で入っているが、Windows 2000だとリソースキット*1が必要。


サービス登録するには、sc createコマンドを使うみたい。
第一引数はサービス名でscではこの名前でサービスを指定して操作を行う。binpathはsvnserveの起動コマンドライン。DisplayNameは「管理ツール」→「サービス」の一覧に表示される名前で、dependは依存しているサービス名。

D:\>sc create svnserve binpath= "C:/Program Files/Subversion/bin/svnserve.exe --service -r C:/svnrepos/" DisplayName= "Subversion: svnserve" depend= Tcpip

※オプションのDisplayName= とかはイコールとの間に半角スペースが入っちゃいけないみたいなので注意。右側は入ってよい。

5.svnserveサービスの起動・停止

起動には、sc start,停止にはsc stopコマンドを発行する。net start/stopとの違いはscは非同期であること。netコマンドのように処理終了まで待ったりはせずに制御が呼び出し元に返る。

(起動)
D:\>sc start svnserve
(停止)
D:\>sc stop svnserve

6.svnserveをWindowsサービスから削除

サービスを停止してから削除した方がよい。開始のまま削除すると、sc deleteコマンド発行しても開始のままで、停止をすると「管理ツール」→「サービス」の一覧から消える。

D:\>sc delete svnserve

see. http://svn.collab.net/repos/svn/tags/1.4.0/notes/windows-service.txt

*1:[http://kinshachi.ddo.jp/kurage/html/MT/comp/archives/000303.html:title]