svnserv.exeをWindowsのサービスに登録して svn:// でアクセス出来るようにしたのでメモ
Subversionに外部からアクセス出来るようにするには、色々な方法があります。
その中でも、たぶん一番手軽なのが svnserv.exe を使った方法だと思います。
ただ、Basic認証なので、あまりセキュアとは言えないかもしれません。
なお、Windows用のSubversionバイナリーはいくつかの配布元があります。
オープンソースプロジェクトとしてのSubversionを支援している*1、CollabNetのバイナリが良さそうですが、ユーザー登録を求められます。
なんとなく面倒だったので、プロジェクトがリリースしてるバイナリを使いました。
手順
リポジトリは作成済みなところからです。
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ディレクトリがあり、その中に設定ファイルがあります。
ここも色々な設定が出来ますが、取り急ぎなので最低限のものだけです。
- C:\svnrepos\conf\svnserve.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:元々ここが作っているので開発元と言ってもいいです。