CentOS is a great operating system, but recent versions of software packages is not one of its virtues. For example the current CentOS 7.2 ships with git version 1.8.3 released 2013, almost 3 years ago. And by that time git gained quite some useful features. So lets see how to build RPMs with latest git.
RPM build chroot
First thing is to make a chroot where to build the RPM, because there are a lot of dependencies required for building, which needs to be cleaned up afterwards. Much easier is to just delete the whole chroot dir 
First lets create the chroot directory and initialize the rpm database :
rpm --root=/root/buildroot --rebuilddb
mkdir /root/buildroot
rpm --root=/root/buildroot --rebuilddb
mkdir /root/buildroot
rpm --root=/root/buildroot --rebuilddb
Next install the latest centos-release package and yum inside :
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://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://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
Next we continue inside the chroot. Lucky us, systemd-nspawn makes it trivial to work inside the chroot :
systemd-nspawn -D /root/buildroot/
systemd-nspawn -D /root/buildroot/
systemd-nspawn -D /root/buildroot/
Building RPMs
Next we need to install gcc, and few other packages that are needed to compile RPMs .
yum install make gcc perl-ExtUtils-MakeMaker rpmdevtools curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install make gcc perl-ExtUtils-MakeMaker rpmdevtools curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install make gcc perl-ExtUtils-MakeMaker rpmdevtools curl-devel expat-devel gettext-devel openssl-devel zlib-devel
And now we need a git SRPM to build. We can just grab the Fedora one which has git 2.7.1. Here https://apps.fedoraproject.org/packages/git/overview/ are all Fedora builds, and I picked the Rawhide version. Clicking on it takes us to a page with build information and there is also a link to download the SRPM for this build. Lets install it :
rpm -i https://kojipkgs.fedoraproject.org//packages/git/2.7.1/1.fc24/src/git-2.7.1-1.fc24.src.rpm
rpm -i https://kojipkgs.fedoraproject.org//packages/git/2.7.1/1.fc24/src/git-2.7.1-1.fc24.src.rpm
rpm -i https://kojipkgs.fedoraproject.org//packages/git/2.7.1/1.fc24/src/git-2.7.1-1.fc24.src.rpm
You can just ignore the warning about missing users. Go to SPECS directory and try to build the RPMs:
error: Failed build dependencies:
asciidoc >= 8.4.1 is needed by git-2.7.1-1.el7.centos.x86_64
xmlto is needed by git-2.7.1-1.el7.centos.x86_64
desktop-file-utils is needed by git-2.7.1-1.el7.centos.x86_64
emacs is needed by git-2.7.1-1.el7.centos.x86_64
libgnome-keyring-devel is needed by git-2.7.1-1.el7.centos.x86_64
pkgconfig(bash-completion) is needed by git-2.7.1-1.el7.centos.x86_64
cd rpmbuild/SPECS/
rpmbuild -ba git.spec
error: Failed build dependencies:
asciidoc >= 8.4.1 is needed by git-2.7.1-1.el7.centos.x86_64
xmlto is needed by git-2.7.1-1.el7.centos.x86_64
desktop-file-utils is needed by git-2.7.1-1.el7.centos.x86_64
emacs is needed by git-2.7.1-1.el7.centos.x86_64
libgnome-keyring-devel is needed by git-2.7.1-1.el7.centos.x86_64
pkgconfig(bash-completion) is needed by git-2.7.1-1.el7.centos.x86_64
cd rpmbuild/SPECS/
rpmbuild -ba git.spec
error: Failed build dependencies:
asciidoc >= 8.4.1 is needed by git-2.7.1-1.el7.centos.x86_64
xmlto is needed by git-2.7.1-1.el7.centos.x86_64
desktop-file-utils is needed by git-2.7.1-1.el7.centos.x86_64
emacs is needed by git-2.7.1-1.el7.centos.x86_64
libgnome-keyring-devel is needed by git-2.7.1-1.el7.centos.x86_64
pkgconfig(bash-completion) is needed by git-2.7.1-1.el7.centos.x86_64
Ok, we need to install some dependencies to be able to build. Lets just install them:
yum install asciidoc xmlto desktop-file-utils emacs libgnome-keyring-devel pkgconfig bash-completion
yum install asciidoc xmlto desktop-file-utils emacs libgnome-keyring-devel pkgconfig bash-completion
yum install asciidoc xmlto desktop-file-utils emacs libgnome-keyring-devel pkgconfig bash-completion
and run rpmbuild again:
rpmbuild -ba git.spec
After the build finishes we have the RPMs in ~/rpmbuild/RPMS:
./noarch/gitweb-2.7.1-1.el7.centos.noarch.rpm
./noarch/gitk-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-email-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-gui-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-cvs-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-p4-2.7.1-1.el7.centos.noarch.rpm
./noarch/perl-Git-SVN-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-all-2.7.1-1.el7.centos.noarch.rpm
./noarch/perl-Git-2.7.1-1.el7.centos.noarch.rpm
./x86_64/git-core-doc-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-svn-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-core-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-daemon-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-debuginfo-2.7.1-1.el7.centos.x86_64.rpm
cd ~/rpmbuild/RPMS/
find
.
./noarch
./noarch/gitweb-2.7.1-1.el7.centos.noarch.rpm
./noarch/gitk-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-email-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-gui-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-cvs-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-p4-2.7.1-1.el7.centos.noarch.rpm
./noarch/perl-Git-SVN-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-all-2.7.1-1.el7.centos.noarch.rpm
./noarch/perl-Git-2.7.1-1.el7.centos.noarch.rpm
./x86_64
./x86_64/git-core-doc-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-svn-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-core-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-daemon-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-debuginfo-2.7.1-1.el7.centos.x86_64.rpm
cd ~/rpmbuild/RPMS/
find
.
./noarch
./noarch/gitweb-2.7.1-1.el7.centos.noarch.rpm
./noarch/gitk-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-email-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-gui-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-cvs-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-p4-2.7.1-1.el7.centos.noarch.rpm
./noarch/perl-Git-SVN-2.7.1-1.el7.centos.noarch.rpm
./noarch/git-all-2.7.1-1.el7.centos.noarch.rpm
./noarch/perl-Git-2.7.1-1.el7.centos.noarch.rpm
./x86_64
./x86_64/git-core-doc-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-svn-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-core-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-daemon-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-2.7.1-1.el7.centos.x86_64.rpm
./x86_64/git-debuginfo-2.7.1-1.el7.centos.x86_64.rpm
Exit the chroot and install the following packages for a minimal git installation:
yum install buildroot/root/rpmbuild/RPMS/x86_64/git-2.7.1-1.el7.centos.x86_64.rpm buildroot/root/rpmbuild/RPMS/x86_64/git-core-* buildroot/root/rpmbuild/RPMS/noarch/perl-Git-2.7.1-1.el7.centos.noarch.rpm
yum install buildroot/root/rpmbuild/RPMS/x86_64/git-2.7.1-1.el7.centos.x86_64.rpm buildroot/root/rpmbuild/RPMS/x86_64/git-core-* buildroot/root/rpmbuild/RPMS/noarch/perl-Git-2.7.1-1.el7.centos.noarch.rpm
yum install buildroot/root/rpmbuild/RPMS/x86_64/git-2.7.1-1.el7.centos.x86_64.rpm buildroot/root/rpmbuild/RPMS/x86_64/git-core-* buildroot/root/rpmbuild/RPMS/noarch/perl-Git-2.7.1-1.el7.centos.noarch.rpm
Not, so bad
Next time I will check how to create a repository .
Like this:
Like Loading...
FYI, there were some updates to the build process on 2.21 that required installing epel-rpm-macros before building.
The error I got was:
“cc: error: %{build_cflags}: No such file or directory”
https://src.fedoraproject.org/rpms/git/c/95fc1fa70e0f38fb3ef9c1610a388157582c5ad2
If you don’t need to make any modifications to the spec or source from the srpm you can also do:
wget http://example.com/git.src.rpm
rpmbuild –rebuild git.src.rpm
I knew it there is shorter way for the last step
I just didn’t feel like searching for it .