CentOS7でYumを使って最新版gitを導入する

CentOSでは普通にYumでインストールされるgitのバージョンは1.8.3あたりと、かなり古いものになっています。
やっぱり最新版使いたいよな～ でもソースからビルドするのは嫌だしな～ といった感じで、**どうにかしてYumでgitの最新版をインストールする**というのが目的です。

# 概要

## 環境

CentOS 7.8

## 手順

正直コレも結果論ですが、以下の手順で最新版がインストールできます。

1. 1.x系のgitをアンインストールする
2. gitの最新版パッケージが登録されている「IUSリポジトリ」をインストール（登録）する
3. IUSリポジトリにない依存関係のパッケージを手動でインストールする
4. IUSリポジトリからgitの最新版をインストールする

## 結果論

時間のない方向けで、説明を全て省略した形です。
こんな感じでコマンドを叩くとインストールできました。

```
$ sudo yum -y remove git
$ sudo yum -y install https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum install libsecret pcre2
$ sudo yum -y install git --enablerepo=ius --disablerepo=base,epel,extras,updates
``` 

# 結果に至るまでの紆余曲折の流れ

ここからが本題になります。
トラブルシューティング的な意味での参考になるかもなので、お時間があればご覧ください。

## 普通にやるとどうなるのか

（予め`yum update`は走らせてあるという前提で）、まずはgitのバージョンを調べてみます。

```
$ git --version
git version 1.8.3.1
```

gitのバージョン2.0が公開されたのは2014年5月らしいので、1.8.3.1とか一体いつのバージョンだよ…

僅かな希望を抱いてアップデートがないか調べてみます。

```
$ yum info git
Name        : git
Arch        : x86_64
Version     : 1.8.3.1
Release     : 23.el7_8
Size        : 22 M
Repo        : installed
From repo   : updates
Summary     : Fast Version Control System
URL         : http://git-scm.com/
License     : GPLv2
Description : Git is a fast, scalable, distributed revision control system with an
            : unusually rich command set that provides both high-level operations
            : and full access to internals.
            :
            : The git rpm installs the core tools with minimal dependencies.  To
            : install all git packages, including tools for integrating with other
            : SCMs, install the git-all meta-package.
```

僅かな希望は一瞬にして打ち砕かれた。

## IUSリポジトリの導入

[gitの公式ドキュメント](https://git-scm.com/download/linux)によると、**IUS**というリポジトリを使えばいいとのこと。
[IUSの公式ドキュメント](https://ius.io/setup)を閲覧したところ、次のようにしてIUSのリポジトリを読み込むらしい。

```
yum install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
```

ということで、言われた通りにインストールする。

```
$ sudo yum -y install https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
```

IUSに関しては、デフォルトで使用するリポジトリから外すなどした方が良いらしいんですが、私の環境では最初から`enabled=1`になっていたので割愛します。


## IUSリポジトリからgitをインストール(しようと)する

IUSのリポジトリを使用すると明示した上で、gitをインストールします。
また、旧バージョンのgitが選択されるのを防ぐため、IUS以外の（デフォルトの）リポジトリは使用しないと明示します。

ここで使用する引数がこちら

- --enablerepo=[リポジトリ名] 使用するリポジトリを指定（デフォルトで使用するリポジトリでないときコマンドで指定する）
- --disablerepo=[リポジトリ名] 使用しないリポジトリを指定（デフォルトで使用されるリポジトリを除きたいときコマンドで指定する）

```
$ sudo yum -y install git --enablerepo=ius --disablerepo=base,epel,extras,updates
Resolving Dependencies
--> Running transaction check
---> Package git224.x86_64 0:2.24.2-1.el7.ius will be installed
--> Processing Dependency: perl-Git = 2.24.2-1.el7.ius for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: git-core-doc = 2.24.2-1.el7.ius for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: git-core = 2.24.2-1.el7.ius for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: perl(Git::I18N) for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: perl(Git) for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: libsecret-1.so.0()(64bit) for package: git224-2.24.2-1.el7.ius.x86_64
--> Running transaction check
---> Package git224.x86_64 0:2.24.2-1.el7.ius will be installed
--> Processing Dependency: libsecret-1.so.0()(64bit) for package: git224-2.24.2-1.el7.ius.x86_64
---> Package git224-core.x86_64 0:2.24.2-1.el7.ius will be installed
--> Processing Dependency: libpcre2-8.so.0()(64bit) for package: git224-core-2.24.2-1.el7.ius.x86_64
---> Package git224-core-doc.noarch 0:2.24.2-1.el7.ius will be installed
---> Package git224-perl-Git.noarch 0:2.24.2-1.el7.ius will be installed
--> Finished Dependency Resolution
Error: Package: git224-2.24.2-1.el7.ius.x86_64 (ius)
           Requires: libsecret-1.so.0()(64bit)
Error: Package: git224-core-2.24.2-1.el7.ius.x86_64 (ius)
           Requires: libpcre2-8.so.0()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

…コケた

## 依存関係の解決

気を取り直してエラーを読むと、どうやら`libsecret-1.so.0()`と`libpcre2-8.so.0()`の依存関係が解決できないらしい。
IUSのリポジトリにないだけで、デフォルトのリポジトリにはあると信じてこれらをインストールしてみます。

~~エラー文が長くなるだけなので~~詳細は省きますが、リポジトリに関する引数無しで`git224`のインストールを叩くと、git本体はIUSのリポジトリから、その他依存関係のパッケージはデフォルトのリポジトリからという形で、必要なパッケージ一覧を表示できます。
宗教上の問題で`git`というパッケージ名でインストールしたいので、ここではインストールを取りやめます。

どうやら、必要なパッケージは`libsecret`と`pcre2`のようです。
`libpcre2-8.so.0()`のパッケージ名は`libpcre2`じゃなくて`pcre2`だったのか… （数十分溶かしました）

```
$ sudo yum install libsecret pcre2
```

これで依存関係は解決できた（はずな）ので、再度IUSのリポジトリからgitをインストールしようと試みます。

```
$ sudo yum -y install git --enablerepo=ius --disablerepo=base,epel,extras,updates
Resolving Dependencies
--> Running transaction check
---> Package git224.x86_64 0:2.24.2-1.el7.ius will be installed
--> Processing Dependency: perl-Git = 2.24.2-1.el7.ius for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: git-core-doc = 2.24.2-1.el7.ius for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: git-core = 2.24.2-1.el7.ius for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: perl(Git::I18N) for package: git224-2.24.2-1.el7.ius.x86_64
--> Processing Dependency: perl(Git) for package: git224-2.24.2-1.el7.ius.x86_64
--> Running transaction check
---> Package git224-core.x86_64 0:2.24.2-1.el7.ius will be installed
---> Package git224-core-doc.noarch 0:2.24.2-1.el7.ius will be installed
---> Package git224-perl-Git.noarch 0:2.24.2-1.el7.ius will be installed
--> Finished Dependency Resolution

Dependencies Resolved
```

無事インストールできました。
最後に念の為gitのバージョンを確認します。

```
$ git --version
git version 2.24.2
```

ということで無事gitの最新版をインストールできました。

# 参考文献

[Git](https://git-scm.com/download/linux)
[IUS - Setup](https://ius.io/setup)
[yumでGitの最新版をLinuxにインストールする](https://qiita.com/suke/items/ee0033a2ee9e68eee13e)
[さくらVPS Cent OS7.7 でGitを最新バージョンに上げた](https://qiita.com/tears-aya/items/31ffa2607bf75a415df2)