ksaitoの日記

日々試したことの覚え書き

SubversionをApache2に組み込む

移転しました。

自動的にリダイレクトします。

前にSubversionの自動起動を設定する方法を書きました。
Debianパッケージには、SubversionをApache2に組み込む便利な方法がありました。
libapache2-svnパッケージを使うとApache2のモジュールとしてSubversionリポジトリを組み込むことができます。

パッケージをインストールする

libapache2-svnでは、/var/lib/svnSubversionリポジトリを格納するディレクトリになります。

$ sudo aptitude install libapache2-svn 
[sudo] password for ksaito: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
以下の新規パッケージがインストールされます:
  libapache2-svn 
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、38 個が更新されていない。
148kB のアーカイブを取得する必要があります。 展開後に 356kB のディスク領域が新たに消費されます。
拡張状態情報を書き込んでいます... 完了
取得:1 http://jp.archive.ubuntu.com jaunty/universe libapache2-svn 1.5.4dfsg1-1ubuntu2 [148kB]
148kB を 2s 秒でダウンロードしました (59.1kB/s)
未選択パッケージ libapache2-svn を選択しています。
(データベースを読み込んでいます ... 現在 109550 個のファイルとディレクトリがインストールされています。)
(.../libapache2-svn_1.5.4dfsg1-1ubuntu2_i386.deb から) libapache2-svn を展開しています...
libapache2-svn (1.5.4dfsg1-1ubuntu2) を設定しています ...
Considering dependency dav for dav_svn:
Enabling module dav.
Enabling module dav_svn.
Run '/etc/init.d/apache2 restart' to activate new configuration!

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
拡張状態情報を書き込んでいます... 完了        

$ 

Apache2の設定

設定は、mods-available/dav_svn.confですが、デフォルトでは、すべてコメントアウトされています。
ユーザ認証が必要で、複数Subversionリポジトリホスティングする場合には、次のような修正をします。
Apache2の再起動も忘れずに。

$ cd /etc/apache2/
$ hg diff
diff -r 0964bb1cc9d5 mods-available/dav_svn.conf
 --- a/mods-available/dav_svn.conf	Mon Jun 08 23:01:32 2009 +0900
 +++ b/mods-available/dav_svn.conf	Mon Jun 08 23:03:55 2009 +0900
@@ -10,17 +10,17 @@
 # URL controls how the repository appears to the outside world.
 # In this example clients access the repository as http://hostname/svn/
 # Note, a literal /svn should NOT exist in your document root.
 -#
 +
 
   # Uncomment this to enable the repository
 -  #DAV svn
 +  DAV svn
 
   # Set this to the path to your repository
   #SVNPath /var/lib/svn
   # Alternatively, use SVNParentPath if you have multiple repositories under
   # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
   # You need either SVNPath and SVNParentPath, but not both.
 -  #SVNParentPath /var/lib/svn
 +  SVNParentPath /var/lib/svn
 
   # Access control is done at 3 levels: (1) Apache authentication, via
   # any of several methods.  A "Basic Auth" section is commented out
@@ -37,9 +37,9 @@
   # manage the password file - and the documentation for the
   # 'auth_basic' and 'authn_file' modules, which you will need for this
   # (enable them with 'a2enmod').
 -  #AuthType Basic
 -  #AuthName "Subversion Repository"
 -  #AuthUserFile /etc/apache2/dav_svn.passwd
 +  AuthType Basic
 +  AuthName "Subversion Repository"
 +  AuthUserFile /etc/apache2/dav_svn.passwd
 
   # To enable authorization via mod_authz_svn
   #AuthzSVNAccessFile /etc/apache2/dav_svn.authz
@@ -47,8 +47,8 @@
   # The following three lines allow anonymous read, but make
   # committers authenticate themselves.  It requires the 'authz_user'
   # module (enable it with 'a2enmod').
 -  #
 -    #Require valid-user
 -  # 
 +  
 +    Require valid-user
 +   
 
 -#
 +
$ sudo /etc/init.d/apache2 restart
 * Restarting web server apache2
   ...done.
$

Subversionリポジトリの作成

Subversionリポジトリを作成します。
proj1というリポジトリを作るとします。

$ cd /var/lib
$ sudo mkdir svn
$ cd svn
$ sudo mkdir proj1
$ cd proj1
$ sudo svnadmin create .
$ cd /var/lib/svn
$ sudo chown -R www-data:www-data proj1/
$

ユーザを登録する

ここまでの設定で、http://サーバ/svn/proj1/でリポジトリにアクセスすることができます。
更新するには、htpasswdでユーザを登録する必要があります。
これで、書き込み操作もできるようになります。

$ cd /etc/apache2/
$ grep passwd mods-available/dav_svn.conf 
  # you are using https.  See the 'htpasswd' command to create and
  AuthUserFile /etc/apache2/dav_svn.passwd
$ sudo sh -c "htpasswd -n user1 >> dav_svn.passwd"
New password: 
Re-type new password: 
$ cat dav_svn.passwd 
user1:gxezvVgOs2Ebwoc

$