RedMineがRailsの動きについていけてないようなので、Trac + Subversionを使ってみる。
インストール
The Trac Project:TracInstallによると、Trac 0.12より多言語化になっているとのこと。また、Apacheと連携させるならばmod_pythonが非推奨とのこと。よって以下をいれる。
% aptitude install trac libapache2-mod-wsgi
プロジェクトの作成
The Trac Project:TracInstallによると、設定時には連携するリポジトリを指定しなくなったらしい。
Tracの複数プロジェクトをApache2で連動させるにしたがい設定する。
ディレクトリの作成。
% sudo mkdir -p /var/trac/sites % sudo mkdir -p /var/trac/common
各プロジェクト用のディレクトリとデータベースを作成する。プロジェクト名以外はデフォルトでよい(Enterキーを押して次に進めてよい)
% sudo trac-admin /var/trac/sites/my-project1 initenv % sudo trac-admin /var/trac/sites/my-project2 initenv
共通スクリプト(Tracのプログラム部分)を用意する。このプログラム部分は全プロジェクトで共通に使う
% sudo trac-admin /var/trac/sites/my-project1 deploy /var/trac/common
apacheがアクセスできるようにする。
% sudo chown -R www-data:www-data /var/trac
/etc/apache2/mods-available/wsgi.conf を編集する。
% cd /etc/apache2/mods-available/ % sudo cp -p wsgi.conf wsgi.conf.org % sudo vi wsgi.conf
編集内容は以下のとおり。
<IfModule mod_wsgi.c> WSGIScriptAlias /trac /var/trac/common/cgi-bin/trac.wsgi AliasMatch ^/trac/[^/]+/chrome/(.*) /var/trac/common/htdocs/$1 <Directory /var/trac/common> WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory> <Location "/trac"> SetEnv trac.env_parent_dir "/var/trac/sites" </Location>
% sudo a2enmod wsgi % sudo /etc/init.d/apache2 restart
http://YOUR_WEBSERVER_FQDN/trac/ にアクセスしてみる。
ログインフォームからログイン
ログインフォームからログインできるようにする。next49を管理者権限のあるユーザーとする。
% sudo trac-admin /var/trac/sites/my-project1 deploy > permission add next49 TRAC_ADMIN
/var/trac/sites/project1/conf/trac.iniに以下を加える。これによって以下を利用できる(詳しくはAccountManagerを参照)。
- フォームからログイン(acct_mgr.web_ui.LoginModule = enabledとtrac.web.auth.LoginModule = disabled)
- Digest認証を使う([account-manager]の記述全部、[components]のacct_mgr.htfile.HtDigestStore = enabled)
- 管理者によるアカウント管理(acct_mgr.admin.AccountManagerAdminPages = enabled)
- アカウント情報の変更(acct_mgr.web_ui.AccountModule = enabled)
[account-manager] htdigest_realm = Trac password_file = /var/trac/trac.htdigest password_store = HtDigestStore [components] acct_mgr.admin.AccountManagerAdminPages = enabled acct_mgr.web_ui.AccountModule = enabled acct_mgr.web_ui.LoginModule = enabled acct_mgr.htfile.HtDigestStore = enabled trac.web.auth.LoginModule = disabled
管理者ユーザーのアカウントを作成する。RealmをTrac、パスワードファイルを/var/trac/trac.htdigestに置くとする。
% sudo htdigest -c /var/trac/trac.htdigest Trac next49
http://YOUR_WEBSERVER_FQDN/trac/ にアクセスし「Login」からログインを行う。
Subversionの設置&WebDav+Digest認証。
別のサーバーにあるリポジトリをSSH経由ではとってこれない様子なので、同じサーバー上のSubversionのリポジトリを作成する。SubversionはWebDav経由でアクセスさせ、アクセス制限はTracと共通にする。
SubversionとApache用モジュールのインストール。
% sudo aptitude install subversion libapache2-svn
次に別サーバーにあるリポジトリーをdumpする。リポジトリが /hogehoge/repo にあるとする。
% svnadmin dump /hogehoge/repo > repo.svn
それをTracを動かすサーバーにコピーし、リポジトリを作成する。
% sudo mkdir -p /var/subversion % cd /var/subversion % sudo svnadmin create project1_svn % sudo svnadmin load project1_svn < ~/repo.svn % sudo chown -R www-data:www-data project1_svn
/etc/apache2/mods-available/dav_svn.conf を修正する。
% cd /etc/apache2/mods-available/ % sudo cp -p dav_svn.conf dav_svn.conf.org % sudo vi dav_svn.conf
以下のように設定する。なお、SVNListParentPath on"と"AuthzSVNAccessFile"の同時利用したときのバグとその対処方法はladybug:Trac 0.12 導入時のメモ(設定前編)の「DAV を有効化」の部分とLivingdeadの日記: SVNListParentPath と AuthzSVNAccessFile を同時に使うにしたがっている。
# If you use both "SVNListParentPath on" and "AuthzSVNAccessFile", # then following redirection is necessary. RedirectMatch ^(/repos)$ $1/ <Location /repos/> DAV svn SVNParentPath /var/subversion SVNListParentPath on <IfModule mod_authz_svn.c> AuthzSVNAccessFile /etc/apache2/dav_svn.authz </IfModule> AuthType Digest AuthName "Trac" AuthDigestProvider file AuthDigestDomain /repos/ AuthUserFile /var/trac/trac.htdigest #これはApache2.2用。2.0 だとAuthDigestFileなので注意 Require valid-user </Location>
Access Control for Subversion with Apache2 and Authzを参考に /etc/apache2/dav_svn.authz を編集する。subversion-1.6.17の「Apache + Authz を使ってみる」も参考にすること。私は、開発チームには branches だけを編集させたいので以下のようにした。
[groups] devteam = next49, bob, barry, brett [/] @devteam = r # 各プロジェクトごとの設定は、 # [プロジェクトディレクトリ:制御したいディレクトリ] # と記述する。 [project1_svn:/trunk] next49 = rw [project1_svn:/branches] @devteam = rw [project2_svn:/branches] @devteam = r
Apacheのモジュールを有効にする.auth_digest、dav_svn、authz_svnを有効にする。
% sudo a2enmod auth_digest % sudo a2enmod dav_svn % sudo a2enmod authz_svn
Apacheを再起動する。
% sudo /etc/init.d/apache2 restart
http://YOUR_WEBSERVER_FQDN/repos/ にアクセスしてみる。
Tracとの連携
Web上から「Adimin」→「Repositories」と進む。「Add Repository」からSubversionのリポジトリを登録する。以下を入力して「Add」をクリックする。
- Name(任意のものでよい): Project1_SVN
- Type:svn
- Directory: /var/subversion/project1_svn
Web上から「Adimin」→「Plugins」と進む。Trac 0.12.2のCommitTicketReferenceMacroとCommitTicketUpdaterをチェックし、「Apply changes」をクリックする。
% sudo trac-admin /var/trac/sites/project1 repository resync "Project1_SVN"
つぎにコミットがあったときにTracにそれを報告するように設定を書く。/var/subversion/project1_svn/hooks/post-commit を以下のように作成する(milkazの日記:Trac0.12とsvnの連携の記述をそのままいただいた。
#!/bin/sh REPOS="$1" REV="$2" ENV="/var/trac/sites/project1" /usr/bin/trac-admin $ENV changeset added "Project1_SVN" $REV
実行権限を付与する。
% sudo chmod 755 /var/subversion/project1_svn/hooks/post-commit
これで設定終了、確認する。Web上から「New Ticket」でチケットを作成する。中身は何でも良い。その後、自分のマシンでリポジトリをチェックアウトする。ちなみにUbuntu 11.10ではUbuntuでsvnコマンドを使用した時”Password for ‘(null)’ GNOME keyring:”と表示されユーザー認証ができない問題についてに書いてあるのと同じ症状が発生した。
% svn checkout http://YOUR_WEBSERVER_FQDN/svn-project1
何かのファイルを編集する。そしてコミット
% svn commit
コミットの際のメッセージに以下のようにチケット番号をいれると、チケットと対応付けができる。
refs #1 コメント
Web上から「Browse Source」より確認できる。
Subversionのリポジトリのミラーリング
svnsyncを使ってリポジトリをミラーリングしておく。まずはミラーリング先を用意。
% cd % mkdir TrackBackup % cd TrackBackup % svnadmin create project1-mirror-svn % vi project1-mirror-svn/hooks/pre-revprop-change
中身は以下のとおり
#!/bin/sh exit 0
実行権限を与える。
% chmod 755 project1-mirror-svn/hooks/pre-revprop-change
初期化して、ミラーリング
% svnsync init file:///home/next49/TracBackup/project1-mirror-svn file:///var/subversion/project1_svn % svnsync sync file:///home/next49/TracBackup/project1-mirror-svn
crontabで定期的にミラーリング。シェルスクリプトを用意 /home/TracBackup/Mirroring.sh の中身を以下のようにする。
#!/bin/sh /usr/bin/svnsync sync file:///home/next49/TracBackup/project1-mirror-svn
crontabで追加する。
% crontab -e 0 3 * * * /home/next49/TracBackup/Mirroring.sh > /dev/null 2>&1
pluginのインストール
Webブラウザ上からtrac.iniを設定できる http://trac-hacks.org/wiki/IniAdminPlugin IniAdminPlugin をインストールする。
% sudo easy_install http://trac-hacks.org/svn/iniadminplugin/0.11
Wikiを編集時即編集後画面にできるhttp://trac-hacks.org/wiki/TracWysiwygPlugin TracWysiwygPluginをインストールする。
% sudo easy_install http://trac-hacks.org/svn/tracwysiwygplugin/0.12
Apacheを再起動して、「Admin」画面から有効にする。