UbuntuサーバにSubversionを入れる
Ubuntuサーバが無事に動いたので、続いてSubversionを入れてみる。
こんな感じの環境を考える。
Subversionのインストール
sudo apt-get install subversion libapache2-svn
はい終わり。
リポジトリの準備
sudo mkdir /var/lib/svn
んで、とりあえず適当にリポジトリを作ってみる。
sudo svnadmin create /var/lib/svn/foo
sudo chown -R www-data /var/lib/svn/foo
後々Apache経由でアクセスするのでオーナーをApacheユーザ(www-data)に変えておく*1。
Apacheの設定
libapache2-svnを入れた時点で/etc/apache2/mods-available/dav_svn.confというファイルが出来てるんだけど、SSL限定にするにはdefault-sslのVirtualHostディレクティブの中に書く必要があるので、こいつは使わない。
/etc/apache2/sites-available/default-sslに同様の内容を書き込む。
<IfModule mod_ssl.c>
<VirtualHost _default_:>
</VirtualHost>
:
: # other configuration
: # 以下を追加
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
AuthType Digest
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/.htdigest
AuthzSVNAccessFile /etc/apache/dav_svn.authz
Require valid-user
Satisfy Any
</Location>
</IfModule>
パスなどの設定内容はお好みに合わせて。
綺麗に管理したいなら外部ファイルにしてIncludeすればいい。ただ、sites-availableとかに置くとトラブルの元なので避けた方がいいかも。
続けてDigest認証用のファイルを作成する。
sudo htdigest -c /etc/apache2/.htdigest "Subversion Repository" username
realmが追加されている以外はhtpasswdと同じ。ファイルを作成するときだけ-cオプションを付ける。追加・変更時はつけない。
realmはAuthNameと合わせる必要があるので注意。
さらにSubversionのアクセス設定ファイルを作成する。
作るのはAuthzSVNAccessFileで指定したファイル。
[groups]
foo-dev = user-a, user-b [/]
* = [foo:/]
@foo-dev = rw
user-c = rw
* = r
書き方はSubversionのマニュアルを読めってことで。
これを使うとリポジトリ(とパス)単位でユーザ毎に読み書きの制御ができる。
上の例だとfooリポジトリは誰でも見れるけど、コミットはuser-a, user-b, user-cしかできない。
Apache再起動
設定が終わったのでモジュールを有効にしてApacheを再起動する。
sudo a2enmod ssl
sudo a2enmod auth_digest
sudo a2enmod dav_svn
sudo a2ensite default-ssl
sudo /etc/init.d/apache2 restart
これでhttps経由でアクセス出来るようになったはず。