RHEL4にTracインストール

yumやapt-getなし。全部手動で入れる。

躓いたところは以下の二点(最終的にはまだあった)。

  1. sqliteのインストールディレクトリを変える(ex:home/hoge/sqlite)とpysqliteのコンパイルが通らない
  2. trac-admin test initenvでエラーが起こる。

前者は/usr/localにインストールし直した。
後者は

Creating and Initializing Project
Failed to create environment. global name 'sqlite' is not defined
Traceback (most recent call last):
  File "/usr/local/lib/python2.5/site-packages/trac/scripts/admin.py", line 613, in do_initenv
    options=options)
  File "/usr/local/lib/python2.5/site-packages/trac/env.py", line 145, in __init__
    self.create(options)
  File "/usr/local/lib/python2.5/site-packages/trac/env.py", line 250, in create
    DatabaseManager(self).init_db()
  File "/usr/local/lib/python2.5/site-packages/trac/db/api.py", line 71, in init_db
    connector.init_db(**args)
  File "/usr/local/lib/python2.5/site-packages/trac/db/sqlite_backend.py", line 121, in init_db
    cnx = sqlite.connect(path, timeout=int(params.get('timeout', 10000)))
NameError: global name 'sqlite' is not defined

こんなエラーが出る。sqlite変数が見つからないようだ。
python-sqliteバインディングが上手く行っていないのではないかと予想する。
sqlite_backend.pyのソースは

try:
    import pysqlite2.dbapi2 as sqlite
    have_pysqlite = 2
except ImportError:
    try:
        import sqlite3 as sqlite
        have_pysqlite = 2

となっている事から、pyqsliteのインポートに失敗しているのだと思われる。


行き詰り気味になり、pysqliteの動作確認用のソースでもないかな、とググる
ソフト/Bug Tracking/trac/RedHat - discypus
が出てきた。ビンゴ!素晴らすぎる…。


消えたら困るので引用しておきます。

$ cd scripts

テスト(Step 4: Test Your pysqlite Installation より)

$ cat test-pysqlite
#!/usr/bin/env python
from pysqlite2.test import test
test()

$ ./test-pysqlite
Traceback (most recent call last):
 File "./test-pysqlite", line 2, in ?
    from pysqlite2.test import test
  File "/usr/local/lib/python2.3/site-packages/pysqlite2/test/__init__.py", line
 25, in ?
    from pysqlite2.test import dbapi, types, userfunctions, factory, transactions
  File "/usr/local/lib/python2.3/site-packages/pysqlite2/test/dbapi.py", line 26, in ?
    import pysqlite2.dbapi2 as sqlite
  File "/usr/local/lib/python2.3/site-packages/pysqlite2/dbapi2.py", line 32, in ?
    from pysqlite2._sqlite import *
ImportError: libsqlite3.so.0: cannot open shared object file: No such file or directory

失敗した。libsqlite3.so.0の位置を/etc/ld.so.confに登録する。

libsqlite3.so.0の場所を探す。(/usr/local/libだろうけど、ついでにupdatedbも実行しておく)

# updatedb

$  locate libsqlite3.so.0
/usr/local/lib/libsqlite3.so.0.8.6
/usr/local/lib/libsqlite3.so.0                ★
/home/admin/trac/sqlite-bld/.libs/libsqlite3.so.0.8.6
/home/admin/trac/sqlite-bld/.libs/libsqlite3.so.0

/etc/ld.so.confを編集

/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/qt-3.0.5/lib
/usr/lib/sane
/opt/kakadu
/usr/local/lib    ★この行を追加

ldconfigを実行

# /sbin/ldconfig

再テスト。OK

http://discypus.jp/wiki/?%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac%2FRedHat#n5008889


これでtrac-adminでプロジェクトを作成する事ができたので、tracdでサーバを起動し、アクセスしてみる。
が、何も表示されない。
ターミナルの方で、以下のような例外を確認。

