さくらにtracを入れてみる。

最近さくらのレンサバをあまり触ってなかったので、暇つぶしにtracでも入れてみることに。
  subversionに関しては[id:orangehat:20071014]で導入済み。
  また、sqlite3もインストール済みですが、こちらはさくらにデフォルトでインストールされているものを使っても問題ないようです。

準備

$ mkdir -p $HOME/local/src
$ cd $HOME/local/src
$ mkdir -p $HOME/local/lib/python2.4/site-packages
$ ln -s ~/local/lib/python2.4 ~/local/lib/python
$ vi $HOME/.cshrc 

//下記追加
setenv PYTHONPATH $HOME/local/lib/python:$HOME/local/lib/python/site-packages
setenv PATH $HOME/local/bin:$PATH
setenv LD_LIBRARY_PATH $HOME/local/lib

.cshrcを読み込んで反映させる。

$ source $HOME/.cshrc

pysqlite

sqlitepythonで使うためのモジュール.

$ cd $HOME/local/src
$ wget wget http://oss.itsystementwicklung.de/download/pysqlite/2.4/2.4.1/pysqlite-2.4.1.tar.gz
$ tar zxvf pysqlite-2.4.1.tar.gz
$ cd pysqlite-2.4.1
$ setenv LOCALBASE $HOME/local
$ python setup.py build

ここで下記エラーが。

src/connection.h:33:21: sqlite3.h: No such file or directory

sqlite3.hがないということでシンボリックリンクを貼ってやる。

$ ln -s $HOME/local/src/sqlite-3.5.4/sqlite3.h $HOME/local/pysqlite-2.4.1/src/
$ python setup.py build

今度はライブラリlibsqlite3がないと言われてる??

/usr/bin/ld: cannot find -lsqlite3
error: command 'cc' failed with exit status 1

LD_LIBRARY_PATHではダメ?らしいのでLDFLAGSをセットしてやる。

$ setenv LDFLAGS -L$HOME/local/lib

$ python setup.py build
$ python setup.py install --prefix=$HOME/local

clearsilver

テンプレート機能。
  どうやらgmakeじゃないと入ってくれない模様。

$ cd $HOME/local/src/
$ wget http://www.clearsilver.net/downloads/clearsilver-0.10.5.tar.gz
$ tar zxvf clearsilver-0.10.5.tar.gz
$ cd clearsilver-0.10.5
$ ./configure --prefix=$HOME/local --disable-ruby --disable-java --disable-perl --disable-apache --disable-csharp
$ gmake
$ gmake install

pythonモジュールは、gmakeではインストールされないのでpython setup.pyが必要とのことです。

$ cd python
$ python setup.py build

またしてもエラー。。。下記のようなエラーがずらずら100行ほど。
  どうやらオブジェクトファイルとライブラリファイルの呼び出し方が悪い?らしいのだが、どこが悪いか全くわからず断念。

/usr/lib/crt1.o(.text+0x72): In function `_start':
: undefined reference to `main'
build/temp.freebsd-6.1-RELEASE-p19-i386-2.4/neo_cgi.o(.text+0x20): In function `p_cgi_dealloc':
: undefined reference to `PyObject_Free'

上記エラーが解消できなかったので、clearsilver-0.9.14を入れてみる。

$ wget http://www.clearsilver.net/downloads/clearsilver-0.9.14.tar.gz 
$ tar zxvf clearsilver-0.9.14.tar.gz
$ 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
$ gmake
$ gmake install

$ cd python
$ python setup.py build
$ python setup.py install --prefix=$HOME/local

docutils

$ wget http://jaist.dl.sourceforge.net/sourceforge/docutils/docutils-0.4.tar.gz
$ tar zxvf docutils-0.4.tar.gz
$ cd docutils-0.4
$ python setup.py install --home=$HOME/local

trac

ここでようやくtracを入れる。
  株式会社インターアクトが出している日本語対応バージョンを使う。

