CORESERVER に trac を入れてみた

 動作例はこんな感じ --> http://reguzy.jp/
 基本的に TracDoc/SakuraInternet - HirobeのHack倉庫 - Trac を参考にしてます。

前提

virtual-python と easy_install が便利なので使う。easy_install でpysqlite を入れておく。

# virtual-python
wget http://peak.telecommunity.com/dist/virtual-python.py
python virtual-python

# .bashrc
touch ~/.bashrc
echo 'export PYTHONPATH=~/lib/python2.4/site-packages' > ~/.bashrc
echo 'export PATH=~/bin:$PATH' > ~/.bashrc

#easy_install
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py

# pysqlite
easy_install pysqlite

以下、ダウンロードしたり make なんかは ~/tmp ディレクトリで行っている。インストール先とかはいいかげんなので、見直した方がいいかも。

Subversion Python バインディング

CORESERVER には Subversion がインストールされているんだけど、古いのと Python バインディングを入れる方法がわからなかったので、1.4 をインストールする。

swig (よく知らない)
cd ~/tmp
wget http://jaist.dl.sourceforge.net/sourceforge/swig/swig-1.3.31.tar.gz
gunzip swig-1.3.31.tar.gz
tar xvf swig-1.3.31.tar
cd SWIG-1.3.31
./configure --prefix=$HOME/local
make
make install
Subversion & Python バインディング
cd ~/tmp
wget http://subversion.tigris.org/downloads/subversion-1.4.4.tar.gz
wget http://subversion.tigris.org/downloads/subversion-deps-1.4.4.tar.gz

tar -xzvf  subversion-1.4.4.tar.gz
tar -xzvf  subversion-deps-1.4.4.tar.gz
cd subversion-1.4.4/apr
./configure --prefix=$HOME/local
make
make install

cd ../apr-util
./configure --prefix=$HOME/local --with-apr=$HOME/local/bin/apr-config
make
make install

cd ../
./configure --prefix=$HOME/local --with-apr=$HOME/local/bin/apr-config --with-apu-config=$HOME/local/bin/apu-config
make
make install

make swig-py
make install install-swig-py

Python が見つけられるように、PYTHONPATH にリンクしておく。

