CentOS6.3で、Python2.7.3のRPMを作ってみた

2013年はへび年ということで、Pythonネタ。

AWSのEC2(CentOS6.3)で、Python2.7系のRPM作成しようと思ったら、
思いの外色々探しまわったので、メモしておく。

経緯としては、以下の様な感じ。

1.Pythonをインストールしてみた人を探す
どうも普通にmakeして、インストールしてる人が多い模様。
一応、CentOS6.3に標準で入っているPython2.6も残しておきたいし。
CentOSが使っているyumPythonで作られているため、Python2.6環境には手を入れたくないし、
Python3.x系移るときに、簡単にアンインストールとかできるようにしておきたい。
(あと、chefとかで管理することも考慮して、できればRPMを作成しておきたいなど)

2.Python2.7のRPMを作ってみた人を探す
ちらほらいるけど、どうもCentOS5.xで作ってみた人とかが多い。
http://blog.milford.io/2012/01/building-and-installing-python-2-7-rpms-on-centos-5-7/
他のブログもいくつか見ていると、rpmbuildのときのエラーをいくつか無視するようにしている模様。

QA_RPATHS=$[ 0x0001|0x0010 ] rpmbuild -bb ~/rpmbuild/SPECS/python-2.7.2.spec

↑こんな感じ

また、下の方のコメント欄をよく見ていると、
Provides: python-abi = %{libvers}
Provides: python(abi) = %{libvers}
の2行をspecファイルに追記しないと、CentOS標準のpython2.6環境と競合してしまって、
toolsとtkinterがインストールできない(pydocやsmtpd.pyなどが競合する)

他にも、githubにspecファイルを上げていた人がいたので、
何個か試してみたけど、やっぱりQA_RPATHSを通さないとうまくいかないものが多かった。

あと、普通にmakeしてみると、どうもsqliteまわりでこけている模様
Python 2.7.3コンパイルでSQLite3エラー: とりあえず
CentOS5.8にPython2.7.3をインストール - SUGI製作所
sqliteを使う予定はないけど、今後使用したい要件があったときに対応できないので、できれば解消しておきたい。

3.パッチつきのSRPMが配布されていないか探す
python2.7.3は、2012/04/09にリリースされたので、
流石に上記のバグは解消されているんじゃねと思ったら、案の定SRPM用意されてた。
829892 – Review Request: python27 - Parallel-installable Python 2.7 for EL6

このsrc.rpmrpm -ihvして、specファイルを覗いてみると、あるわあるわpatchの山w
一応、SOURCE配下のPython-2.7.3.tar.xzのMD5を確認してみたけど、
ちゃんと下記のものと一致していたので、これを使ってみる。
Python Release Python 2.7.3 | Python.org

4.(やっと)rpmファイルを作成する
まずは、rpmbuildに必要な環境をインストール

# yum install rpm-build
# yum groupinstall "Development Tools"
# yum install bzip2-devel db4-devel expat-devel gdbm-devel gmp-devel libffi-devel libGL-devel libX11-devel ncurses-devel openssl-devel readline-devel sqlite-devel systemtap-sdt-devel tcl-devel tix-devel tk-devel valgrind-devel zlib-devel

次に、rpmbuild用のユーザを作成して、作業用ディレクトリを作成

# useradd rpmbuilder
# su - rpmbuilder
# mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

rpmbuild用のホームを指定

# cat .rpmmacros
%_topdir %(echo $HOME)/rpmbuild
# cd rpmbuild/SRPMS
# wget http://mmckinst.fedorapeople.org/packages/python27/python27-2.7.3-1.el6.src.rpm
# rpm -ihv python27-2.7.3-1.el6.src.rpm

後は、お作法通りに、SPECディレクトリに移動して、
rpmbuild -ba を実行してみると、こんな感じのrpmファイルが出来上がり。

python27-2.7.3-1.el6.x86_64.rpm
python27-libs-2.7.3-1.el6.x86_64.rpm
python27-debug-2.7.3-1.el6.x86_64.rpm
python27-test-2.7.3-1.el6.x86_64.rpm
python27-debuginfo-2.7.3-1.el6.x86_64.rpm
python27-tools-2.7.3-1.el6.x86_64.rpm
python27-devel-2.7.3-1.el6.x86_64.rpm
tkinter27-2.7.3-1.el6.x86_64.rpm

このrpmファイル使って、別サーバでもPython2.7環境が動くことまで確認できたので、ひとまずこれで様子見。