Tracの構築手順

Tracの構築手順．会社で使うとき用の構築手順メモ．

* プロキシの設定も含まれますので，プロキシが不要な方はプロキシ関連部分は無視してください．
* 想定環境はUbuntu 16.04 LTS Xenial Xerus (最小インストールorServer版)です．

# Subversionの導入
Subversionのインストールとプロキシの設定．

```
sudo apt install subversion
vim ~/.subversion/servers
```

```:~/.subversion/servers
[global]
http-proxy-host = proxy.example.com
http-proxy-port = 8080
```

# 日本語環境にする
必要な人だけ

```
sudo apt install language-pack-ja
update-locale LANG=ja_JP.UTF-8
# 再ログイン
```

# Tracをソースからインストールする
Tracが依存するパッケージをインソールする

```sh
# プロキシの設定
export HTTP_PROXY=http://proxy.example.com:8080/
export HTTPS_PROXY=http://proxy.example.com:8080/
export FTP_PROXY=http://proxy.example.com:8080/

# Tracが依存するパッケージのインストール
sudo apt install python-setuptools python-dev python3-dev libapache2-mod-wsgi sqlite3 subversion python3-pygments python-pygments
sudo apt install apache2-utils
sudo apt install gcc
sudo easy_install babel
sudo easy_install genshi
```

Tracのソースコードを取得してインストールする．
`update_catalog` で日本語が有効になる．

```sh
cd ~
svn co https://svn.edgewall.org/repos/trac/tags/trac-1.1.6/
cd trac-1.1.6
python setup.py update_catalog -l ja
python setup.py compile_catalog -f
sudo python setup.py install
sudo service apache2 restart
```

<!--
```
　# sudo apt install trac trac-ja-resource
　# qptは不要
　# svn co https://svn.edgewall.org/repos/trac/trunk
　# svn co https://svn.edgewall.org/repos/trac/branches/1.2-stable/ trac-1.2-stable
　# git clone https://github.com/edgewall/trac/tree/1.0-stable
　# git clone https://github.com/edgewall/trac/tree/1.2-stable
　# svn co https://svn.edgewall.org/repos/trac/tags/trac-1.0.13/
```
-->

# Tracの設定
Trac用のフォルダの作成する．`/var/www/trac/`はプロジェクトルートになるので，もし変更するなら，以降すべてのパスを変更すること．

```
sudo mkdir /var/www/trac
sudo vim /var/www/trac/trac.wsgi
sudo chmod 755 /var/www/trac/trac.wsgi
```

Trac用のwsgiファイルを作成

```py:/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
```

Apache2上にTracサイトを作成し有効化．PythonはWSGIで動かす．

```
sudo vim /etc/apache2/sites-available/trac.conf
sudo a2ensite trac
```

```aconf:/etc/apache2/sites-available/trac.conf
WSGIDaemonProcess trac user=www-data group=www-data processes=2 threads=25 maximum-requests=10000
WSGIProcessGroup trac

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>

Alias /trac/chrome /usr/lib/python2.7/dist-packages/trac/htdocs
<Location "/trac/chrome">
    Require all granted
</Location>
```

# Tracにプロジェクトを追加
プロジェクト名は`myproject`．

```
sudo trac-admin /var/www/trac/myproject initenv
sudo trac-admin /var/www/trac/myproject/ deploy /var/www/trac/myproject
sudo -u www-data trac-admin /var/www/trac/myproject/ wiki load /usr/share/trac-ja-resource/trac/wiki/default-pages
sudo vim /var/www/trac/vnfdiy/conf/trac.ini
sudo chown -R www-data:www-data /var/www/trac/
```

```ini:/var/www/trac/myproject/conf/trac.ini
[attachment]
max_size = 26214400
max_zip_size = 209715200
```

# プロジェクトにユーザ追加
```
sudo htpasswd -c /var/www/trac/.htpasswd admin
sudo htpasswd /var/www/trac/.htpasswd user2
sudo chown -R www-data:www-data /var/www/trac/
sudo service apache2 restart
sudo -u www-data trac-admin /var/www/trac/myproject/ permission add admin TRAC_ADMIN
sudo -u www-data trac-admin /var/www/trac/myproject/ permission add administrators TRAC_ADMIN
sudo -u www-data trac-admin /var/www/trac/myproject/ permission add admin administrators
sudo trac-admin /var/www/trac/myproject/ permission list
```

# Git(gitolite3)と連携
必要な人だけ．

```ini:/var/www/trac/vnfdiy/conf/trac.ini
[components]
tracopt.versioncontrol.git.* = enabled

[git]
projects_base = /var/lib/gitolite3/repositories
projects_list = /var/lib/gitolite3/projects.list
```

# プラグイン

## iniadminplugin
```sh
sudo easy_install https://trac-hacks.org/svn/iniadminplugin/0.11
sudo vim /var/www/trac/myproject/conf/trac.ini
```
```ini:/var/www/trac/myproject/conf/trac.ini
[components]
iniadmin.* = enabled
```

## markdown.macro.markdownmacro

```sh
sudo easy_install Markdown 
sudo easy_install https://trac-hacks.org/svn/markdownmacro/trunk/
```

## slack_notification

```sh
sudo easy_install https://github.com/mandic-cloud/trac-slack-plugin
```

## plantumlmacro

```sh
sudo apt install graphviz
sudo mkdir /var/graphviz
export GRAPHVIZ_DOT=/var/graphviz
sudo easy_install https://trac-hacks.org/svn/plantumlmacro/trunk
sudo apt isntall default-jre
sudo apt install plantuml
find / -name plantuml.jar
sudo vim /var/www/trac/myproject/conf/trac.ini
sudo service apache2 restart
```

```ini:/var/www/trac/myproject/conf/trac.ini
[components]
plantuml.macro.plantumlmacro = enabled

[plantuml]
java_bin = java
plantuml_jar = /usr/share/plantuml/plantuml.jar
```

* https://trac-hacks.org/wiki/PlantUmlMacro
* http://d.hatena.ne.jp/rabbit2go/20100414/1271246376

## trac-accountmanager
残念ながらtrac 1.2.dev0では動作しない．

```sh
sudo apt install trac-accountmanager
sudo vim /var/www/trac/myproject/conf/trac.ini
```


# Apache2のSSL有効化と再起動

```
sudo a2ensite default-ssl.conf
sudo a2enmod ssl
sudo chown -R www-data:www-data /var/www/trac/
sudo service apache2 restart
```


# Tracの更新
1.1.6から1.2に更新する手順．APIの変化によりプラグインがごっそり動かなくなるので，特に1.2を使わないとならない理由がない限りは1.1.6で問題ない．

```
svn co https://svn.edgewall.org/repos/trac/branches/1.2-stable/ trac-1.2-stable
cd trac-1.2-stable
python setup.py update_catalog -l ja
python setup.py compile_catalog -f
sudo python setup.py install
sudo service apache2 restart
sudo -u www-data trac-admin /path/to/projenv upgrade
sudo -u www-data trac-admin /path/to/projenv wiki upgrade
```


# 参考
* http://d.hatena.ne.jp/metalglue/20070111/1168521690
* http://d.hatena.ne.jp/orangehat/20080421
* https://trac.edgewall.org/wiki/TracInstall
* https://trac.edgewall.org/wiki/TracL10N
* https://trac.edgewall.org/wiki/TracUpgrade