モチベーション
yum でインストールできる Git はとても古いので、ソースコードからインストールした。
でも更新とか面倒くさいので、 yum を使いたい。
検証環境
- OS: macOS High Sierra (10.13.1)
- Vagrant: 2.0.1
- Virtualbox: 5.2.0 r118431
前提
ソースコードから Git をインストールした時の手順
必要なパッケージをインストールする
$ yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
wgetが入っていない場合はインストールする
$ yum install -y wget
ソースコードをダウンロードする
$ cd /usr/local/src/
$ wget <git url>
$ tar xzvf git-2.15.0.tar.gz
Git をインストールする
$ cd git-2.15.0
$ make prefix=/usr/local all
$ make prefix=/usr/local install
tar.gz を削除する
$ rm -rf git-2.15.0.tar.gz
ソースコードからインストールした Git を削除する
1. DESTDIR を指定して Git をインストールする(インストール先は任意)
!削除したい Git のインストール時と同じ設定にする(prefix, exec-prefix 等)
※ 手元では make all は実行しなくても大丈夫でした
$ mkdir /var/tmp/git
$ make prefix=/usr/local DESTDIR=/var/tmp/git all
$ make prefix=/usr/local DESTDIR=/var/tmp/git install
2. 対象ファイルをリストアップして削除する
$ find /var/tmp/git -type f -printf '/%P\n' | xargs -n 10 rm -f
補足1: find について
%P: コマンドライン引き数で指定された部分を除いて、ファイル名を印字する
\n: 改行
-printf なし
/var/tmp/git/usr/local/bin/git
/var/tmp/git/usr/local/bin/git-upload-pack
/var/tmp/git/usr/local/bin/git-shell
/var/tmp/git/usr/local/bin/git-cvsserver
(以下略)
-printf '/%P'
/usr/local/bin/git/usr/local/bin/git-upload-pack/usr/local/bin/git-shell/usr/local/bin/git-cvsserver/(以下略)
-printf '/%P\n'
/usr/local/bin/git
/usr/local/bin/git-upload-pack
/usr/local/bin/git-shell
/usr/local/bin/git-cvsserver
(以下略)
補足2: xargs について
-n MAX-ARGS: コマンドライン1つにつき最大MAX-ARGS個の引数を使用する
$ echo 'foo bar baz' | xargs -n 1 echo
foo
bar
baz
$ echo 'foo bar baz' | xargs -n 2 echo
foo bar
baz
3. 対象ディレクトリをリストアップして削除する
※ 手元ではこの手順は飛ばしました
$ find /var/tmp/git -type d -printf '/%P\n'
※ 下記のように削除してはいけないディレクトリも出力に含まれているため、自分で取捨選択をする必要があります
/
/usr
/usr/local
/usr/local/bin
/usr/local/libexec
/usr/local/libexec/git-core
(以下略)
4. yum から Git を削除する
ここで削除しておかないと、後続の git2u インストール時に下記のようなエラーが出たりします
※ 手順3.をちゃんとやっていれば必要ないかもしれません
Error: git2u-perl-Git conflicts with perl-Git-1.8.3.1-12.el7_4.noarch
yum から Git を削除
$ yum remove git
IUS リポジトリから Git をインストールする
1. IUS リポジトリを追加する
$ wget https://centos7.iuscommunity.org/ius-release.rpm
$ rpm -Uvh ius-release.rpm
rpm 実行時に下記のようなエラーがでたら
error: Failed dependencies:
epel-release = 7 is needed by ius-release-1.0-15.ius.centos7.noarch
epel-release を追加する
$ yum install -y epel-release
yum コマンド実行時の自動使用を無効にする(任意)
$ vi /etc/yum.repos.d/ius.repo
-----
[ius]
:(略)
enabled=1
↓変更
enabled=0
-----
ius リポジトリを指定して Git(git2u) をインストールする
$ yum --enablerepo=ius install -y git2u
確認
$ git --version
git version 2.14.3
もし、下記のようなエラーがでたら
-bash: /usr/local/bin/git: No such file or directory
hash コマンドで修正する
-r: ハッシュテーブルに記憶しているパス情報を消去する
-d: コマンド名: コマンド名に対応する記憶を削除する
$ type git
git is hashed (/usr/local/bin/git)
$ hash -r
or
$ hash -d git
$ type git
git is /usr/bin/git
参考
How to uninstall git installed from the source?