CentOS5 の trac0.11 に Account Manager Plugin を入れる際に出た問題対処のメモ。
先にやったことの流れを紹介。
→ easy_install でのプラグインインストールに失敗
→ CentOS5 の python-setuptools が Subversion1.5 のワーキングコピーに未対応
→ 最新版は対応しているので、rpm を作成してインストールしようとした
→ python-setuptools の rpm 作成に失敗
→ CentOS5 の python setup.py の bdist_rpm のバグ、らしい。
→ bdist_rpm にパッチをあてて、再度 python-setuptools の rpm を作成
→ できあがった rpm をインストール
→ easy_install でプラグインをインストール
これからプラグインを入れる人は
→ CentOS5 の python setup.py の bdist_rpm にパッチを当てる
→ python-setuptools の最新版 rpm を作成、インストール
→ easy_install
の手順が幸せだと思います。
その手順は http://d.hatena.ne.jp/naga_sawa/20080919/1221839008 に抜き出しているので、そっちが目当ての方はそちら参照で。
trac はこんな感じで rpmforge の trac-0.11.1-1.el5.rf を利用。
(参考 http://www.cafechantant.com/blog/2007/08/27/centos5-%E3%81%A7-subversiontrac/)
# yum --enable=rpmforge install trac Loading "fastestmirror" plugin Loading mirror speeds from cached hostfile * rpmforge: fr2.rpmfind.net * base: ftp2.riken.jp ....(省略).... Dependency Installed: python-genshi.i386 0:0.5.1-2.el5.rf python-setuptools.noarch 0:0.6c5-2.el5 Complete! #
基本的な設定を済ませ、その状態での動作を確認。
次に Account Manager Plugin を入れようと http://trac-hacks.org/wiki/AccountManagerPlugin の説明に沿ってインストールしようとしたところ、
# easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk Downloading http://trac-hacks.org/svn/accountmanagerplugin/trunk Doing subversion checkout from http://trac-hacks.org/svn/accountmanagerplugin/trunk to /tmp/easy_install-Pd27aL/trunk Processing trunk Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-Pd27aL/trunk/egg-dist-tmp-l-X6vE unrecognized .svn/entries format; skipping . Traceback (most recent call last): File "/usr/bin/easy_install", line 7, in ? sys.exit( File "/usr/lib/python2.4/site-packages/setuptools/command/easy_install.py", line 1670, in main with_ei_usage(lambda: File "/usr/lib/python2.4/site-packages/setuptools/command/easy_install.py", line 1659, in with_ei_usage return f() ....(省略).... File "/usr/lib/python2.4/site-packages/setuptools/command/sdist.py", line 52, in _default_revctrl for path in finder(dirname,path): File "/usr/lib/python2.4/site-packages/setuptools/command/sdist.py", line 98, in entries_finder log.warn("unrecognized .svn/entries format in %s", dirname) NameError: global name 'log' is not defined #
とエラーを吐いてインストールされない。
エラーメッセージなどで調べたところ、どうも setuptools が Subversion 1.5 のワーキングコピーの形式に対応していない模様。
最新の setuptools では svn 1.5 に対応していて、最新版をリポジトリから取得してインストールすることで解決できそうな塩梅なので rpm を作成してアップデートすることにする。
(参考 http://d.hatena.ne.jp/jun66j5/20080701/setuptools, http://d.hatena.ne.jp/jun66j5/20080723/setuptools, http://d.hatena.ne.jp/jun66j5/20080724/setuptools)
最新版をチェックアウト。
$ mkdir setuptools $ svn co http://svn.python.org/projects/sandbox/branches/setuptools-0.6 ....(省略).... リビジョン 66497 をチェックアウトしました。
python setup.py bdist_rpm で rpm を作る。
$ cd setuptools $ python setup.py bdist_rpm running bdist_rpm running egg_info ....(省略).... building RPMs rpmbuild -bs --define _topdir /home/*****/setuptools/build/bdist.linux-i686/rpm --clean build/bdist.linux-i686/rpm/SPECS/setuptools.spec 書き込み完了: /home/*****/setuptools/build/bdist.linux-i686/rpm/SRPMS/setuptools-0.6c9dev_r66389-1.src.rpm 実行中(--clean): /bin/sh -e /var/tmp/rpm-tmp.80773 + umask 022 + cd /home/*****/setuptools/build/bdist.linux-i686/rpm/BUILD + rm -rf setuptools-0.6c9dev-r66389 + exit 0 moving build/bdist.linux-i686/rpm/SRPMS/setuptools-0.6c9dev_r66389-1.src.rpm -> dist $
build/bdist.linux-i686/rpm/SPECS/ に spec ファイルが出来ているので、CentOSのパッケージ名と整合をとるため、以下のパッチを適用、
--- setuptools.spec.orig 2008-09-18 15:41:39.000000000 +0900 +++ setuptools.spec 2008-09-18 15:41:48.000000000 +0900 @@ -1,4 +1,4 @@ -%define name setuptools +%define name python-setuptools %define version 0.6c9dev_r66389 %define unmangled_version 0.6c9dev-r66389 %define release 1
また、rpm でなく、tarball と srpm が dist 以下にできているので、こちらも CentOS のパッケージ名に合わせるために、tarball 内のディレクトリ名と tarball 自体のファイル名を変更する。
$ cd dist/ $ tar zxf setuptools-0.6c9dev-r66389.tar.gz $ mv setuptools-0.6c9dev-r66389 python-setuptools-0.6c9dev-r66389 $ tar -cf python-setuptools-0.6c9dev-r66389.tar python-setuptools-0.6c9dev-r66389 $ gzip -9 python-setuptools-0.6c9dev-r66389.tar $ cd ..
tarball を RPM 環境に流し込んで、先ほど修正した spec ファイルで rpmbuild すると…
$ cp dist/python-setuptools-0.6c9dev-r66389.tar.gz ~/RPM/SOURCES/ $ rpmbuild -ba build/bdist.linux-i686/rpm/SPECS/setuptools.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.43286 + umask 022 + cd /home/*****/RPM/BUILD ....(省略).... + umask 022 + cd /home/*****/RPM/BUILD + cd python-setuptools-0.6c9dev-r66389 + DOCDIR=/var/tmp/python-setuptools-0.6c9dev_r66389-1-buildroot/usr/share/doc/python-setuptools-0.6c9dev_r66389 + export DOCDIR + rm -rf /var/tmp/python-setuptools-0.6c9dev_r66389-1-buildroot/usr/share/doc/python-setuptools-0.6c9dev_r66389 + /bin/mkdir -p /var/tmp/python-setuptools-0.6c9dev_r66389-1-buildroot/usr/share/doc/python-setuptools-0.6c9dev_r66389 + cp -pr setuptools.txt EasyInstall.txt pkg_resources.txt README.txt /var/tmp/python-setuptools-0.6c9dev_r66389-1-buildroot/usr/share/doc/python-setuptools-0.6c9dev_r66389 + exit 0 警告: ファイルが2回表記されています: /usr/lib/python2.4/site-packages/setuptools-0.6c9dev_r66389-py2.4.egg-info/PKG-INFO ....(省略).... Requires: /usr/bin/python python(abi) = 2.4 python-devel 伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/python-setuptools-0.6c9dev_r66389-1-buildroot エラー: インストール済み(ただし未伸張)ファイルが見つかりました: /usr/lib/python2.4/site-packages/easy_install.pyo /usr/lib/python2.4/site-packages/pkg_resources.pyo ....(省略).... RPM ビルドエラー: ファイルが2回表記されています: /usr/lib/python2.4/site-packages/setuptools-0.6c9dev_r66389-py2.4.egg-info/PKG-INFO ....(省略).... ファイルが2回表記されています: /usr/lib/python2.4/site-packages/setuptools-0.6c9dev_r66389-py2.4.egg-info/top_level.txt インストール済み(ただし未伸張)ファイルが見つかりました: /usr/lib/python2.4/site-packages/easy_install.pyo /usr/lib/python2.4/site-packages/pkg_resources.pyo ....(省略).... /usr/lib/python2.4/site-packages/setuptools/tests/test_resources.pyo /usr/lib/python2.4/site-packages/site.pyo $
と、こんな感じで「インストール済み(ただし未伸張)ファイルが見つかりました:」
もしくは「Installed (but unpackaged) file(s) found:」
というエラーが発生して rpm が作成できない。
こちらも調べたところ、 bdist_rpm が正常に動作しないようだ。
(参考 http://wtnb.mydns.jp/wordpress/archives/4235)
なので、参考サイトに書かれているパッチを /usr/lib/python2.4 に適用してやる
--- python2.4/distutils/command/bdist_rpm.py.orig 2007-01-19 18:57:07.000000000 +0900 +++ python2.4/distutils/command/bdist_rpm.py 2007-01-19 18:57:43.000000000 +0900 @@ -488,6 +488,7 @@ class bdist_rpm (Command): ('build', 'build_script', def_build), ('install', 'install_script', ("%s install " + "--optimize 1 " "--root=$RPM_BUILD_ROOT " "--record=INSTALLED_FILES") % def_setup_call), ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"),
そして、ビルド途中のゴミが残っている /var/tmp を掃除してから setup.py をやりなおし。
$ python setup.py bdist_rpm $ cd dist $ tar zxf setuptools-0.6c9dev-r66389.tar.gz $ mv setuptools-0.6c9dev-r66389 python-setuptools-0.6c9dev-r66389 $ tar -cf python-setuptools-0.6c9dev-r66389.tar python-setuptools-0.6c9dev-r66389 $ gzip -9 python-setuptools-0.6c9dev-r66389.tar $ cp python-setuptools-0.6c9dev-r66389.tar.gz ~/RPM/SOURCES/ $ cd .. $ vi build/bdist.linux-i686/rpm/SPECS/setuptools.spec
そして rpmbuild。今回はちゃんと成功する。
$ rpmbuild -ba build/bdist.linux-i686/rpm/SPECS/setuptools.spec ....(省略).... $
これで ~/RPM/RPMS/noarch/ 以下に python-setuptools の rpm が出来るので yum なり rpm -ivh で入れる。
これでようやく TracAccountManager のインストールが成功するようになる。
# easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk Downloading http://trac-hacks.org/svn/accountmanagerplugin/trunk Doing subversion checkout from http://trac-hacks.org/svn/accountmanagerplugin/trunk to /tmp/easy_install-So4Fz1/trunk Processing trunk Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-So4Fz1/trunk/egg-dist-tmp-GbMhk- TracAccountManager 0.2.1dev-r3857 is already the active version in easy-install.pth Installed /usr/lib/python2.4/site-packages/TracAccountManager-0.2.1dev_r3857-py2.4.egg Processing dependencies for TracAccountManager==0.2.1dev-r3857 Finished processing dependencies for TracAccountManager==0.2.1dev-r3857 #
やれやれ。。