理系学生日記

おまえはいつまで学生気分なのか

Subversion と Apache を連携させる

今まで Subversion は svnserve 経由で使ってたりしてましたけど,なんか svn+ssh とか書くのメンドいし,trac と連携させたいとか思ったことにして,Chapter 6. Server Configuration とかを読んだりしていました.ぼくは実際に使ってみるよりも,こういうドキュメントを読む方が好きですし,研究とかも自分でやるよか,論文を読む方が好きなクソみたいな人間です.

さて,今回試したのは Fedora だよー.

|tcsh|

cat /etc/redhat-release

Fedora release 9 (Sulphur) ||<

**subversion と mod_dav_svn を入れよう!

Fedora は DVD からインストールしたんですけど,インストールオプションとかは覚えていない.なんか見てみたらとりあえず Subversion は入っていた.

|tcsh|

yum list installed | grep -i subversion

subversion.i386 1.4.6-7 installed ||< mod_dav_svn は入っていなかったので,これをインストールします.これは,Apache から HTTP リクエストをパクって,リポジトリを操作してくれる感じのモジュール. |tcsh|

yum install mod_dav_svn

||<

httpd.conf に何か記述しろよなってことが Chapter 6. Server Configuration には書いてあったんですが,どうも mod_dav_svn を入れると Apache の conf.d に subversion.conf ていうコンフィグファイルが入るようなので,これに記述すれば良いですね.分かりやすい!!

|tcsh|

rpm -ql mod_dav_svn

/etc/httpd/conf.d/subversion.conf <= これ! /usr/lib/httpd/modules/mod_authz_svn.so /usr/lib/httpd/modules/mod_dav_svn.so ||<

subversion.conf ですけど,最初は単にモジュールを読みこむだけの設定だ.

|tcsh| $ grep -v -e ^# -e ^$ /etc/httpd/conf.d/subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so ||<

**リポジトリを作るよ!

四の五の言わずにさっさと作るし!

|tcsh|

mkdir -p /var/svn/

cd /var/svn

svadmin create repos

||<

**HTTP でアクセスしてみる

subversion.conf に最低限の設定をして,Apache に反映させるよー.Location ディレクティブによって,http://kiririmode-subversion/repos みたいな感じの URI へのアクセスを見て, mod_dav_svn がリポジトリ /var/svn/repos へのアクセスに変換してくれるみたいな感じ.

|tcsh| $ grep -v -e ^# -e ^$ /etc/httpd/conf.d/subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so DAV svn SVNPath /var/svn/repos

apachectl graceful

||< ブラウザからアクセスしたらこんな感じになった!

**Digest 認証でもかけてみようやないか

このままだと,世界中の誰もがコミットしてくれてスゴい感じですけど,ぼくは世の中の人とか信じてないし! そんなわけで Digest 認証を設定する.HTTPS とかもあるんですけど,お前のリポジトリで何を暗号化するんだよアホかみたいな感じ. まず,ユーザ名とかパスワードとか realm とかを記録するファイルを作るよ.htdigest でできるんだけど,あんまし Chapter 6. Server Configuration には説明してなかったなー.Basic 認証の htpasswd は説明がわりとある.四の五の言わず,つくる!

|tcsh|

htdigest -c /path/to/auth-digest 'Subversion repository' kiririmode

||< よしゃ! そしたら subversion.conf を次みたく変更する! realm は AuthName と対応して,AuthUserFile は htdigest で作ったファイルへのパスですね.LimitExcept では,GET とか PROPFIND とか READ 系のリポジトリアクセス以外のアクセスに認証をかける! これで commit するヤツは全員ぼくが知ってる人間になった! |tcsh|

grep -v -e ^# -e ^$ subversion.conf

LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so DAV svn SVNPath /var/svn/repos AuthType Digest AuthName "Subversion repository" AuthDigestDomain /repos/ AuthUserFile /path/to/auth-digest Require valid-user ||< とりあえずそんな感じ.あと log とかの設定をしたいんだけど,また続く.