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

日本語版が使いたい人は,TracSRPM をインストールして,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/ にアクセスすると,プロジェクトの一覧が表示されます。

この後

レポジトリ(プロジェクト)を新規追加する際は,apache ユーザになって「svn レポジトリの作成」と「Trac の設定」を実行すれば OK。いろいろ追加設定する必要はありません。