Tracのセットアップ
最近、何かと流行なのがTrac。これは、従来のBTSに対してITS(Issue Tracking Sysytem)と分類されるらしい。まぁ、「バグだけじゃないよ」ということだろう。
確かに、バグ、タスク、その他の課題などチケットというものですべて管理するようになっているので、カスタマイズしだいで運用の自由度が高くなりそうなのは納得する。しかし、その反面、管理対象(バグやタスク)に対して運用ルールをしっかり決めないと何をどう使ってよいのか悩みそうだ。もちろん、これは自由度とのトレードオフである。
僕が本当に興味があるのはその運用ルールなのだが、Trac初心者なのでまずは自分でセットアップから始める。因みに、TracやPythonのインストールは、etchのstableをaptitudeするだけで悩まなかったので割愛する。
今回は、Subversionとの連携(とその運用)も大きなテーマなので、svnというユーザを作って、リポジトリ用の~svn/repositoriesと、trac用の~svn/tracというディレクトリを切ることにした。
当初は、tracユーザとsvnユーザを個別に作成したほうがよいと思っていたのだが、Tracとsubversion(via web_dav)で認証、認可の設定を共有することを考えると、1つのユーザでやった方が楽かなと判断し、SubversionなしにTracを使うことはないだろうからsvnユーザに一本化した。
ひとまず、SVNリポジトリとTracプロジェクトをつくる。リポジトリは、web_dav経由なのでapache2の実行ユーザであるwww-dataユーザをsvnグループに追加し、リポジトリにsvnグループで書き込み可能なようパーミッションを設定することで対応した。Tracも同様に、svnグループで書き込み可能にすることでチケット登録などのdbを更新できるようにした。
svn:~$ svn create ./repositories/myproject
svn:~$ trac-admin ./trac/myproject
ただユーザはsvnで一緒だが、webで公開するのはtrac.example.com、svn.example.comのようにホスト名を分けたかったので、VirtualHostでそれぞれ別の設定にした。
ServerName svn.example.com DocumentRoot /home/svn/repositories DAV svn SVNParentPath /home/svn/repositories AuthzSVNAccessFile /home/svn/authz.access AuthType Basic AuthName "SVN Repogitory Server" AuthUserFile /home/svn/trac/.htpasswd Require valid-user
これは、SubversionのリポジトリをWEB_DAVで公開する設定である。SVNParentPathに親ディレクトリを指定することで、この設定ファイルは変更せずに、このディレクトリ直下にリポジトリを作成するだけでよくなる。あとは、ベーシック認証の設定である。ポイントは、パスワードファイルをTracと共有することを意識しているので、あえて/home/svn/tracディレクトリの直下に置いていることぐらいかな。
ServerName trac.example.com DocumentRoot /home/svn/trac/ Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracUriRoot / PythonOption TracEnvParentDir /home/svn/trac
これは、Trac側の設定である。Tracはcgiやスタンドアロンでも動作するらしいらしいが、普通はmod_pythonでしょう。そして、TracはSubversionのリポジトリに対して1プロジェクト作成するのが普通だろうから、SVNも複数のリポジトリに対応するため、Tracも複数プロジェクトに対応させたい。これは、TracEnvParentDirというPythonOptionを指定してやればよい。
また、~svn/trac/.htaccessを次のように設定し、Tracのすべてのプロジェクトをベーシック認証するようにした。
AuthType Basic AuthName "Trac Server" AuthUserFile /home/svn/trac/.htpasswd Require valid-user
最後に、trac.iniを設定する。
[trac] authz_file = /home/svn/authz.access authz_module_name = myproject base_url = check_auth_ip = true database = sqlite:db/trac.db default_charset = utf-8 default_handler = WikiModule htdocs_location = ignore_auth_case = false mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search metanav = login,logout,settings,help,about permission_store = DefaultPermissionStore repository_dir = /home/svn/repositories/myproject repository_type = svn # request_filters =templates_dir = /usr/share/trac/templates timeout = 20
ここでのポイントは、authz_fileの指定であるこれはweb_davの設定で指定したAuthzSVNAccessFileと同じものを共有するようにしている。これによって、認可制御を一元管理できる。因みに、認証に関しては、.htpasswdで一元管理している。
そして、意外に情報が少なくてはまったのが、authz_module_nameである。このオプションは、Tracを複数プロジェクトに対応させる(i.e. TracEnvParentDirを指定した)場合に設定するもので、ここにリポジトリのモジュール名を指定することで、authz_fileを次のように記述してリポジトリ毎の認可制御が可能になる。
ここでいう複数なんとかというのは、単にリポジトリやプロジェクトのリストをトップに持ってくるかどうかぐらいの意味合いで、複数のプロジェクトを相互に管理してシナジーを生むようなかっこいいものではない。
[groups] admin = fuzzybsd, bobby, mike [myproject:/] * = @admin = rw [anyproject:/] * =
このように、authz_module_nameで指定した文字列をプレフィックスにすることで、リポジトリ毎に細かい制御が可能となる。
以上、なんのまとまりもないが、ザックリ書いてみた。
追々、Mantisとの比較なんかもやりたいところである。