2009年10月11日日曜日

trac0.11.5jaのインストール

Trac は Phthon で実装された、Wiki, 構成管理, 課題管理を統合したプロジェクト管理ツールです。

ここでは構成管理に Mercurial を使用し、Apache + mod_python + PostgreSQL (on CentOS5) というシステム構成でのインストールについて記述します。なお Apache, PosgrtgreSQL, Python, Mercurial は下記のバージョンを既にインストール済みとし、ここではインストール方法には触れません。また、文字コードは全て UTF-8 です。

  • Apache httpd-2.2.14
  • PostgreSQL 8.4.1
  • Python 2.4.3 (python-devel)
  • Mercurial 1.3.1
Merucurialのインストール手順はこちらをご参照下さい。

以降、下記の順番でインストール手順を記述します。

  1. テンプレートエンジンのインストール
  2. setuptools のインストール
  3. Trac 0.11.5ja のインストール
  4. mod_python のインストール
  5. pyPgSQL のインストール
  6. mxDateTime のインストール
  7. Mercurial プラグインのインストール
  8. プロジェクト環境の作成
  9. Mercurial プラグインの有効化

テンプレートエンジンのインストール

Trac0.10 まではテンプレートエンジンに ClearSilver を使用し、別途インストールする必要がありましたが、0.11 からは Genshi に変更されています。Genshi は Tracのインストーラが勝手に取得/インストール/アップグレードしてくれるので、個別の準備は不要です。

setuptools のインストール

0.10までは不要だったように記憶してますが、0.11からは setuptools を要求されます。

# python ./setup.py install --prefix=/usr/local/trac0.11.5.ja1
Traceback (most recent call last):
  File "./setup.py", line 15, in ?
    from setuptools import setup, find_packages
ImportError: No module named setuptools
また後述の種々のモジュールのインストールにも使用しますので、あらかじめ setuptools をインストールしておきます。
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
Downloading http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c9-py2.4.egg
Processing setuptools-0.6c9-py2.4.egg
creating /usr/lib/python2.4/site-packages/setuptools-0.6c9-py2.4.egg
Extracting setuptools-0.6c9-py2.4.egg to /usr/lib/python2.4/site-packages
Adding setuptools 0.6c9 to easy-install.pth file
Installing easy_install script to /usr/bin
Installing easy_install-2.4 script to /usr/bin

Installed /usr/lib/python2.4/site-packages/setuptools-0.6c9-py2.4.egg
Processing dependencies for setuptools==0.6c9
Finished processing dependencies for setuptools==0.6c9

Trac 0.11.5ja のインストール

現時点で最新の日本語版である 0.11.5ja をインストールします。日本語版はインタアクト株式会社のサイトからダウンロードします。

インストール時に prefix を指定せずデフォルトに任せると /usr/bin, /usr/lib, /usr/share に散らばってインストールされるので、私は --prefix= を指定して /usr/local/ 配下にリビジョン番号付でインストールし、環境設定やシンボリックリンクでパスを通しています。

$ unzip Trac-0.11.5.ja1.zip
$ cd Trac-0.11.5.ja1

# mkdir -p /usr/local/trac0.11.5.ja1/lib/python2.4/site-packages/
# ln -s /usr/local/trac0.11.5.ja1 /usr/local/trac
# export PYTHONPATH=/usr/local/trac/lib/python2.4/site-packages
# python ./setup.py install --prefix=/usr/local/trac0.11.5.ja1
prefix指定なしのデフォルトの場所にシンボリックリンクを作成します。
# ln -s /usr/local/trac/bin/trac-admin  /usr/bin/trac-admin
# ln -s /usr/local/trac/bin/tracd /usr/bin/tracd
# ln -s /usr/local/trac/share/man/man1/trac-admin.1 /usr/share/man/man1/trac-admin.1
# ln -s /usr/local/trac/share/man/man1/tracd.1 /usr/share/man/man1/tracd.1
# ln -s /usr/local/trac/share/man/man1/tracdb2env.1 /usr/share/man/man1/tracdb2env.1
# ln -s /usr/local/trac/share/trac /usr/share/trac
なお、0.10 までは ライブラリ類は /usr/local/trac/lib/python2.4/site-packages/trac/ にまとめてインストールされていたのですが、0.11 からは Genshi も含めて、/usr/local/trac/lib/python2.4/site-packages/ 配下にバージョン番号付でインストールされるようになりました。
$ ls -l /usr/local/trac/lib/python2.4/site-packages/
total 284
-rw-r--r-- 1 root root 231009 Oct 10 15:06 Genshi-0.5.1-py2.4-linux-i686.egg
drwxr-xr-x 4 root root   4096 Oct 10 15:06 Trac-0.11.5.ja1-py2.4.egg
-rw-r--r-- 1 root root    309 Oct 10 15:06 easy-install.pth
-rw-r--r-- 1 root root     60 Oct 10 15:06 setuptools.pth
-rw-r--r-- 1 root root   2362 Oct 10 15:06 site.py
-rw-r--r-- 1 root root   1825 Oct 10 15:06 site.pyc
-rw-r--r-- 1 root root   1815 Oct 10 16:12 site.pyo
そのためシンボリックリンクでの対応は逆に面倒ですので、/usr/local/trac/lib/python2.4/site-packages に PYTHONPATH を通しておきます。 これで、trac のインストールが完了しました。