wget http://www.i-act.co.jp/project/products/downloads/trac-0.10.3.1-ja-2.zip
tar zxvf trac-0.10.3.1-ja-2.zip
cd trac-0.10.3.1-ja-2
python ./setup.py install --prefix=$HOME/local

tracを使うための準備

まずtracの初期設定

以前にsvnリポジトリを$HOME/svnに作成していたので、そのリポジトリを指定した。
  まだ作っていない方は下記のようにどうぞ。

$ svnadmin create fs-type=fsfs $HOME/svn

tracの初期化作業

rehash
mkdir $HOME/svn/trac
trac-admin $HOME/svn/trac/ initenv

Project Name [My Project]> My Trac                              // プロジェクトの名前。適当に。
Database connection string [sqlite:db/trac.db]>                 // データベースの種類。デフォルトで。
Repository type [svn]>                                          // リポジトリのタイプ? svn以外はCVSとか?
Path to repository [/path/to/repos]> /home/xxx/svn            // リポジトリの場所
Templates directory [/home/xxx/local/share/trac/templates]>     // テンプレートのディレクトリ。デフォルトで。
tracCGIとして使う

流れとしては、
  1. 元からあるtrac.cgitrac_.cgiに変更し、新たに下記のようなtrac.cgiを作成する。
  2. 新たに作成したtrac.cgi環境変数を指定し、そこでtrac_.cgiを実行するようにする。
  xxxはさくらのユーザID。

$ cp $HOME/local/share/trac/cgi-bin/trac.cgi $HOME/www
$ mv $HOME/www/trac.cgi $HOME/www/trac_.cgi
$ vi $HOME/www/trac.cgi

------------------------------------------------------------------------------------------------------------
#!/bin/sh
LD_LIBRARY_PATH=/home/XXX/local/lib;export LD_LIBRARY_PATH
TRAC_ENV=/home/XXX/var/trac/repo;export TRAC_ENV
PYTHONPATH=/home/XXX/local/lib/python:/home/XXX/local/lib/python/site-packages;export PYTHONPATH
/usr/local/bin/python /home/XXX/www/trac_.cgi
------------------------------------------------------------------------------------------------------------
$ chmod 755 $HOME/www/trac.cgi
Rewriteモジュール

.htaccessにてRewriteモジュールを使う。
  http://xxx.sakura.ne.jp/index.pyhttp://xxx.sakura.ne.jp/trac.cgi/index.pyに書き換えてやる。
  下記のRewriteRuluのオプションR=301(恒久的な遷移)やL(現在のルールの先頭に戻る?)なんかはなくても動作するが、他の人がみんな付けているので一応。

vi $HOME/wwww/.htaccess

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

tracにアクセス

http://xxx.sakura.ne.jp/tracにアクセスすると、

Python Traceback

