CentOS5 の python-setuptools を Subversion1.5 対応にする

現時点で CentOS5 にリリースされている python-setuptools (python-setuptools-0.6c5-2.el5) は Subversion 1.5 のワーキングコピーの形式に対応していないので、Subversion 1.5 を入れた環境では easy_install がエラーを出して動作しない。

python-setuptools のリポジトリにある最新版は 1.5 形式に対応しているので、そこから rpm を作成すれば解決するものの、bdist_rpm コマンドにバグ(?)があるので、こちらに対処してからでないと rpm を作るときにエラーがでる。

と、Tracプラグインを入れようとしたときにはまったので、後々のためにメモ。

まず、 bdist_rpm の不具合を取り除くために以下のパッチを /usr/lib/python2.4 に適用してやる。(情報源 http://wtnb.mydns.jp/wordpress/archives/4235)
1行なので、適当なエディタで弄るだけでもよし。

--- 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"),

そして、適当なディレクトリに setuptools の最新版をチェックアウトする。
自分のときは rev66497 を利用。

$ mkdir setuptools
$ svn co http://svn.python.org/projects/sandbox/branches/setuptools-0.6 setuptools
....(省略)....
リビジョン 66497 をチェックアウトしました。
$

そして bdist_rpmrpm を作成。

$ cd setuptools
$ python setup.py bdist_rpm
running bdist_rpm
running egg_info
writing setuptools.egg-info/PKG-INFO
writing top-level names to setuptools.egg-info/top_level.txt
....(省略)....
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 する。
(~/RPM/SOURCES/ の部分は環境に合わせて置き換えてくださいね)

$ cp dist/python-setuptools-0.6c9dev-r66389.tar.gz ~/RPM/SOURCES/
$ rpmbuild -ba build/bdist.linux-i686/rpm/SPECS/setuptools.spec

これで ~/RPM/RPMS/noarch/ 以下に python-setuptools の rpm が出来るので、後は yum なり rpm -ivh でインストールorアップデートすれば完了。

easy_install も正常に動作するようになる。ハズ。

パッケージ名を変更する部分は、もっと賢い方法があるかもしれないデス。