さくらのレンタルサーバー(スタンダード)でTrac-1.0.ja1+Subversionを使うメモ

もうtrac1.0日本語版がある!
http://www.i-act.co.jp/project/products/products.html

ということで、さっそく使おうとしたら、ひどい目*1に遭ったのでメモ。
文中の$HOMEは、実際の絶対パスに置き換える。

なにはともあれ、作業開始。
主にここを参考にした。
http://attosoft.info/trac/wiki/TracJaInstall

GenshiというTracの依存パッケージが絡むときにUnicodeDecodeErrorが出るかも、ということでデフォルトエンコーディングutf-8にしておく。

echo $PYTHONPATH
echo "import sys; sys.setdefaultencoding('utf-8')" > $HOME/usr/local/lib/python2.7/site-packages/sitecustomize.py

sitecustomize.pyは、.pthファイルみたく、pythonのサーチパスに置いておくと自動で読み込まれて、指定したスクリプトの実行前に走るファイル、らしい。

日本語のために国際化するので、Babelを先にインストール。
BabelがないとTracをインストールするときに国際化ファイルが作れない。

easy_install --prefix=$HOME/usr/local babel
easy_install --prefix=$HOME/usr/local http://www.i-act.co.jp/project/products/downloads/Trac-1.0.ja1.zip #依存関係を見てGenshiもインストールされる。

trac envを作る。ここではpublicという名前にした。

cd $HOME/trac
trac-admin public initenv
Project Name[My Project]>
Database connection string [sqlite:db/trac.db]> (何も書かないで改行)

cgiファイル生成・配置

trac-admin public deploy public
cp $HOME/trac/public/cgi-bin/trac.cgi $HOME/www/trac/public.cgi(ドキュメントルート以下ならどこでも)

$HOME/www/trac/public.cgiの最初の論理行として、これを書いておく。

import sys
sys.path.append("$HOME/usr/local/lib/python2.7/site-packages")
sys.path.append("$HOME/usr/local/lib/python2.7/site-packages/Trac-1.0.ja1-py2.7.egg")
sys.path.append("$HOME/usr/local/lib/python2.7/site-packages/Babel-0.9.6-py2.7.egg")
sys.path.append("$HOME/usr/local/lib/python2.7/site-packages/Genshi-0.6-py2.7.egg")

public.cgiの権限設定

chmod u+x $HOME/www/trac/public.cgi

SVNリポジトリ登録&resync

trac-admin $HOME/trac/public
repository add  
repository resync 

ここでエラー。はてな

TracError: Unsupported version control system "svn": Can't find an appropriate component, maybe the corresponding plugin was not enabled?

調べたところ、$HOME/trac/public/conf/trac.iniにこれを追記する。

[components]
tracopt.versioncontrol.svn.svn_fs.subversionconnector = enabled

trac-adminシェルをいったん閉じて、再度resyncすると、また別のエラー。はてな

TracError: Unsupported version control system "svn": No module named svn

調べたところ、svn-pythonというSubversionPythonバインディングが必要で、それはSubversionのソースファイルに含まれていて、インストールにはswigとやらが必要なんだそうな。
swigsvn-pythonをインストール。
http://www28.atwiki.jp/worktip/pages/14.html

wget http://prdownloads.sourceforge.net/swig/swig-2.0.8.tar.gz
tar zxvf swig-2.0.8.tar.gz
cd swig-2.0.8
./configure --prefix=~/usr/local
make
make install

tar zxvf subversion-1.6.16.tar.gz
cd subversion-1.6.16
which swig
./configure --prefix=~/usr/local \
 --enable-swig-bindings=python \
 --with-swig=~usr/local/bin/swig

make swig-py
make install-swig-py #installとswigの間にハイフンが要ることに注意

echo $PYTHONPATH
ln -s $HOME/usr/local/lib/svn-python/svn $HOME/usr/local/lib/python2.7/site-packages/svn
ln -s $HOME/usr/local/lib/svn-python/libsvn $HOME/usr/local/lib/python2.7/site-packages/libsvn

python -c "import svn"

これで万事OKのはず。またresyncする。

trac-admin $HOME/trac/public
repository resync 
Resyncing repository history for ...
1 revision cached.
Done.

いいぞ!その調子だ!
それで、svn commitと同時にtracリポジトリブラウザが更新されるように前に書いたpost-commitファイルを作っておく。
SVNリポジトリ配下のhooks/post-commit.tmplをhooks/post-commitにコピーして編集する。

#!/bin/sh

PYTHONPATH=※; export PYTHONPATH
※:これがないとhookスクリプトがtrac-adminを叩くときにImportErrorがくるけど、もう面倒なので※のところに、シェルでtrac-adminが動く状態でのpython -c "import sys; print ':'.join(sys.path)"の出力を貼っておく。

REPOS="$1"
REV="$2"

$HOME/usr/local/bin/trac-admin $HOME/trac/public changeset added "$REPOS" "$REV"

実行権限をつけておく。

chmod a+x post-commit

さて、hookスクリプトのチェックをしましょうかね、とsvn commitしたところでエラー。もうやだ。

svn: Commit failed (details follow):
svn: Couldn't perform atomic initialization
svn: Couldn't perform atomic initialization
svn: SQLite compiled for 3.7.9, but running with 3.7.6.2

調べたところ、リポジトリを古いバージョンのものとして作っておくといいそうな。
http://www.snowbotic.com/archives/61

svnadmin create --pre-1.6-compatible 

解決。hookスクリプトも走る。あー。

見るだけでログインしないし、trac.iniの[components]にこれを追記。

trac.web.auth.loginmodule = disabled

シンタックスハイライトを使う。
Pygmentsがおすすめなんだそうで。

easy_install --prefix=$HOME/usr/local pygments

おまけ:Pygmentsに好きなスタイルを追加する。

ここではhonzaさんのvim2pygmentsを使って、気に入っているVimのカラースキームを追加してみた。
vim2pygments.tar.gzのダウンロードページはここ

cp $HOME/usr/local/share/vim/vim73/colors/desert.vim ./
tar zxvf honza-vim2pygments-19a9339.tar.gz
python honza-vim2pygments-19a9339/vimpygments.py desert.vim > vim_desert.py
cp vim_desert.py $HOME/usr/local/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/styles/

エディターで$HOME/usr/local/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/styles/__init__.pyを開く。

#: Maps style names to 'submodule::classname'.
STYLE_MAP = {
  ...
  "Vim_Desert": "vim_desert::DesertStyle", # この行を追加する。vim_desert.pyにDesertStyleというクラスがあるってこと。
}

*1:レンタルサーバーならではの苦行だったというだけで、別にtrac1.0日本語版はなにもひどくない。