Traceback (most recent call last):
  File "/home/xxx/local/lib/python2.4/site-packages/trac/web/main.py", line 406, in dispatch_request
    dispatcher.dispatch(req)
  File "/home/xxx/local/lib/python2.4/site-packages/trac/web/main.py", line 191, in dispatch
    chosen_handler = self._pre_process_request(req, chosen_handler)
  File "/home/xxx/local/lib/python2.4/site-packages/trac/web/main.py", line 263, in _pre_process_request
    chosen_handler = f.pre_process_request(req, chosen_handler)
  File "/home/xxx/local/lib/python2.4/site-packages/trac/versioncontrol/api.py", line 73, in pre_process_request
    self.get_repository(req.authname).sync()
  File "/home/xxx/local/lib/python2.4/site-packages/trac/versioncontrol/api.py", line 91, in get_repository
    raise TracError('Unsupported version control system "%s". '
TracError: Unsupported version control system "svn". Check that the Python bindings for "svn" are correctly installed.

どうやらsubversionpython対応していない?らしいので、リコンパイル

$ cd $HOME/local/src/subversion-1.4.5
$ make swig-py
$ make install-swig-py
 
$ ln -s $HOME/local/lib/svn-python $HOME/local/lib/python/site-packages/svn-python
$ ln -s $HOME/local/lib/svn-python/svn $HOME/local/lib/python/site-packages/svn
$ ln -s $HOME/local/lib/svn-python/libsvn $HOME/local/lib/python/site-packages/libsvn

ここでやっとエラーなしに見れるように。

Pythonのモジュールを入れるためのツール

Pythonのモジュールを使うためには必要らしい。

$ mkdir $HOME/local/src/setuptools
$ cd $HOME/local/src/setuptools
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py --prefix=$HOME/local

AccountManager

httpd.confを触ることができないので、tracプラグインであるAccountManagerを使用する。
  Pythonにはeasy-installというrubyのgemのようなものがあるということで、試しに使ってみる。

$ easy_install --prefix=$HOME/local --build-directory=$HOME/tmp http://trac-hacks.org/svn/accountmanagerplugin/0.10

Downloading http://trac-hacks.org/svn/accountmanagerplugin/0.10
Doing subversion checkout from http://trac-hacks.org/svn/accountmanagerplugin/0.10 to /tmp/easy_install-UJx-CU/0.10
svn: Unrecognized URL scheme for 'http://trac-hacks.org/svn/accountmanagerplugin/0.10'
Processing 0.10
error: Couldn't find a setup script in /tmp/easy_install-UJx-CU/0.10

どうやら/tmpディレクトリにチェックアウトしようとするらしく、どうにもならず。
  上記の--build-directoryオプションがそのディレクトリの指定だと思うんですが、うまくいかない。
  実はここで1日くらい頑張ったんですがどうにもならなかったので、仕方なくソースから入れることに。
  どうやらさくらに直接チェックアウトはできないようなので、下記URLから一旦ローカルのパソコンに落としてscpかなんかであげる。
  http://trac-hacks.org/changeset/latest/accountmanagerplugin/0.10?old_path=/&filename=accountmanagerplugin/0.10&format=zip

$ tar zxvf accountmanagerplugin-0.10.zip
$ cd accountmanagerplugin
$ python setup.py install --prefix=$HOME/local

Installed /home/xxx/local/lib/python2.4/site-packages/TracAccountManager-0.1.3dev-py2.4.egg
Processing dependencies for TracAccountManager==0.1.3dev
Searching for TracWebAdmin
Reading http://pypi.python.org/simple/TracWebAdmin/
Couldn't find index page for 'TracWebAdmin' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://pypi.python.org/simple/
No local packages or download links found for TracWebAdmin
error: Could not find suitable distribution for Requirement.parse('TracWebAdmin')

どうしても上記エラーが出てしまうのですが、WebAdminは別に自分で入れることにする。

WebAdmin

trac-adminの機能をブラウザから使用できるようにするプラグイン
  こちらも先ほどと同じように、下記URLから一旦ローカルに落としてscpであげる。
  http://trac.edgewall.org/attachment/wiki/WebAdmin/TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw
  http://trac.edgewall.org/wiki/WebAdminに書いてある通りに行う。

$ mv $HOME/local/src/TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip $HOME/local/src/TracWebAdmin-0.1.2dev_r4240-py2.4.egg
$ mv $HOME/local/src/TracWebAdmin-0.1.2dev_r4240-py2.4.egg $HOME/svn/trac/

これでインストール完了。
  なんかかなり変な感じがするが、上記URLにも間違っていると思うかもしれないがこれで動くなんて書いてある。

trac.iniの設定

htdigest認証を使う。
trac.iniの書き方ですが、見たところ[components]のところについては、

プラグインの__init__.pyの親フォルダの名前.親フォルダにあるファイル.pyの名前.そのフォルダのclass名 = enabled/disabled

という感じでしょうか。以下例

$ pwd
$HOME/local/src/accountmanagerplugin/0.10/acct_mgr
$ ls -l
-rwxr-xr-x  1 xxx  users     0B Jul 27  2006 __init__.py
-rwxr-xr-x  1 xxx  users   5.7K Feb 23  2007 admin.py
-rwxr-xr-x  1 xxx  users   4.7K Nov 14  2006 api.py
-rwxr-xr-x  1 xxx  users   3.4K Apr 14 21:46 db.py
-rwxr-xr-x  1 xxx  users   5.7K Apr 11  2007 htfile.py
-rwxr-xr-x  1 xxx  users   1.1K Nov 13  2006 http.py
-rwxr-xr-x  1 xxx  users   3.0K Jul 29  2006 md5crypt.py
-rwxr-xr-x  1 xxx  users   3.0K Mar 24  2007 pwhash.py
drwxr-xr-x  2 xxx  users   512B Apr 17 23:49 templates
drwxr-xr-x  2 xxx  users   512B Apr 17 23:49 tests
-rwxr-xr-x  1 xxx  users    15K Aug  5  2007 web_ui.py

というディレクトリ構成の場合、

acct_mgr.admin.AccountManagerAdminPage = enable

以上の要領で変更します。
  ちなみに*はすべてということになるようです。
  AccountManagerはhttp://trac-hacks.org/wiki/AccountManagerPlugin#LoginModuleに書いているので参考まで。

$ vi $HOME/svn/trac/conf/trac.ini
// xxxはさくらのユーザID
-----------------------------------------

[account-manager]
htdigest_realm = TracRealm
password_file = /home/xxx/svn/trac/conf/.htdigest
password_store = HtDigestStore

[components]
; tracのデフォルトのレポート機能を無効化
trac.ticket.report.* = disabled
; WebAdminでユーザアカウントの発行などができるようになる
acct_mgr.admin.accountmanageradminpage = enabled
; アカウントマネージャの認証にhtdigest認証を使用
acct_mgr.htfile.htdigeststore = enabled
; ログイン時にMy Accountリンクを出して、パスワードの変更などができるようになる
acct_mgr.web_ui.accountmodule = enabled
; アカウントマネージャのログインモジュールを使用
acct_mgr.web_ui.loginmodule = enabled
; enableにすると、Registerリンクを出せるが出しなくないのでdisabled。おそらく明示的に書かなくてもOK
acct_mgr.web_ui.registrationmodule = disabled
; デフォルトのログインモジュールを無効化
trac.web.auth.loginmodule = disabled
; WebAdminモジュールをすべて使えるようにする
webadmin.* = enable

---------------------------------------
TRAC_ADMINについて

まず匿名、つまり誰にでもTRAC_ADMINの権限を与える。最初これを知らなかったので、かなり苦労した。。。
  TRAC_ADMIN権限を持っていないとブラウザ上にADMINページが出てこないらしいので。
  下記はまだユーザを一つも作っていないので、とりあえず誰にでもTRAC_ADMIN権限を与える。

$ trac-admin $HOME/svn/trac permission add anonymous TRAC_ADMIN

ここでhttp://xxx.sakura.ne.jp/tracにアクセスすると、右上に「Admin」というタブが増える。
  そこを押し、Accounts > user > add userで新規にユーザを登録する。

先ほど匿名に与えた権限を取り上げ、作成したユーザ(ここではjhonさん)にTRAC_ADMIN権限を与える。

$ trac-admin $HOME/svn/trac/ permission remove anonymous TRAC_ADMIN
$ trac-admin $HOME/svn/trac/ permission add jhon TRAC_ADMIN

これで右上のloginというところからjhonでログインすると、Adminタブが出現し、使えるようになる。
  また現在の状態では、anonymousにticketの登録やWikiの編集ができてしまうので、Admin > General > Permissionsから各権限を奪うことができる。

次はtracを速くするのと日本語化をやっていきたいと思います。

追記

4/21 tracの高速化