svnserv.exeをWindowsのサービスに登録して svn:// でアクセス出来るようにしたのでメモ

Subversionに外部からアクセス出来るようにするには、色々な方法があります。
その中でも、たぶん一番手軽なのが svnserv.exe を使った方法だと思います。
ただ、Basic認証なので、あまりセキュアとは言えないかもしれません。

なお、Windows用のSubversionバイナリーはいくつかの配布元があります。
オープンソースプロジェクトとしてのSubversionを支援している*1、CollabNetのバイナリが良さそうですが、ユーザー登録を求められます。
なんとなく面倒だったので、プロジェクトがリリースしてるバイナリを使いました。

subversion: Content

手順

リポジトリは作成済みなところからです。

sc.exe create svnserve binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --root C:\svnrepos" displayname= "Subversion" depend= tcpip start= auto

[SC] CreateService SUCCESS

sc.exe description svnserve "Subversion server (svnserve)"

[SC] ChangeServiceConfig2 SUCCESS

リポジトリの設定を変更し、Idとパスワードを設定する。

リポジトリを構成するファイルの中に、confディレクトリがあり、その中に設定ファイルがあります。
ここも色々な設定が出来ますが、取り急ぎなので最低限のものだけです。

[general]
anon-access = none
auth-access = write
password-db = passwd

  • C:\svnrepos\conf\passwd

foo = passwordAsPlainText

これで foo というユーザーが passwordAsPlainText というパスワードで、リポジトリにアクセスできます。

サービスを開始する

ファイル名を指定して実行 から services.msc を開きます。
Subversionというサービスがあるので、開始します。
設定は自動になっているので、次にWindowsが起動した際は、一緒に起動するはずです。


これでリポジトリにアクセスが出来るようになったはずです。
TortoiseSVNなどで svn://localhost にアクセスすると、Idとパスワードの入力を求められます。
もし、そのままアクセスできてしまった場合は、設定を見直してください。
ポートは 3690 を使うので、ファイアウォールルーターの設定を変更すれば、外部からもアクセスが出来るようになります。


なお、自分の環境ではなぜか、Windowsファイアウォールが通信を検出せず、ブロックするかブロックを解除するかを聞いてきませんでした。
そのため手動で svnserv.exe を例外に設定しました。

*1:元々ここが作っているので開発元と言ってもいいです。