パラボラアンテナと星の日記

あることないこと

gitのバージョンを2.2.1にする CoreOSで

CoreOSでも好きなバージョンのgitを入れる

手元のvagrant-coreosを使うと
gitのバージョンは1.8.3.2、

さっきVultrでCoreOS(alpha)をインストールすると
gitのバージョンは2.0.4でした。

gitの最新版は2.0.5も出ています。
CoreOSはほっとけばOSが勝手にアップデートするという設定もあるので、
意識することはないのですが、gitの最新版を手で入れてみます。

CoreOSだけでgitをビルドするのはつらいので、
コンテナの中でdebianを動かしてgitをビルドし、それを外側にもってくることで
簡単にgitの最新バージョンを手に入れることができます。
そういうdocker imageを上げておいた。

追記

あ、vagrantじゃないcoreosでは動かなかった、、原因調べる done

方法

$ docker run --rm -v /opt/bin:/target hoshinotsuyoshi/git2.2.1-on-coreos

注意:/optを汚します(CoreOSはデフォルトだと/optディレクトリはないはずだが)

こうすると/opt/bin/に最新のgitが置かれるので、PATHの優先順を変えれば最新のgitが使えます。

Dockerfileはこんなかんじ。

FROM debian:jessie
RUN apt-get update && \
    apt-get -y install libcurl4-gnutls-dev libexpat1-dev gettext \
      libz-dev libssl-dev wget build-essential zlib1g-dev && \
    export DIR=/opt && \
    mkdir -p $DIR/source && \
    cd $DIR/source && \
    wget "https://www.kernel.org/pub/software/scm/git/git-2.2.1.tar.gz" && \
    tar xzvf git-2.2.1.tar.gz 

RUN export DIR=/opt && \
    cd $DIR/source/git-2.2.1 && \
    ./configure --prefix=$DIR/git-2.2.1-static CFLAGS="${CFLAGS} -static" NO_OPENSSL=1 NO_CURL=1 && \
    make && \
    make install

RUN echo '#!/bin/sh\n\
if mountpoint -q /target; then\n\
    echo "Installing git to /target"\n\
    cp /opt/git-2.2.1-static/bin/git /target/git\n\
else\n\
    echo "/target is not a mountpoint."\n\
    echo "- re-run this with -v /opt/bin:/target"\n\
fi\n\
' > /install.sh && \
    chmod +x /install.sh

CMD /install.sh


hoshinotsuyoshi/git2.2.1-on-coreos · GitHub


それでいいのか感はあるが、かんたん。


なんかimageのサイズが大きかったので、終わった後は消したほうがいいかも

$ docker rmi hoshinotsuyoshi/git2.2.1-on-coreos