プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2018/07/17

Redmine の Docker イメージの Git を最新バージョンにする

event_note2018/07/17 2:05

Redmine の公式の Docker イメージにインストールされている Git のバージョンが古かったので、最新にアップデートしました。

以下、Docker コンテナの中で作業を行います。

例えば、以下のようにして Docker コンテナに入ります。

docker exec -it redmine bash

Git のバージョンの確認

まずはインストールされている Git のバージョンを確認します。

# git --version
git version 2.1.4

現時点では、2.1.4 がインストールされていましたが、最新は 2.18.0 です。
Git の最新バージョンはこちらで確認できます。

ディストリビューションの把握

Redmine の Docker イメージのベースとなっている Linux ディストリビューションを把握します。

debian_version というファイルがあったので、debian のようです。

# cat debian_version
8.10

Git のアップデート

apt-get でアップデートしますが、試してもバージョンは変わりませんでした。
どうやら debian のリポジトリは古いそうなので、リポジトリを追加してアップデートを行います。

尚、add-apt-repository が見つからないエラーが表示された場合、

bash: add-apt-repository: command not found

software-properties-common というパッケージをインストールします。

尚、先に apt-get update を行っていないと、apt-file がインストールできませんでした。

ソースコードからインストールする

私の場合、上記の操作を行っても、バージョンが 2.1.4 から変わりませんでした。

仕方がないので、ソースコードをビルドしてからインストールします。
方法は以下で説明されています。

以下、細かい部分を補足します。

リポジトリのアップデート

まずはリポジトリのアップデートを行います。

> apt-get update

ソースコードのダウンロード

git で git のソースコードをダウンロードします。

> git clone https://github.com/git/git.git
> cd git

ビルド

公式に従って必要なライブラリをインストールします。

> apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

make がないのでインストールします。

> apt-get install make

公式の通りに make を実行しますが、以下のエラーが表示されました。

# make prefix=/usr/local all
GIT_VERSION = 2.18.0.129.ge333175
    * new build flags
    CC credential-store.o
/bin/sh: 1: cc: not found
Makefile:2261: recipe for target 'credential-store.o' failed
make: *** [credential-store.o] Error 127

公式とマシンが異なるので、インストールに必要なパッケージが異なっているのが原因のようです。

以下をインストールします。

> apt-get install gcc libextutils-makemaker-cpanfile-perl

再度 make を実行すればインストールできました。

> make prefix=/usr/local all
> make prefix=/usr/local install

尚、一度 docker コンテナを再起動しないと、git のバージョンが最新になっていませんでした。