Update: As per Alexander Todorov’s suggestion using https://www.softwarecollections.org/ is much easier and saves a lot of trouble compiling.
So after git it’s time to upgrade python. CentOS 7 has python 3.4, but there are some small but very annoying incompatibilities with 3.5. And it seems that 3.5 will be the major python 3 release. So here we go:
RPM build chroot
First lets create the chroot directory and initialize the rpm database :
mkdir /root/buildroot rpm --root=/root/buildroot --rebuilddb
Next install the latest centos-release package, yum and add the EPEL inside the chroot:
rpm --root=/root/buildroot -i http://mirror.centos.org/centos/7.2.1511/os/x86_64/Packages/centos-release-7-2.1511.el7.centos.2.10.x86_64.rpm yum --installroot=/root/buildroot install yum rpm --root=/root/buildroot -i http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
Next we continue inside the chroot :
systemd-nspawn -D /root/buildroot/
Building RPMs
Next we need to install gcc, and few other packages that are needed to compile RPMs and pyton.
yum install autoconf bluez-libs-devel bzip2-devel libdb4-devel gcc-c++ gmp-devel libffi-devel libGL-devel libX11-devel ncurses-devel net-tools readline-devel sqlite-devel tcl-devel tix-devel tk-devel valgrind-devel xz-devel python-rpm-macros openssl-devel make gcc perl-ExtUtils-MakeMaker rpmdevtools
Pick a python 3.5 SRPM from https://apps.fedoraproject.org/packages/python3 .
And install it :
rpm -i https://kojipkgs.fedoraproject.org//packages/python3/3.5.2/4.fc25/src/python3-3.5.2-4.fc25.src.rpm
You can just ignore the warning about missing users. Go to SPECS directory and edit python3.spec so that :
%global with_rewheel 1
becomes
%global with_rewheel 0
This has something to do with a circular dependency of the rewheel package. Now we can build python with:
cd rpmbuild/SPECS/ rpmbuild -ba python3.spec
After the build is done we can check if the packages are installable:
cd /root/rpmbuild/RPMS/x86_64 yum install python3-rpm-macros-3 *.rpm
Now let’s try to rebuild with the rewheel package. We will need python-rpm-macros, python3-pip and python3-setuptools and a bunch of other packages for building them 🙂
# python-rpm-macros rpm -i https://kojipkgs.fedoraproject.org//packages/python-rpm-macros/3/11.el6/src/python-rpm-macros-3-11.el6.src.rpm rpmbuild -D 'rpmmacrodir /etc/rpm/' -ba python-rpm-macros.spec yum install ../RPMS/noarch/python3-rpm-macros-3-11.el7.centos.noarch.rpm ../RPMS/noarch/python-rpm-macros-3-11.el7.centos.noarch.rpm ../RPMS/noarch/python-srpm-macros-3-11.el7.centos.noarch.rpm # install some build dependencies for setuptools and pip yum -y install bash-completion yum -y install https://kojipkgs.fedoraproject.org//packages/python-pip/8.1.2/4.fc26/noarch/python3-pip-8.1.2-4.fc26.noarch.rpm yum -y install https://kojipkgs.fedoraproject.org//packages/python-setuptools/28.6.0/1.fc26/noarch/python3-setuptools-28.6.0-1.fc26.noarch.rpm yum -y install https://kojipkgs.fedoraproject.org//packages/python-wheel/0.30.0a0/1.fc26/noarch/python3-wheel-0.30.0a0-1.fc26.noarch.rpm yum -y install https://kojipkgs.fedoraproject.org//packages/python-mock/2.0.0/2.fc25/noarch/python3-mock-2.0.0-2.fc25.noarch.rpm https://kojipkgs.fedoraproject.org//packages/python-funcsigs/1.0.2/2.fc25/noarch/python3-funcsigs-1.0.2-2.fc25.noarch.rpm h ttps://kojipkgs.fedoraproject.org//packages/python-six/1.10.0/4.fc26/noarch/python3-six-1.10.0-4.fc26.noarch.rpm yum -y install https://kojipkgs.fedoraproject.org//packages/pytest/3.0.3/1.fc26/noarch/python3-pytest-3.0.3-1.fc26.noarch.rpm https://kojipkgs.fedoraproject.org//packages/python-py/1.4.31/3.fc24/noarch/python3-py-1.4.31-3.fc24.noarch.rpm # python3-setuptools rpm -i https://kojipkgs.fedoraproject.org//packages/python-setuptools/28.6.0/1.fc26/src/python-setuptools-28.6.0-1.fc26.src.rpm rpmbuild -D 'with_python3 1' -D 'python3_other_pkgversion 3' -D '__python3 /usr/bin/python3.5' -D 'fedora 1' -bb python-setuptools.spec # python3-pip rpm -i https://kojipkgs.fedoraproject.org//packages/python-pip/8.1.2/4.fc26/noarch/python3-pip-8.1.2-4.fc26.noarch.rpm rpmbuild -D 'rhel 8' -D 'python3_other_pkgversion 3' -D '__python3 /usr/bin/python3.5' -ba python-pip.spec
Change back python3.spec to:
%global with_rewheel 1
And now rebuild python3 again:
rpmbuild -ba python3.spec
After the build finishes we have the RPMs in ~/rpmbuild/RPMS:
# find rpmbuild/RPMS/ rpmbuild/RPMS/ rpmbuild/RPMS/noarch rpmbuild/RPMS/noarch/python3-pip-8.1.2-4.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python2-pip-8.1.2-4.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python-srpm-macros-3-11.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python-rpm-macros-3-11.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python2-rpm-macros-3-11.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python3-rpm-macros-3-11.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python2-setuptools-28.6.0-1.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python3-setuptools-28.6.0-1.el7.centos.noarch.rpm rpmbuild/RPMS/x86_64 rpmbuild/RPMS/x86_64/python3-test-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-tools-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-debuginfo-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-libs-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/system-python-libs-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-devel-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-debug-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-tkinter-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/system-python-3.5.2-6.el7.centos.x86_64.rpm
Exit the chroot and install the newly build python 3.5 packages :
yum install rpmbuild/RPMS/x86_64/python3-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-libs-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/system-python-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/system-python-libs-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-devel-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-tools-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/x86_64/python3-tkinter-3.5.2-6.el7.centos.x86_64.rpm rpmbuild/RPMS/noarch/python3-setuptools-28.6.0-1.el7.centos.noarch.rpm rpmbuild/RPMS/noarch/python3-pip-8.1.2-4.el7.centos.noarch.rpm