Debian GNU/Linux Wheezyで Trac 0.12.2

RedMineRailsの動きについていけてないようなので、Trac + Subversionを使ってみる。

インストール

The Trac Project:TracInstallによると、Trac 0.12より多言語化になっているとのこと。また、Apacheと連携させるならばmod_pythonが非推奨とのこと。よって以下をいれる。

% aptitude install trac libapache2-mod-wsgi

プロジェクトの作成

The Trac Project:TracInstallによると、設定時には連携するリポジトリを指定しなくなったらしい。

Tracの複数プロジェクトをApache2で連動させるにしたがい設定する。

  • 各プロジェクトを置くディレクトリ:/var/trac/sites 以下
    • プロジェクト1のディレクトリ: /var/trac/sites/my-project1
    • プロジェクト2のディレクトリ: /var/trac/sites/my-project2
  • 共通のcgiを置くディレクトリ: /var/trac/common 以下

ディレクトリの作成。

% 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>

wsgiを有効にし、apacheを再起動させる。

% 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を参照)。

  1. フォームからログイン(acct_mgr.web_ui.LoginModule = enabledとtrac.web.auth.LoginModule = disabled)
  2. Digest認証を使う([account-manager]の記述全部、[components]のacct_mgr.htfile.HtDigestStore = enabled)
  3. 管理者によるアカウント管理(acct_mgr.admin.AccountManagerAdminPages = enabled)
  4. アカウント情報の変更(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リポジトリを作成する。SubversionWebDav経由でアクセスさせ、アクセス制限はTracと共通にする。

SubversionApache用モジュールのインストール。

% 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」をクリックする。

今度はターミナル上でリポジトリTracに読み込ませる。

% 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」画面から有効にする。