omae です。 CentOS 5.3 で Trac 0.11 を MySQL を使って実行しようとしたら、以下のようなエラーでしばらく悩んでしまいました。
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/web/main.py", line 467, in _dispatch_request
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/web/main.py", line 234, in dispatch
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/web/chrome.py", line 761, in render_template
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/web/api.py", line 199, in __getattr__
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/util/compat.py", line 72, in newfunc
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/web/chrome.py", line 516, in prepare_request
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/ticket/web_ui.py", line 171, in get_navigation_items
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/perm.py", line 526, in has_permission
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/perm.py", line 539, in _has_permission
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/perm.py", line 427, in check_permission
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/perm.py", line 283, in check_permission
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/perm.py", line 359, in get_user_permissions
File "/usr/lib/python2.4/site-packages/Trac-0.11.4-py2.4.egg/trac/perm.py", line 183, in get_user_permissions
TypeError: unhashable type
よくよく確認すると4月末ぐらいも同じエラーでしばらく悩んだみたいです。 今回はここにメモを残すことに。
まずはこのエラーで検索。検索するとすぐに trac.edgewall.org にこのエラーそのものが ticket として作成されていることが解りました。
#7481 (Project not work affter successfull initenv) このチケットによれば「MySQL-python を 1.2.2 にアップデートしろ」とあります。
いま入っている MySQL-python を確認すると MySQL-python-1.2.1-1.i386 でした。 CentOS のパッケージをそのままインストールしているだけなのですが、これは修正されないのかなぁ…。 それはともかく 1.2.2 に対応した rpm を自分で作って入れ替えることにしました。
まず MySQL-python の SRPM をとって来る為に次のコマンドを実行。
# yumdownloader --source MySQL-python
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* updates: www.ftp.ne.jp
* addons: www.ftp.ne.jp
* extras: www.ftp.ne.jp
extras-source | 951 B 00:00
updates-source | 951 B 00:00
base | 1.1 kB 00:00
updates | 951 B 00:00
base-source | 951 B 00:00
addons | 951 B 00:00
extras | 1.1 kB 00:00
MySQL-python-1.2.1-1.src.rpm | 71 kB 00:00
srpm をインストールしてみます。
# rpm -ivv MySQL-python-1.2.1-1.src.rpm
D: ============== MySQL-python-1.2.1-1.src.rpm
D: Expected size: 72317 = lead(96)+sigs(344)+pad(0)+data(71877)
D: Actual size: 72317
D: opening db environment /var/lib/rpm/Packages joinenv
D: opening db index /var/lib/rpm/Packages rdonly mode=0x0
D: locked db index /var/lib/rpm/Packages
D: opening db index /var/lib/rpm/Pubkeys rdonly mode=0x0
D: read h# 346 Header sanity check: OK
D: ========== DSA pubkey id a8a447dc e8562897 (h#346)
D: MySQL-python-1.2.1-1.src.rpm: Header V3 DSA signature: OK, key ID e8562897
D: added source package [0]
D: found 1 source and 0 binary packages
D: Expected size: 72317 = lead(96)+sigs(344)+pad(0)+data(71877)
D: Actual size: 72317
D: InstallSourcePackage: Header V3 DSA signature: OK, key ID e8562897
MySQL-python-1.2.1-1
D: ========== Directories not explicitly included in package:
D: 0 /usr/src/redhat/SOURCES/
D: 1 /usr/src/redhat/SPECS/
D: ==========
D: fini 100664 1 ( 500, 500) 64628 /usr/src/redhat/SOURCES/MySQL-python-1.2.1.tar.gz;4a573e54
D: fini 100664 1 ( 500, 500) 4987 /usr/src/redhat/SPECS/MySQL-python.spec;4a573e54
GZDIO: 9 reads, 70004 total bytes in 0.000573 secs
D: closed db index /var/lib/rpm/Pubkeys
D: closed db index /var/lib/rpm/Packages
D: closed db environment /var/lib/rpm/Packages
D: May free Score board((nil))
次に MySQL-python-1.2.2 を /usr/src/redhat/SOURCES/ に配置します。
# wget -nd -P /usr/src/redhat/SOURCES http://downloads.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz
tarball と spec ファイルしかないので、spec ファイルのバージョン部分だけを変更することにします。変更は以下のような感じ。
--- SPECS/MySQL-python.spec.orig 2009-07-10 22:15:55.000000000 +0900
+++ SPECS/MySQL-python.spec 2009-07-10 22:16:01.000000000 +0900
@@ -3,8 +3,8 @@
Summary: An interface to MySQL
Name: MySQL-python
-Version: 1.2.1
-Release: 1
+Version: 1.2.2
+Release: 0.1
License: GPL
Group: Development/Libraries
Source0: http://prdownloads.sourceforge.net/mysql-python/MySQL-python-%{version}.tar.gz
下準備はそろったので rpmbuild します。
# rpmbuild -ba SPECS/MySQL-python.spec
これで /usr/src/redhat/RPMS/ 配下に rpm が作成されているので、これでアップデートします。
# rpm -Uvh RPMS/i386/MySQL-python-1.2.2-0.1.i386.rpm
これで完了です。無事に Trac が参照できるようになりました。