【Subversion】リポジトリサーバ構築
SubversionをApacheで動かします
ついでにdigest認証なんてかけたり
ubuntu server12.04上に構築しました
Subversionの教科書を参考にまとめておいたものを記事にしたのですが,
書籍名を失念してしまいました・・・
Subversionのインストール
$ sudo apt-get install libapache2-svn subversion-tools apache2
パッケージのインストールが問題なく終了したら
「http://server_name/」にアクセスしてApacheが起動していることを確認
リポジトリの作成
リポジトリそのものを格納するディレクトリとして/var/lib/svnを用意します
そのしたにrepoというリポジトリを作成する
$ sudo mkdir -p /var/lib/svn $ sudo svnadmin create /var/lib/svn/repo $ ls -l /var/lib/svn/repo
リポジトリのPermission
リポジトリに対する操作はすべてApacheが行いますんで
Apacheがこのリポジトリを読み書きできるようにしなければいけません
これは、リポジトリ内部に含まれる全てのファイルの所有者をApacheの実行ユーザに変更すれば良いので
以下の例でファイルの所有者・所有グループもApacheの実行ユーザに設定します
UbuntuでのApacheの実行ユーザは「www-data」なのでそのように設定
$ sudo chown -R www-data:www-data /var/lib/svn/repo $ sudo chmod -R u+rw /var/lib/svn/repo $ ls -l /var/lib/svn/repo/
リポジトリの公開
まず、Apacheに必要なモジュールが正しく組み込まれているかの確認が必要です
Ubuntu上のApacheでは、モジュールの組み込みは
/etc/apache2/mods-enabled
に「モジュール名+.load」というシンボリックリンクを準備することによって行ういませう
これらのシンボリックリンクの参照先は
/etc/apache2/mods-available
にある「モジュール名+.load」というファイル
このファイル内にモジュールを組み込むためのディレクティブが記述されてます
また、後述するようにUbuntuではモジュールの設定を「モジュール名+.conf」というファイルで行います
.loadファイルと同様にシンボリックリンクが張られる感じ
/etc/apache2/mods-enabledに「dav.load」および「dav_svn.load」が存在しているか確認
とりあえず
$ ls /etc/apache2/mods-enabled | grep dav
とかすれば確認できると思います
もしもシンボリックリンクが張られていない場合は
a2enmod / a2dismod
というコマンドで簡単に追加/削除ができる
$ sudo a2enmod dav_svn
リポジトリ公開の設定
モジュールを組み込んだらリポジトリ公開の設定を行う
Ubuntuの場合、Subversionの設定ファイルの雛形として
/etc/apache2/mods-enabled/dav_svimvn.conf
があらかじめ用意されている
このファイルを編集すればよかろうかと
初期状態では全てコメントアウトされているので以下の行のコメントを外すなり、書き
足すなり・・・
<Location /svn> DAV svn SVNPath /var/lib/svn/repo </Location>
上記設定の意味は
- DAV svn
- SVMPath "場所"
設定が完了したら、以下のようにして変更した設定ファイルを再読み込みます
※Apacheが起動していない場合は、「reload」の代わりに「start」を使います
$ sudo service apache2 reload
ダイジェスト認証
アクセス制御をするよ
まずはパスワードファイルを生成します
ここでは、利用するパスワードファイルを
/etc/apache2/svnauth/digest.myrepo
とします
$ sudo mkdir /etc/apache2/svnauth $ sudo touch /etc/apache2/svnauth/digest.myrepo
続いて、ダイジェスト認証用のユーザエントリを登録するコマンドhtdigestを利用して
パスワードファイルにユーザを登録します
「htdigest パスワードファイル 認可領域名 ユーザ名」と3つ引数を与える必要があり
ます
以下では認可領域名として「Subversion Repository」を指定して、ユーザhogeを登録
してます
$ sudo htdigest /etc/apache2/svnauth/digest.myrepo "Subversion Repository" hoge
Adding password for hoge in realm Subversion Repository.
New password:
Re-type new password:
New passwordでパスワードを聞かれているので任意のパスワードを入力します
Re-type new passwordは確認用の再入力です
digest.myrepoの中身を確認すると「ユーザ名:認可領域名:パスワード(のハッシュ値)」が入っているはず
$ cat /etc/apache2/svnauth/digest.myrepo
最後にパーミッションを正しく設定すれば、パスワードファイルの準備は完了
安全のため、このパスワードファイルはrootのみ読み書き可能とし、
Apacheの実行ユーザであるwww-dataからは読み込みだけが行えるように設定します
$ sudo chmod 640 /etc/apache2/svnauth/digest.myrepo $ sudo chgrp www-data /etc/apache2/svnauth/digest.myrepo
ダイジェスト認証の設定
ダイジェスト認証を行うには、ダイジェスト認証を行うためのモジュールauth_digestを
Apacheにロードする必要があります
$ sudo a2enmod auth_digest
モジュールが有効になったら
$ sudo vim /etc/apache2/mods-enabled/dav_svn.conf
<Location /svn> DAV svn SVNPath /var/lib/svn/repo AuthType Digest AuthName "Subversion Repository" AuthDigestDomain /svn AuthUserFile /etc/apache2/svnauth/digest.myrepo Require valid-user </Location>
AuthDigestDomain:
AuthUserFile: ダイジェスト認証用のパスワードファイルを指定
そして設定再読み込み
$ sudo service apache2 reload
複数リポジトリの公開方法
Subversionが提供するSVNParentPathディレクティブは、指定されたディレクトリ直下にある
リポジトリを一括公開するものです
※
実際の設定例は以下
<Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Digest AuthName "Subversion Repository" AuthDigestDomain /svn AuthUserFile /etc/apache2/svnauth/digest.myrepo Require valid-user </Location>
上記例では/var/lib/svnを「全てのリポジトリの親ディレクトリ」としています
このディレクトリ以下にrepo1、repo2というリポジトリがあった場合、これらはそれぞれ
「/svn/repo1」
「/svn/repo2」
という形式でアクセスできます
むすび
以上でとりあえずSubversionのリポジトリサーバを構築できるかと思います
やはり教科書的な本はあったほうが良いですね
どこにやってしまったのか・・・