Exception happened during processing of request from ('192.168.1.1', 11194)
Traceback (most recent call last):
  File "/usr/local/lib/python2.5/SocketServer.py", line 464, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python2.5/SocketServer.py", line 254, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/lib/python2.5/SocketServer.py", line 522, in __init__
    self.handle()
  File "/usr/local/lib/python2.5/BaseHTTPServer.py", line 316, in handle
    self.handle_one_request()
  File "/usr/local/lib/python2.5/site-packages/trac/web/wsgi.py", line 174, in handle_one_request
    gateway.run(self.server.application)
  File "/usr/local/lib/python2.5/site-packages/trac/web/wsgi.py", line 87, in run
    response = application(self.environ, self._start_response)
  File "/usr/local/lib/python2.5/site-packages/trac/web/standalone.py", line 88, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 363, in dispatch_request
    env_paths)
  File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 456, in send_project_index
    req.hdf = HDFWrapper(loadpaths)
  File "/usr/local/lib/python2.5/site-packages/trac/web/clearsilver.py", line 135, in __init__
    raise TracError, "ClearSilver not installed (%s)" % e
TracError: ClearSilver not installed (No module named neo_cgi)


ClearSilverが入っていないとな。
インストールはしたんだが…。

とりあえず再インストールでもしようと思い、./configureで実行結果を確認。

checking for python includes... found /usr/include/python2.3

と、ここで違和感が。
Tracが参照してるのはpython2.5の方で、実際にインストールしたpythonのバージョンは2.5。
どうやらpython2.3が既に入っており、そちらを参照してしまっているようだ。
/usr/local/includeよりも/usr/includeを先に見てしまうのね。
whichだと/usr/localの方を見てるんだけどなぁ…。


インストール - cooldaemonの備忘録
を参考に、オプションを追加し、
./configure --disable-perl --with-python=/usr/local/bin/python
に変更。

checking for python includes... found /usr/local/include/python2.5
Disabling perl module
checking for ruby... found /usr/local/bin/ruby

python2.5を見てくれるようになった。
ついでにrubyもdisableにする事に。
./configure --disable-ruby --disable-perl --with-python=/usr/local/bin/python

checking for python includes... found /usr/local/include/python2.5
Disabling perl module
Disabling ruby module

これでmake installしてみる。
成功を確認。
再度tracdを起動し、アクセス。


今度はトップ画面が見れた。ClearSilverのエラーも起こらない。
プロジェクト一覧と言う簡素な画面からプロジェクト名(TracTest)のリンクをクリック。
見慣れたTracのトップ画面が表示された。
が…

Trac detected an internal error:

またまたエラー。画面下部にスタックトレースがある。

Python Traceback

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


python-svnバインディングができていない模様。
ソフト/Bug Tracking/trac/RedHat - discypus
を参考にpythonを対話的に起動してバインディングを確認。

Python 2.5.1 (r251:54863, Apr 26 2007, 16:32:28)
[GCC 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import svn
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named svn
>>>

入ってない…。
http://subversion.tigris.org/project_packages.html
と言うわけでここからrpmパッケージをダウンロードしてインストール。
http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/rhel-4/i386/


rpm -i subversion-python-1.4.3-1.i386.rpm
ところがこれもpython2.3の方にバインドされる…。

rpm -ql subversion-python
...
/usr/local/lib/python2.3/site-packages/libsvn/_delta.la
...


これに関しては二次情報がなかったので悪戦苦闘。
rpmのmanを見ながら色々なオプションを試した結果、

rpm -ivh --relocate /usr/lib/python2.3=/usr/local/lib/python2.5  subversion-python-1.4.3-1.i386.rpm

と言う非常に強引な方法でインストール成功。
ほんとにいいのか。もっとスマートな方法があると思うんだけどなぁ…。


で、再度またtracdから確認。
ようやくエラーもなく、見慣れたトップ画面が表示された!

感想

いやー、大変だった。
でもネット上で悪戦苦闘している人がたくさんいるお陰で効率の悪い英語の一次情報をほとんど参考せずにトラブル対応できた。
感謝ですなぁ…。スキルも英語力もない人間からすると本当にありがたい。


さて、これからApacheで動かしたり、まだまだやる事はたくさんある…。Tracしんどいな。