It is possible to build Python 2.5.6 as a 64-bit RPM for CentOS/RHEL(RedHat) 5.6:
[kelvin@campion ~]$ cat /etc/redhat-release CentOS release 5.6 (Final) [kelvin@campion ~]$ python25 Python 2.5.6 (r256:88840, Jun 15 2011, 19:58:29) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> |
I’m going to follow the method detailed in a blog post by Bryan O’Sullivan and build an RPM using a source RPM from the Fedora Project. My system is a 64-bit virtual machine running CentOS 5.6. Except for a post-install update via yum, a static LAN IP and an Apache HTTPD, this machine is exactly what you would get if you installed the server from a netinstall:
[kelvin@campion ~]$ uname -a Linux campion 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux |
Build tools
First step is to install the tools and packages that you will need to build your Python RPM (~70mb with dependencies):
$ sudo yum install autoconf bzip2-devel db4-devel \ expat-devel findutils gcc-c++ gdbm-devel glibc-devel gmp-devel \ libGL-devel libX11-devel libtermcap-devel ncurses-devel \ openssl-devel pkgconfig readline-devel sqlite-devel tar \ tix-devel tk-devel zlib-devel rpm-build |
Find a Python 2.5 source RPM
The last Fedora that shipped with Python 2.5 was Fedora 10 so we need to get that source RPM. Visit your closest Fedora 10 mirror and download it to your working directory:
[kelvin@campion ~]$ cd [kelvin@campion ~]$ wget http://mirrordenver.fdcservers.net/fedora/releases/10/Fedora/source/SRPMS/python-2.5.2-1.fc10.src.rpm |
Now that you have the source RPM, extract it (into a temporary build directory) with the following:
[kelvin@campion ~]$ mkdir -p /tmp/py25/{BUILD,RPMS,SOURCES,SPECS} [kelvin@campion ~]$ rpm --define '_topdir /tmp/py25' -ivh python-2.5.2-1.fc10.src.rpm warning: python-2.5.2-1.fc10.src.rpm: Header V3 DSA signature: NOKEY, key ID 4ebfc273 1:python warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root ... |
The ‘mock’ warnings refer to the Fedora build tool called ‘mock’ and they can be ignored. You have now extracted the source from the RPM and it resides in /tmp/py25.
Download the Python 2.5.6 source
At the time this post was written, Python 2.5 was due to be left unmaintained after Oct 2011. Alas, I have some unmigrated 2.5 apps so we need to get the latest Python 2.5 source and replace the BZipped tarball in the source RPM (ensure you download the BZipped source from the Python web site).
$ cd /tmp/py25/SOURCES/ $ wget http://www.python.org/ftp/python/2.5.6/Python-2.5.6.tar.bz2 $ ls -l Python-2.5.* -rw-r--r-- 1 kelvin kelvin 9807597 Sep 24 2008 Python-2.5.2.tar.bz2 -rw-rw-r-- 1 kelvin kelvin 9821788 May 26 07:46 Python-2.5.6.tar.bz2 |
Edit the RPM spec and a patch file
You want to allow your RPM build to use the older 4.3 version of BerkeleyDB that ships with CentOS 5.6. You also want the RPM to use the source archive we just downloaded and not the one that came with the RPM. You need to make the following minor changes using an editor like vim or emacs or nano (yuk!):
$ cd /tmp/py25/SOURCES/ $ vim python-2.5-config.patch |
Change line 251 (vim hint: in command mode ‘:251’ goes to line 251, ‘i’ enters insert mode, edit-edit-edit, ‘esc’ goes back to command mode, ‘ZZ’ saves and closes the file):
251 | +DBLIBVER=4.3 |
Your RPM will now use the CentOS 5.6 standard BerkeleyDB version 4.3.
$ cd /tmp/py25/SPECS $ vim python.spec |
Edit these lines:
24 | Version: 2.5.6 |
86 | BuildPrereq: db4-devel >= 4.3 |
224 225 | #%patch999 -p1 -b .cve2007-4965 #%patch998 -p0 -b .cve2008-2316 |
Your RPM build will now use the Python version 2.5.6 source archive in your SOURCES directory. The two CVE patches have already been applied in Python 2.5.6 so we must comment out those lines in the spec file so the included Fedora patches are not applied.
Build your Python 2.5.6 RPM
You are now ready to build the RPM. Go into the SPECS directory and build it:
$ cd /tmp/py25/SPECS $ rpmbuild --define '_topdir /tmp/py25' --define '__python_ver 25' -bb python.spec |
Once packaged, your RPMs can be found in the RPM directory (if you built an i386 version it will be in a different directory):
[kelvin@campion x86_64]$ cd /tmp/py25/RPMS/x86_64 [kelvin@campion x86_64]$ ls -l total 13116 -rw-r--r-- 1 kelvin kelvin 6350252 Jun 15 20:12 python25-2.5.6-1.x86_64.rpm -rw-r--r-- 1 kelvin kelvin 932782 Jun 15 20:12 python25-devel-2.5.6-1.x86_64.rpm -rw-r--r-- 1 kelvin kelvin 1469432 Jun 15 20:12 python25-libs-2.5.6-1.x86_64.rpm -rw-r--r-- 1 kelvin kelvin 3849692 Jun 15 20:13 python25-test-2.5.6-1.x86_64.rpm -rw-r--r-- 1 kelvin kelvin 457052 Jun 15 20:12 python25-tools-2.5.6-1.x86_64.rpm -rw-r--r-- 1 kelvin kelvin 329428 Jun 15 20:12 tkinter25-2.5.6-1.x86_64.rpm |
Install your Python 2.5.6 RPM
Your 64-bit RPMs can be installed with one line:
[kelvin@campion x86_64]$ sudo rpm -ivh /tmp/py25/RPMS/x86_64/*.rpm [sudo] password for kelvin: Preparing... ########################################### [100%] 1:python25 ########################################### [ 17%] 2:python25-libs ########################################### [ 33%] 3:tkinter25 ########################################### [ 50%] 4:python25-devel ########################################### [ 67%] 5:python25-test ########################################### [ 83%] 6:python25-tools ########################################### [100%] [kelvin@campion x86_64]$ |
Use your Python 2.5.6
Your new(-ish) Python 2.5.6 interpreter is invoked with python25 in order to preserve the system default Python 2.4 intrpreter used by yum and pretty much everything else on CentOS.
[kelvin@campion x86_64]$ python25 Python 2.5.6 (r256:88840, Jun 15 2011, 19:58:29) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import hashlib >>> |