Subversion (via mod_dav_svn) + Trac (on mod_python) でオープンソース開発環境の構築 on FC6
昔々 Trac をプロジェクトの進行管理・バグトラッカとして使おうとしたことがあるのですが,これを全社員に教育するのは大変だなと思ってあきらめました。
でも,個人的に使うぶんならいいんじゃね,ということで【YappoLogs: tracとsvnwebとapache1.3.*でオープンソース開発環境の構築】を参考にしつつ小学生脱却をねらってみました。
えっと環境は Fedora core 6 です。これだといろいろ楽でした。あと,apache ユーザになって作業したりとかプロな人からみるとアレなことをいっぱいしています。ごめんなさいごめんなさい。
目標
- http://example.com/repos/プロジェクト名/ に Subversion レポジトリを置く
- http://example.com/trac/プロジェクト名/ にアクセスすると Trac
- http://example.com/trac/ にアクセスすると,Trac プロジェクトの一覧
サンプルのプロジェクト名として「foobar」を採用しています。
Subversion 等のインストール
% sudo yum install subversion mod_dav_svn mod_python
で subversion, mod_dav_svn, mod_authz_svn, mod_python がインストールされます。
Trac のインストール
extras に rpm パッケージがあるので yum でインストール。
% sudo yum install trac
日本語版が使いたい人は,Trac の SRPM をインストールして,spec ファイルに下記のパッチをあててインタアクト株式会社さんに感謝しつつ自分でリビルドしてください。下記パッチの意味・適用法がわかんない人は残念ながら英語版を使ってください。
--- SPECS/trac.spec 2007-04-19 16:50:32.261139325 +0900 +++ SPECS/trac-ja.spec 2007-04-19 15:53:42.142374324 +0900 @@ -1,5 +1,5 @@ %{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} -Name: trac +Name: trac-ja Version: 0.10.3.1 Release: 2%{?dist} @@ -8,5 +8,5 @@ License: BSD URL: http://trac.edgewall.com/ -Source0: http://ftp.edgewall.com/pub/trac/%{name}-%{version}.tar.gz +Source0: http://www.i-act.co.jp/project/products/downloads/trac-%{version}-ja-1.zip Source1: trac.conf BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -18,4 +18,5 @@ Requires: httpd Requires: python-sqlite +Conflicts: trac %description @@ -30,5 +31,5 @@ %prep -%setup -q +%setup -q -n trac-%{version}-ja-1 chmod -x contrib/* sed -i -e 's|/var/svn/test|/srv/svn|' trac/scripts/admin.py @@ -37,4 +38,7 @@ rm trac/test.py +sed -i -e 's/\r//' scripts/trac-admin scripts/tracd cgi-bin/trac.cgi cgi-bin/trac.fcgi +find . -name '*.py' -print | xargs sed -i -e 's/\r//' + %build %{__python} setup.py build
日本語版配布コードの改行コードが CR+LF になってるので最初はまりました。
ディレクトリの準備
ここからちとしばらく apache ユーザになって処理をします。楽なんで。
% su - # su -s /bin/bash - apache -bash-3.1$ cd /var/www -bash-3.1$ mkdir repos trac svn_conf -bash-3.1$ chmod o= repos trac svn_conf
認証ファイルの用意
自分で使うだけなので Digest 認証を使うことにします。apache ユーザのままで
-bash-3.1$ htdigest -c /var/www/svn_conf/common.htdigest svn dayflower Adding password for dayflower in realm svn. New password: ***** Re-type new password: *****
svn というレルムにユーザ dayflower さんのパスワードを登録します。
Apache の設定
/etc/httpd/conf.d の python.conf, subversion.conf, trac.conf をごそっと削除します。というのは怖いんで,私の場合,/etc/httpd/subconf というフォルダを作って,/etc/httpd/conf/httpd.conf から conf.d を読み込むのではなく subconf というフォルダを読み込むようにしてます。
FC6 の httpd.conf の該当部分を
# # Load config files from the config directory "/etc/httpd/conf.d". # #Include conf.d/*.conf Include subconf/*.conf
こんな感じに,ってことね。
んで,/etc/httpd/subconf/trac.conf というファイルに次のように書きます。
LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so #LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule python_module modules/mod_python.so BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On # for svn <Location /repos> DAV svn SVNParentPath /var/www/repos AuthType Digest AuthName "svn" AuthDigestDomain /trac /repos AuthDigestProvider file AuthUserFile /var/www/svn_conf/common.htdigest <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> # for trac <Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/www/trac PythonOption TracUriRoot /trac </Location> <LocationMatch "/trac/[^/]+/login"> AuthType Digest AuthName "svn" AuthDigestDomain /trac /repos AuthDigestProvider file AuthUserFile /var/www/svn_conf/common.htdigest Require valid-user </LocationMatch>
SVNParentPath と TracEnvParentDir を設定することで,共通の設定をすませています。今後プロジェクトが増えても楽!
svn レポジトリの作成
まだ apache ユーザのままですよね?apache ユーザとして下記を実行します。
-bash-3.1$ svnadmin create /var/www/repos/foobar
これで Apache を起動すれば,
[dayflower@localhost]% svn co http://example.com/repos/foobar
でチェックアウト可能です。commit 等レポジトリを変更する必要がでてくると,パスワードを聞かれます。
またブラウザから http://example.com/repos/foobar にアクセスしてレポジトリを覗くこともできます。
Trac の設定
apache ユーザとして trac プロジェクトを作成します。
-bash-3.1$ trac-admin /var/www/trac/foobar initenv Creating a new Trac environment at /var/www/trac/foobar ...... Project Name [My Project]> FooBar Database connection string [sqlite:db/trac.db]> (リターンでOK) Repository type [svn]> (リターンでOK) Path to repository [/path/to/repos]> /var/www/repos/foobar Templates directory [/usr/share/trac/templates]> (リターンでOK) Creating and Initializing Project Installing default wiki pages /usr/share/trac/wiki-default/CamelCase => CamelCase ...... Congratulations!
基本的に入力する必要があるのは,レポジトリのパス名のとこだけです。
これでブラウザから http://example.com/trac/foobar にアクセスすると Trac のページにたどりつけます。先ほどと同じパスワードでログインもできます。
しかも先ほど書いたように,TracEnvParentDir を設定しているので,http://example.com/trac/ にアクセスすると,プロジェクトの一覧が表示されます。