Python 製の課題管理ツール Trac

## Trac
https://trac.edgewall.org/
<img src="https://www.edgewall.org/gfx/trac_logo.png">
**Trac** は Python で書かれた Edgewall Software 社によるオープンソースの課題管理ツール。修正BSDライセンス。
バージョンは現行の 1.2 系(2016/11~)、LTS の 1.0 系(2012/9~2015/7)、次期バージョンの 1.3 系(2016/11~)などがあり、最新安定版は2017年6月21日リリースの 1.2.2 になる。
他に Redmine や Mantis Bug Tracker などがある。

## 歴史
https://trac.edgewall.org/wiki/TracHistory
https://trac.edgewall.org/wiki/TracChangeLog?version=95
https://en.wikipedia.org/wiki/Trac
2003年8月に [CVSTrac](http://www.cvstrac.org/) を参考に SQLite と Subversion を使って svntrac として書かれ始め、2003年12月に Trac にリネームされる。2004年2月に Trac のバージョンは最初に 0.0.1 から 0.1 に変更され、次に 0.1 から 0.5 にいっきに変わった。その後2004年3月に 0.6 と 0.7、そして2004年11月に 0.8 とバージョンアップしていった。

## システム要件
https://trac.edgewall.org/wiki/TracInstall

* Python 2.6 以上 3.0 未満
* setuptools 0.6 以上
* Genshi 0.6 以上
* Babel 0.9.6 または 1.3 以上

## インストール
### 構成例

* CentOS 7.3.1611 (1706) minimal
 * Python 2.7.5 (anaconda)
 * setuptools 0.9.8 (base)
 * Apache 2.4.6 (base)
 * mod_wsgi 3.4 (base)
 * Trac 1.2.2 (easy_install)
 * Babel 2.4.0 (easy_install)
 * Genshi 0.7 (easy_install)

### Trac
```bash
yum -y install gcc python-devel python-setuptools enscript
easy_install Babel
easy_install Trac
```
Trac より先に Babel をインストールしておくと自動的に日本語化される。

### Apache
```bash
yum -y install httpd mod_wsgi
```
```bash
mkdir /var/www/trac
chown apache. /var/www/trac
```
```bash
cat << "_EOF_" > /var/www/trac/trac.wsgi && chmod 755 /var/www/trac/trac.wsgi
import os
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/www/trac'
os.environ['PYTHON_EGG_CACHE'] = '/var/www/trac/eggs'
import trac.web.main
application = trac.web.main.dispatch_request
_EOF_
```
```apache
cat << "_EOF_" > /etc/httpd/conf.d/trac.conf
WSGIScriptAlias /trac /var/www/trac/trac.wsgi
<Directory /var/www/trac>
    WSGIApplicationGroup %{GLOBAL}
    Require all granted
</Directory>
<LocationMatch "/trac/.*/login">
   AuthType Basic
   AuthName "trac"
   AuthUserFile "/var/www/trac/.htpasswd"
   Require valid-user
</LocationMatch>
_EOF_
```
```bash
firewall-cmd --permanent --add-service=http && firewall-cmd --reload
httpd -t
systemctl start httpd && systemctl enable $_
setenforce 0 #TODO
```

### Subversion
```bash
yum install subversion subversion-python mod_dav_svn
mkdir /var/www/svn
```
```apache
cat << "_EOF_" > /etc/httpd/conf.d/subversion.conf
<Location /svn>
    DAV svn
    SVNParentPath /var/www/svn
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        AuthType Basic
        AuthName "Subversion - Authorization Realm"
        AuthUserFile /var/www/trac/.htpasswd
        Require valid-user
    </LimitExcept>
</Location>
_EOF_
```
```bash
httpd -t
systemctl restart httpd
```

### BASIC 認証
```bash
htpasswd -c /var/www/trac/.htpasswd admin
htpasswd /var/www/trac/.htpasswd example_user
```

## プラグイン
### Trac Portal Plugin
https://pypi.python.org/pypi/TracPortalPlugin
Trac は複数プロジェクトを管理する機能が用意されていないので Trac Portal Plugin などを利用する必要がある。

```bash
trac-admin /var/www/trac/portal initenv
trac-admin /var/www/trac/portal permission add admin TRAC_ADMIN
```
```bash
easy_install -Z -U https://trac-hacks.org/svn/xmlrpcplugin/trunk
trac-admin /var/www/trac/portal config set components tracrpc.* enabled
trac-admin /var/www/trac/portal permission add authenticated XML_RPC 
```
```bash
easy_install TracPortalPlugin
trac-admin /var/www/trac/portal config set components tracportal.* enabled
trac-admin /var/www/trac/portal config set components tracportalopt.* enabled
trac-admin /var/www/trac/portal config set trac mainnav "wiki, dashboard, cross_search, public_projects, available_projects, new_project"
trac-admin /var/www/trac/portal config set tracportal ignore_projects　portal
trac-admin /var/www/trac/portal config set tracportal trac_env_parent_dir　/var/www/trac
```
```bash
trac-admin /var/www/trac/portal upgrade
chown -R apache. /var/www/trac/portal
```
![](https://raw.githubusercontent.com/iij/TracPortalPlugin/master/screenshot/project_list.png)
![](https://raw.githubusercontent.com/iij/TracPortalPlugin/master/screenshot/dashboard.png)
![](https://raw.githubusercontent.com/iij/TracPortalPlugin/master/screenshot/project_creation.png)

### AccountManagerPlugin
https://trac-hacks.org/wiki/AccountManagerPlugin
https://ameblo.jp/itboy/entry-10182930033.html

```bash
easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk
trac-admin /var/www/trac/portal config set components acct_mgr.* enabled
chown -R apache. /var/www/trac/portal
```

### IniAdminPlugin
https://trac-hacks.org/wiki/IniAdminPlugin

### TracIniAdminPanelPlugin
https://trac-hacks.org/wiki/TracIniAdminPanelPlugin

## 参考情報

[Tracのプラグインがエラーで入らないときの対処法 | いちよんこーど](https://14code.com/blog/20130325_432)
[Shibuya.trac](https://ja.osdn.net/projects/shibuya-trac/)
[Track Hacks](https://trac-hacks.org/)

## 課題管理ツール
* [Redmine](http://qiita.com/bezeklik/items/483b61c637c805f2945f)
* [Trac](http://qiita.com/bezeklik/items/304dbe67c692dca1d87f)
* [Mantis Bug Tracker](http://qiita.com/bezeklik/items/08da5cdc17f8fe514d9b)