Ubuntu で Subversion

More than 1 year has passed since last update.


インストール

Apache は既にインストールされているものとする。以下 apt-get する:

sudo apt-get install subversion libapache2-svn apache2-utils

Ubuntu 14.04LTS は htdigest が最初から入ってないので apache2-utils が必要。


HTTP 経由でアクセスできるようにする

vi /etc/apache2/mods-enabled/dav_svn.conf 

<Location />

DAV svn
SVNParentPath /var/lib/svn
AuthType Digest
AuthName "realm"
AuthUserFile /etc/apache2/.htdigest
Require valid-user
</Location>

上記の設定例だと、 (apacheのルートのパス)/svn/(SVNリポジトリ名) でアクセスすると、 /var/lib/svn/(SVNリポジトリ名) のリポジトリにアクセスできることになる。 例えば Apache ルートが http://localhost/ だった場合、 http://localhost/svn/Test にアクセスすると、 /var/lib/svn/Test というリポジトリがあった場合に見れることになる。

実際には dav_svn.conf のコメントを外せばすぐに利用できる。 上記だと Digest 認証で通過しなければ SVN のリポジトリにアクセスできない。 で、 この後 Digest 認証で使用するパスワードのファイルを作らなければならない。 それは以下のコマンドで良い:

# Digest 認証用のパスワードを作成する

sudo htdigest -c /etc/apache2/.htdigest 'realm' (ユーザ名)

打つとパスワードを聞かれるので、 正しく設定する。 パスワードファイル名が dav_svn.conf で指定したものと一致するかどうか確認しよう。 上記 realm (認証領域: 自由な文字列で良い) も一致させないと認証が通らない。 しかもエラーも分かりにくいので注意。

ユーザを追加したい場合はその分 sudo htdigest すればよい。 -c オプションを付けると新規ファイルを作成してしまう (古いユーザが消えてしまう) ので注意する。

さて、これで Web 経由でアクセスする準備が整ったので、以下のように Digest 認証を有効にして Apache を再起動する。

sudo a2enmod auth_digest

sudo /etc/init.d/apache2 restart


動作確認

次にいよいよ SVN のリポジトリ用のフォルダを作り、リポジトリを作る。 例えば Test というプロジェクトを作りたい場合、Test というリポジトリを作ればいいので以下のようにする:

sudo mkdir /var/lib/svn

cd /var/lib/svn
sudo svnadmin create Test
sudo chown -R www-data.www-data /var/lib/svn # www-data は Ubuntu の Apache ユーザ

ls コマンドを実行して、 Test フォルダが作成されて中にいろいろできている事を確認する。

そして最後に http://localhost/svn/Test にアクセスして確認する。 ユーザ名とパスワードを聞かれ、 正しく答えたら「Revision:0」とバージョン番号 0 の空のリポジトリが表示されることを確認する。 うまくいかないようであれば /var/log/apache2/access.logerror.log を参照して原因を探る。


サブドメインにしたい場合

例えば http://svn.hoge.com/(リポジトリ名) でアクセスするといい、みたいな感じだ。VirtualHost にする。

sudo vi /etc/apache2/sites-available/svn.conf

<VirtualHost *:80>

ServerName svn.hoge.com

<!-- Apache のログを分ける -->
CustomLog ${APACHE_LOG_DIR}/access_svn.log combined
ErrorLog ${APACHE_LOG_DIR}/error_svn.log
<Location />
DAV svn
SVNParentPath /var/lib/svn
AuthType Digest
AuthName "realm"
AuthUserFile /etc/apache2/.htdigest
Require valid-user
</Location>
</VirtualHost>

sudo a2ensite svn.conf  # svn.hoge.com の設定を有効にする


バックアップとリストア

以下のコマンドを定期的に cron か何かで実行しておけば安心。

# バックアップ

sudo svnadmin dump {プロジェクト名} > {ダンプファイル名}

# リストア
sudo svnadmin create {プロジェクト名}
sudo svnadmin load {プロジェクト名} < {ダンプファイル}
sudo chown -R www-data.www-data {プロジェクト名}