UbuntuでTortoiseSVN用のSVN WebDAVを構築

けっこう良く設定するのだけど、やるたびに忘れて調べるのでメモする。

やりたいこと

Windowsマシン上のTortoise SVNからLinux上のSVNリポジトリにみんなでアクセスしたい。basic認証くらいのセキュリティは施したい。

やり方

今回はUbuntu + apacheを使う。正確にはMintで実施した。Ubuntuのapache設定はかなり抽象化されていて、なるべくhttp.confを書かなくてもよいような仕組みになっている。一昔前、windowsにインストールしたapacheなんかだとhttp.confに全部の設定を書くようなやり方であったが、そういうことは普通しない。なるべくUbuntuの流儀に合うようなやり方でやってみる。

必要パッケージのインストール

この時点でSubversionがすでにインストールされていて、リポジトリも作ってあるものとする。

$ sudo apt-get install apache2 libapache2-svn apache2-util

apacheの設定

modの有効化はa2enmod(apache 2 enable mod)を使う。 インストール時に自動的に有効になっているっぽいが念のため実施。

$ sudo a2enmod dav
$ sudo a2enmod dav_svn

有効化と無効化の仕組みは/etc/apache2/以下のフォルダ構成とファイルを眺めるとなんとなくわかってもらえると思います。

次にサイトの設定。URLとリポジトリのマッピングと、BASIC認証の設定を行う。/etc/apache2/sites-available下に001-svn.confを作成。ファイル名は適当なものを付ける。ファイルには以下の設定を書く。

<Location /svn>
DAV svn
SVNPath /home/foo/svnrepos
AuthType Basic
AuthName “svn repository”
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
< /Location>

設定の意味は以下の通り。

<Location /svn> ←「/svn」がマッピングするURL
DAV svn
SVNPath /home/foo/svnrepos ←SVNのリポジトリURL
AuthType Basic
AuthName “svn repository” ←認証を要求するとき、クライアント(ブラウザ、TortoiseSVNなど)に出てくる名前(多分)
AuthUserFile /etc/apache2/dav_svn.passwd ←BASIC認証ファイル。任意のフォルダ
Require valid-user
</Location>

ここで注意してほしいのが、SVNのリポジトリURLは、リポジトリのルートになるディレクトリ、つまり、conf, db, hooksなどのディレクトリが入っているディレクトリを指定しなければならない。複数のリポジトリを管理するときはlocationを分ける。変なディレクトリを指定してしまうと、Could not open the requested SVN filesystemという503エラーになる。

次にBASIC認証ファイルを作成する。先ほどのAuthUserFileに書いたファイルを作成する。

$ htpasswd -c dav_svn.passwd [ユーザー名]

上記コマンドを叩くと続けてパスワードを聞かれるので入力。複数のユーザーを登録するときは、二回目以降-c(create)オプションを外す。

さらに、apacheのプロセスがSVNのリポジトリを読めるよう、リポジトリのファイル所有権をwww-dataにする。

$ chown -R www-data [リポジトリのディレクトリ]

最後に、apacheを再起動する。ubuntuは/etc/init.d/httpd restartではなく、serviceというコマンドを使う。

$ sudo service apache2 restart

で、ブラウザやTortoise SVNから

http://サーバ名/Locationで設定したパス

にアクセスして正常に見れればOK。おつかれ。仕事がんば。

参考サイト

UbuntuでSubversion設定 (Apache WebDAV)