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                        1.8.3.1-6.el7_2.1                         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, https://www.howtoforge.com/how-to-install-the-latest-git-version-on-centos. 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" \
      group="com.napster.bi"

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 http://pkgs.fedoraproject.org/cgit/rpms/git.git \
    && 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

    ReplyDelete