Thursday, May 11, 2017

Build Git RPM on CentOS 7

I want to use core.hooksPath which is supported since Git 2.9, but the default Git version of CentOS 7.3 is still 1.8.3:
$ yum list git
Available Packages
git.x86_64                                       base
I have to compile from the source by myself. It is not hard to find bunch of blogs explain how to do it. For example, However, the method mentioned in those blogs is not what I want, a docker image based on centos:7 with the latest Git version. There are questions I don’t know the answers:
  • How can I clean up those required build tools like gcc? I don’t want a larger image size.
  • How can I install Git manuals? I could not remember all commands and parameters. It will be handy to reference by just typing git help xxx.
I believe the clean way is to build Git in RPM and install Git using RPM in my docker image. Sounds easy, but the first problem I had was where to get .spec to build RPM. The Git source code doesn’t have a RPM spec file. I finally found the spec from Redhat. But it is not easy like Gradle or Maven when you build from a RPM spec. You have to know the tools to pull the dependencies. Finally, my method is actually pretty simple after I figured it out all of steps because I made it in a dockerfile. Here are what I did:
  • I created a docker image git-rpm, which builds Git 2.12.2 in RPMs.
  • When running git-rpm in a container, a yum repository server starts.
  • When I build the docker image, I just simply put the local yum repository for Git, and call yum install -y git.
  • For centos:7, the default configuration turns off the manual installation tsflags=nodocs. I need to turn it on using yum --setopt tsflags='' -y install git.
If you want to get those RPMs from docker and put them to a yum repository, you can run docker cp
FROM centos:7

LABEL name="Latest version Git RPM on CentOS 7" \

RUN yum install -y \
    git rpm-build rpmdevtools make gcc \
    asciidoc xmlto desktop-file-utils emacs expat-devel gettext gnupg2 \
    curl-devel libsecret-devel pcre-devel perl-generators perl openssl-devel \
    zlib-devel pkgconfig bash-completion systemd python libgnome-keyring-devel \
    perl-ExtUtils-MakeMaker \
    createrepo httpd \
    && yum clean all

RUN cd /root \
    && git clone \
    && cd /root/git \
    && git checkout f26 \
    && rpmdev-setuptree \
    && cp /root/git/* /root/rpmbuild/SOURCES \
    && cd /root/rpmbuild/SOURCES \
    && spectool -g git.spec \
    && rpmbuild -bb git.spec 

RUN mkdir /var/lib/git-repo \
    && cp -R /root/rpmbuild/RPMS/* /var/lib/git-repo \
    && createrepo /var/lib/git-repo \
    && ln -s /var/lib/git-repo /var/www/html

CMD [ "/usr/sbin/apachectl", "-DFOREGROUND" ]

1 comment:

  1. Hi,

    is there any chance to get a look on your Docker file?
    Thanks, KirK