Subversion(1.6.15)のTrac連携にはまる
年末の大掃除を兼ねて自分のPCで稼動させているTracとSubversionのメンテナンスを行ったものの、少々はまっているので現時点までのまとめを整理してみる。動作環境は下記の通り。
- Windows XP/SP3, 32bit
- Apache 2.2.16
- Subversion 1.6.6(旧)-> 1.6.15(新)
今回の主目的は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のインストール。
- python-2.6.6.msiをC:\bin\Python26へインストール
- setuptools-0.6c11.win32-py2.6.exeをインストール
- Trac-0.12.1.ja1.zipをインストール
c:\bin\Python26\python.exe setup.py install
次にApacheとの連携。
- 下記によれば"The mod_python project is now officially dead."らしい。
- そこで今まで使っていたmod_pythonの代わりに、今回はWSGIを使うことにした。
- mod_pythonのモジュール、設定を削除しておく。
- 上記のサイトに記載されている手順に従い、mod_wsgi-win32-ap22py26-3.3.soをダウンロード後、mod_wsgi.soにリネームして下記のフォルダへ入れた。
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>
Subversion
Subversionをインストール
- Setup-Subversion-1.6.15.msiを上書きインストール
- Subversion用のApache設定は変更なし。
- svn-win32-1.6.15_py.zipをダウンロード
- 下記の情報を参考にしてインストール
- http://trac.edgewall.org/wiki/TracSubversion
- libsvn内の_*.dll ファイルを _*.pydへリネームして下記のフォルダへ追加
- svnフォルダはそのまま下記のフォルダへ追加。
- http://trac.edgewall.org/wiki/TracSubversion
C:\bin\Python26\Lib\site-packages
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
- Dependency Walkerを使って上記の手順で試したところ、FlsAlloc, FlsFreeが見つからないというリンクエラーが表示された。これは何だ?
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).
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 >>>
どうやらsvn-win32-1.6.15_py.zipを手動で入れるだけではダメということらしい(pydとdllを共存させたりしたけど、結果は変わらず)。svn-python-1.6.6.win32-py2.6.exeのインストール結果と比較してみると分かるように、そもそもファイル数が大きく異なるので1.6.6→1.6.15ではビルド構成が大きく変わっているような気もする。
ここまで調べたところでお手上げ状態。何かつまらないところで間違えているような気もするけれど、さて何が悪いのだろう?
関連