MY-NOTEBOOK

Wednesday, April 30, 2008

Apache経由でSubversionレポジトリにアクセスする設定

この情報は、 ファーストサーバVPS「プロビジネス20」上での設定記録 です。
他のLinuxサーバでは設定方法が異なる部分があると思います。

(プロビジネス5上でも同様に設定できました。2008-10-23)

Subversion と mod_dav_svn のインストール

例によってParallelsのPowerPanelのpackages から選択してインストールする。

mod_dav_svnをインストールすると、

  • /etc/httpd/modules/mod_dav_svn
  • /etc/httpd/conf.d/subversion.conf

がインストールされる。

設定は、subversion.conf に対して行い、設定方法は、subversion.conf 内に書いてあるのでそれに従う。

レポジトリの用意

/var/www/svn/myrepos にsvnのレポジトリを用意する。
さらにオーナーとグループをapacheに設定。
(これはApache経由でアクセスするために、Apacheがsvnのレポジトリを読み書きできないといけないから...subversion.confに書いてある通り)

 $ su
 # cd /var/www
 # mkdir svn
 # cd /var/www/svn
 # svnadmin create myrepos
 # cd /var/www
 # chown -R apache.apache svn

svnserver.conf
/var/www/svn/myrepos/conf/svnserver.conf はapache経由で使う場合は、設定変更の必要はない。

subversion.confの設定

/etc/httpd/conf.d/subversion.conf を以下のように設定。

    <Location /svn>
       DAV svn
       SVNParentPath /var/www/svn
    </Location>

この段階で作動テスト

ここまで設定できたら、Apacheを再起動(/etc/init.d/httpd restart) して、作動を確認します。

作動確認方法:以下のURLにアクセスして、レポジトリが閲覧できるか確認。

  • http://yourdomain/svn/myrepos/

アクセス制限を行う

レポジトリを一般公開しない場合は、パスワードで保護します。

htpasswd でユーザ名とパスワードの設定

/var/www/svn/myrepos/conf/myhtpasswd に hoge ユーザ(とそのパスワード)を用意します。

 # cd /var/www/svn/myrepos/conf
 # htpasswd -c -m myhtpasswd hoge
 ....
subversion.conf に認証設定を追加

/etc/httpd/conf.d/subversion.conf
の Location 記述部分を以下のように設定し直す。

    <Location /svn>
       DAV svn
       SVNParentPath /var/www/svn
       AuthType Basic
       AuthName "Authorization Realm"
       AuthUserFile /var/www/svn/myrepos/conf/myhtpasswd
       Require valid-user
    </Location>

Apacheを再起動して作動テスト

 # /etc/init.d/httpd restart
 # svn ls http://localhost/svn/myrepos/ --username hoge 

注意点(トラブルシューティング)

subversion.conf 内に説明があるので、それにしたがって設定していけば問題はない。

個人的には以下の点でつまずいた。

subversion.conf に間違ったディレクトリを指定

 # svnadmin create /var/www/svn-repos 

として、このディレクトリにレポジトリを作成して、
subversion.conf の設定で、 SVNParentPath /var/www/svn-repos と指定していたのだが、これではエラーになる。
実際には、以下のように svn ディレクトリを作成し(これはレポジトリではない)

 # mkdir /var/www/svn
 # svnadmin create /var/www/svn/svn-repos 

svnの中に、svn-reposというレポジトリを作成する。
さらに、subversion.conf では、以下のように svn-repos の親ディレクトリを指定する。
(SVNParentPathの設定なので...親ディレクトリを指定)

SVNParentPath /var/www/svn

/var/www/svn 以下にSubversionのレポジトリを用意する必要がある

おそらく、Apacheユーザがアクセスできる場所にレポジトリを設置すればいいという話で、/var/www/svn 以下である必要はない(はず)。
しかし、普通 foo というUNIXユーザがいたら、/home/foo がホームディレクトリなので、/home/foo/svn/myrepos などにsubversionのレポジトリをつくるのが普通・・・というか人情というか。
で、そこにつくった場合、/home/foo/svn を apacheユーザ・apacheグループに設定しておいてもApacheからアクセスできないといわれてしまう。

補足:

/var/www/svn に配置するとうまく機能するので、/home/foo/svn に配置したときにうまくいかない理由は詳しく追求していません。
大島の単なる勘違い・設定ミスの可能性も高い。

© 2006-2012 Tomoaki Oshima