ln -s $HOME/local/lib/svn-python/* $PYTHONPATH

clearsilver

easy_install でインストールできるんだけど、それで入る 0.10.x だとエラーになって trac が動かない。仕方がないので、手動で 0.9 をインストールした。

cd ~/tmp
wget http://www.clearsilver.net/downloads/clearsilver-0.9.14.tar.gz
gunzip clearsilver-0.9.14.tar.gz
tar -xvf clearsilver-0.9.14.tar
cd clearsilver-0.9.14
./configure --prefix=$HOME/local --oldincludedir=$HOME/local/include --disable-ruby --disable-java --disable-perl --disable-csharp --disable-python --disable-static
make
make install

cd python
python setup.py install

あったら便利らしい

docutils

trac で RST が使えるようになるらしい。よく知らない。

easy_install docutils
SilverCity

リポジトリブラウザで構文強調がされたりして、なんとなく幸せになれる。

cd ~/tmp
wget http://jaist.dl.sourceforge.net/sourceforge/silvercity/SilverCity-0.9.7.tar.gz
tar zxvf SilverCity-0.9.7.tar.gz
cd SilverCity-0.9.7
python setup.py install

trac

ようやく trac 本体。もちろんインタアクトさんの日本語版を使用する。

cd ~/tmp
wget http://www.i-act.co.jp/project/products/downloads/trac-0.10.4-ja-1.zip
unzip trac-0.10.4-ja-1.zip
cd trac-0.10.4-ja-1
python setup.py install
TracEnv の作成

~/repos/trac に作成する。

trac-admin ~/repos/trac initenv
cgi で動作させる

とりあえずサブドメインとかは使わないで動かすので、 trac.cgi を ~/public.html にコピー。サブドメインとかを使うなら ~/public_html/sub.example.com かな。

cp ~/share/trac/cgi-bin/trac.cgi ~/public_html

~/public_html に置く .htaccess はこんな感じで。

RewriteEngine On
RewriteRule ^$ /trac/ [R=301,L]
RewriteRule ^trac/(.*)$ /trac.cgi/$1 [L]

次に trac.cgi を編集して ~/public_html にアップロードする。TRAC_ENV の設定は必須。SCRIPT_NAME は任意だけど、これを指定しないと /trac.cgi/wiki/ とかになる。http://example.com/wiki/ っていう表示にする方法は見つけられなかった。

# 1行目
#!/virtual/reguzy/bin/python

# 18行目移行に追記する。
try:
    import os
    os.environ['SCRIPT_NAME'] = "/trac/"
    os.environ['TRAC_ENV'] = "/virtual/XXX/repos/trac"
    from trac.web import cgi_frontend
静的ファイルは cgi で配信しない

trac の静的ファイルへリンクしておいて、trac.ini でその場所を指定すればいい。

ln -s ~/share/trac/htdocs/ ~/public_html/trachtdocs

~/repos/trac/conf/trac.ini の trac セクションの htdocs_location を上記のリンクにしておく。

[trac]
htdocs_location = /trachtdocs/

trac プラグイン

WebAdmin

これは easy_install で。

easy_install http://svn.edgewall.com/repos/trac/sandbox/webadmin/

それだけだと動作しないので、 trac.ini に設定を追記する。

[components]
webadmin.* = enabled
AccountManager

ブラウザからユーザを作成するために必要なんだけど、どうも http://trac-hacks.org/ がダウンしてるみたい。本家にチケット #6089 (can't reach http://trac-hacks.org/) - The Trac Project があるけど、しばらく復旧しそうにない。なのでさくらから egg を ~/repos/trac/plugin/ にコピーした。

まずはアカウントを作成するために、 ~/repos/trac/conf/trac.ini に追記する。

[account-manager]
password_format = htpasswd
password_file = /virtual/XXX/repos/trac/conf/trac.htpasswd

[components]
trac.web.auth.LoginModule = disabled
acct_mgr.web_ui.LoginModule = enabled

アカウントを作成したら、勝手にユーザを作られないようにしておく。

[components]
trac.web.auth.LoginModule = disabled
acct_mgr.web_ui.LoginModule = enabled
acct_mgr.web_ui.registrationmodule = disabled

いろいろ出来るように、作成したユーザに管理者権限を与えておく。これでログインすれば Admin メニューが使えるようになってるはず。

trac-admin ~/repos/trac permission add XXX TRAC_ADMIN
SpamFilter

まあないよりあった方がいいので、スパム対策もしておく。

easy_install TracSpamFilter

Admin で 有効化したら、trac.ini に設定を追記する。

[akismet]
api_key = your_api_key
api_url = rest.akismet.com/1.1/

upgrade が必要なのでしておく。

trac-admin ~/repos/trac upgrade

trac-post-commit-hook

これもないよりあった方がいいので、動くようにしておく。

cp ~/tmp/trac-0.10.4-ja-1/contrib/trac-post-commit-hook ~/repos/svn/hooks

post-commit はこんな感じ。実行権限を与えるのを忘れずに。さくらと違って、UTF-8 のための小細工は必要ない。いいね。

#!/bin/sh
REPOS="$1"
REV="$2"

export LANG=ja_JP.UTF-8
LOG=`svnlook log -r $REV $REPOS`
AUTHOR=`svnlook author -r $REV $REPOS`

python ${REPOS}/hooks/trac-post-commit-hook \
 -p "/virtual/XXX/repos/trac" \
 -r "$REV"    \
 -u "$AUTHOR" \
 -m "$LOG"


だいたい必要なのはこれくらいかな。