mod_python のインストール

mod_python 3.2 系は apache 2.2 で動作しないので、3.3 系を使用します。そして、実はtracのインストールの山場はここなのではないか、と思うくらいハマりポイントがあるのが mod_python のインストールです。

libexpat のバージョン

まず一つめのハマりポイント。expat-devel パッケージがインストールされてない場合、apache 同梱の libexpat.so が使用されますが、このバージョンが古いために実行時に mod_python がエラーとなってしまうようです(error_log には "Objects/stringobject.c:117: PyString_FromString: Assertion `str != ((void *)0)' failed."と書かれていました)。バージョンを見ると、

$ strings /usr/local/apache2/lib/libexpat.so | grep expat_
expat_1.95.2
$ rpm -qa | grep expat
expat-1.95.8-8.2.1
expat-devel-1.95.8-8.2.1
expat-devel がインストール済であることを確認し、必ずインストールしておきましょう。

mod_python のバージョン

ハマりポイントその二。apr と mod_python の特定のバージョンの組み合わせ(apr 1.3.2 と mod_python 3.3.1 ?) の場合、ビルドエラーになってしまいます。

jira によると、既に修正が trunk にコミットされているものの公開されている 3.3.1 では対応されてないようです。自分で patch を適用してもいいのですが、ここでは svn リポジトリから最新の trunk を取得して使用しました。
mod_python のビルド/インストール
$ svn co http://svn.apache.org/repos/asf/quetzalcoatl/mod_python/trunk
$ cd trunk
$ ./configure --with-apxs=/usr/local/apache2/bin/apxs
$ make
# make install
これで mod_python が無事インストールできました。

httpd.conf の変更

mod_python.so を有効にし、また trac 用の設定ファイルを include するように httpd.conf を変更します。

LoadModule python_module      modules/mod_python.so
Include conf/extra/httpd-trac.conf

extra/httpd-trac.conf の作成

trac 用の設定ファイル extra/httpd-trac.conf を作成します。ここでは trac ディレクトリは /home/trac とします。また、trac認証には apache の基本認証を使用し、またパスワードファイルは /home/trac に設置します。

<Location /trac>
  SetEnv PYTHON_EGG_CACHE /tmp/python_egg_cache
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnvParentDir /home/trac
  PythonOption TracUriRoot /trac
  PythonDebug On
</Location>
<LocationMatch /trac/[-_[:alnum:]]+/login>
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /home/trac/.htpasswd
  Require valid-user
</LocationMatch>
/usr/local/apache2/bin/htpasswd を使用し、trac を使用するユーザを .htpasswd に登録しておきます。

環境変数の設定の作成

apache から、それぞれのライブラリを使用できるよう、apacheの起動スクリプトに環境変数を設定しておきます。

export PYTHONPATH=/usr/local/trac/lib/python2.4/site-packages
export PATH="$PATH":/usr/local/pgsql/bin:/usr/local/pgsql/lib
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PGLIB
また、後述の trac-admin コマンドをターミナルから実行する際にも上記のパス設定が必要なので、root の .bashrc にも記述しておいた方がいいでしょう。

pyPgSQL のインストール

Python から PostgreSQL へのデータベース・アクセスに、ここでは pyPgSQL を使用します。

$ wget http://sourceforge.net/projects/pypgsql/files/pypgsql/2.5.1/pyPgSQL-2.5.1.tar.gz/download
$ tar zxvf pyPgSQL-2.5.1.tar.gz 
$ cd pyPgSQL-2.5.1
root ユーザにに PostgreSQL ライブラリ等へのパスを通した後(通ってないとエラーとなります)、ビルド、インストールします。
# export PATH=/usr/local/pgsql/include:$PATH
# export PATH=/usr/local/pgsql/bin:$PATH
# python setup.py build
# python setup.py install
これで pyPgSQL のインストールが完了しました。

