Subversion(1.6.15)のTrac連携にはまる

年末の大掃除を兼ねて自分のPCで稼動させているTracSubversionのメンテナンスを行ったものの、少々はまっているので現時点までのまとめを整理してみる。動作環境は下記の通り。

今回の主目的はSubversionサーバの更新だ。下記にはWin32用の各種バイナリが用意されている。

プロジェクトのリンクを辿って行くと下記のサイトに辿り着く。ここには下記の記述があるので、Python 2.6が必要らしい。手元の環境ではPython 2.5が稼動していたので、これも合わせて更新することにした。

Python 2.6 bindings: svn-win32-1.6.15_py.zip

Alagazam.net: Subversion Windows Installer

Trac

まずはTracのインストール。

c:\bin\Python26\python.exe setup.py install

次にApacheとの連携。

C:\Program Files\Apache Software Foundation\Apache2.2\modules
  • Apache用に下記のファイルを新規作成した。
C:\Program Files\Apache Software Foundation\Apache2.2\wsgi\trac.wsgi
import sys
sys.stdout = sys.stderr

import os
os.environ['TRAC_ENV_PARENT_DIR'] = 'C:\\data\\trac'
os.environ['PYTHON_EGG_CACHE'] = 'C:\\bin\\Python26\\EggCache'

import trac.web.main
application = trac.web.main.dispatch_request
  • Apacheの設定ファイルを上記に合わせて修正。
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias /trac "C:/Program Files/Apache Software Foundation/Apache2.2/wsgi/trac.wsgi"
<Location /trac>
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Deny from all
    allow from 127.0.0.1
</Location>
  • Apacheを起動。この時点でTracの動作はOKであることを確認した。

Subversion

Subversionをインストール

次にTrac(Python)の連携を行う

C:\bin\Python26\Lib\site-packages
  • Apacheを再起動してみるが、Tracリポジトリブラウザが表示されない。(文字化けのエラーメッセージが表示される)

Warning: Can't synchronize with repository "(default)" (Unsupported version control system "svn": DLL load failed: ?±?I?I?y???[?e?B???O ?V?X?e?�?A?I %1 ?I?A?s?3?e?U?1?n?B). Look in the Trac log for more information.

>python
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from svn import core
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\bin\Python26\Lib\site-packages\svn\core.py", line 19, in <module>
    from libsvn.core import *
  File "C:\bin\Python26\Lib\site-packages\libsvn\core.py", line 5, in <module>
    import _core
ImportError: DLL load failed: このオペレーティングシステムでは%1は実行されません。
  • メッセージ内容から見て、Pythonの問題ではないような感じがする。Tracのサイトには下記のトラブルシューティングが載っていたので、これを試してみることにした。

A good way to diagnose a DLL load failed error is to use the depends.exe tool from the console in which you'd run python.exe, and do a depends.exe absolute-path-to/python.exe instead. Then, press F7 (Start Profiling... - you need at least version 2.0 of depends.exe) and type from svn import core at the Python prompt in the new cmd window. This will try to load the bindings, but this time you'll be able to see why this fails, by spotting the .DLLs shown in red in the Module list, and there are really lots of options here ;-)

TracSubversion – The Trac Project
GetProcAddress(0x7C800000 [c:\windows\system32\KERNEL32.DLL], "FlsAlloc") called from "c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_d495ac4e\MSVCR90.DLL" at address 0x78543ACC and returned NULL. Error: wvV[WB (127).
  • 調べたところ、FlsAllocはVista以降で使えるAPIらしい。Python bindingのビルドはVista以降で有効なのだろうか?(そのような情報は見つからなかったけど)

Minimum supported client | Windows Vista

FlsAlloc function (Windows)
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from svn import core
>>>
  • Apacheを再起動してところ、Tracリポジトリブラウザは正常に表示されるようになった。(svnのバージョンは一致していないけど)

どうやらsvn-win32-1.6.15_py.zipを手動で入れるだけではダメということらしい(pydとdllを共存させたりしたけど、結果は変わらず)。svn-python-1.6.6.win32-py2.6.exeのインストール結果と比較してみると分かるように、そもそもファイル数が大きく異なるので1.6.6→1.6.15ではビルド構成が大きく変わっているような気もする。

ここまで調べたところでお手上げ状態。何かつまらないところで間違えているような気もするけれど、さて何が悪いのだろう?



関連