mxDateTime のインストール

これをインストールしておかないと、プロジェクト環境作成時に下記のメッセージで落ちてしまいます。

Creating and Initializing Project
Failed to create environment. You need to install mxDateTime
       (http://www.egenix.com/files/python/eGenix-mx-Extensions.html)
eGenix.comのサイトから取得してインストールします。なお、UCS2版とUCS4版のどちらをインストールするかは、下記コマンドで確認します。
$ python -c "import sys;print(sys.maxunicode<66000)and'UCS2'or'UCS4'"
インストールスクリプトを実行して、インストールします。
$ unzip egenix-mx-base-3.1.2.linux-i686-py2.4_ucs4.prebuilt.zip
$ cd egenix-mx-base-3.1.2.linux-i686-py2.4_ucs4.prebuilt
# python setup.py install

Mercurial プラグインのインストール

setuptoolを使用して Mercurial プラグインをインストールします。

$ svn co http://svn.edgewall.com/repos/trac/sandbox/mercurial-plugin-0.11
$ cd mercurial-plugin-0.11/
$ python setup.py bdist_egg
# python setup.py install

プロジェクト環境の作成

プロジェクト環境作成の例として、ここでは test という名称のプロジェクト環境と作成します。

Mercurial リポジトリの作成

まず Mercurial リポジトリを作成します。ここでは /home/hg 配下を Mercurial リポジトリのディレクトリとします。また、Mercurial の操作は hg ユーザにて行うものとします。

$ su - hg
$ cd /home/hg
$ mkdir test
$ cd test/
$ hg init
これで hg リポジトリが作成されました。

データベースの作成

tracが使用するデータベースを作成します。ここでは、"trac_test" という名前で作成し、接続ユーザは "trac"、パスワードは "foo" としています。

$ su - postgres
$ createdb trac_test
$ psql trac_test

trac_test=# CREATE USER trac WITH PASSWORD 'foo';
CREATE ROLE
trac_test=# 

プロジェクト環境の作成

ベースディレクトリは /home/trac とし、その下に各プロジェクトを作成することにします。また、PostgreSQLへのパスが通ってないと作成時にエラーとなるため、パスを通しておきましょう。

# mkdir -p /home/trac/test
# export PATH="$PATH":/usr/local/pgsql/bin:/usr/local/pgsql/lib
# export POSTGRES_HOME=/usr/local/pgsql
# export PGLIB=$POSTGRES_HOME/lib
# export PGDATA=$POSTGRES_HOME/data
# export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PGLIB

trac-admin コマンドを使用してプロジェクト環境を作成します。対話型で作成が進行しますので、それぞれ記入していきます。
# export PYTHONPATH=/usr/local/trac/lib/python2.4/site-packages
# trac-admin /home/trac/test initenv

 Project Name [My Project]> Test Project

 Database connection string [sqlite:db/trac.db]> postgres://trac:foo@localhost/trac_test

 Repository type [svn]> hg

 Path to repository [/path/to/repos]> /home/hg/test

 :
 :

---------------------------------------------------------------------
Project environment for 'Test Project' created.

You may now configure the environment by editing the file:

  /home/trac/test/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /home/trac/test

Then point your browser to http://localhost:8000/test.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!
プロジェクト環境が作成されました。まず trac ディレクトリの所有者をを apache 実行ユーザに変更し、管理者アカウントを設定しておきましょう。
# chown -R daemon. /home/trac/test/
# trac-admin /home/trac/test permission add admin TRAC_ADMIN
これで、apache + mod_python 経由で trac にアクセスできるようになりました。

Mercurial プラグインの有効化

この状態では、まだコンポーネントが有効になっていないため Mercurial プラグインが使用できず、画面にエラーが表示されます。

Warning: リポジトリと同期できません (サポートされていないバージョン管理システム "hg" です: 適切なコンポーネントが見つかりません。該当するプラグインが有効に設定されているか確認してください。)。詳細は Trac のログを参照してください。
管理画面「プラグイン」のコンポーネントにチェックを入れて有効にして、設定完了です。 これで、Trac の「リポジトリブラウザ」で Mercurial が使用できるようになりました。

0 件のコメント:

コメントを投稿