CentOS7で特定バージョンOSのリポジトリを参照する

CentOS7にて微妙に古いバージョンをマイナーが変わらない範囲で最新化したい案件がでてきたので、その時の対応をメモ書き程度に残しておきます。

[RHEL7系 基本セットアップ](https://qiita.com/SkyLaptor/items/1036d470c2d4117b9954)では、マイナー指定の際に`# yum update --releasever=7.X`として意図しないマイナーアップをしないようにすると記載していたのですが、最近になって出来なくなっていました。恐らくCentOS8がリリースされ、古いマイナーリポジトリは廃止となったのではないかと考えられます。

## 旧マイナーバージョンのリポジトリを有効化
CentOSのコミュニティには、旧バージョンのCentOSを保管している [CentOS Vault](http://vault.centos.org/) というサイトがあります。ここに向けたリポジトリを設定してあげることで、マイナーバージョンのままyumを利用できるようにします。

### リポジトリファイルの作成
旧マイナーに向けたリポジトリファイルを作成します。ここでは`7.6.1810`を指定していますが、自身の環境に合わせて変更すれば対応可能です。

```:/etc/yum.repos.d/CentOS-7.6.1810.repo
[centos7.6.1810-base]
name=CentOS-7.6.1810 - Base
baseurl=http://vault.centos.org/7.6.1810/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[centos7.6.1810-updates]
name=CentOS-7.6.1810 - Updates
baseurl=http://vault.centos.org/7.6.1810/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[centos7.6.1810-extras]
name=CentOS-7.6.1810 - Extras
baseurl=http://vault.centos.org/7.6.1810/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[centos7.6.1810-centosplus]
name=CentOS-7.6.1810 - Plus
baseurl=http://vault.centos.org/7.6.1810/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[centos7.6.1810-fasttrack]
name=CentOS-7.6.1810 - Fasttrack
baseurl=http://vault.centos.org/7.6.1810/fasttrack/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
```

### デフォルトのリポジトリを無効化
旧リポジトリを用意しただけではまだ最新リポジトリが使えてしまいます。
最新リポジトリファイル(`/etc/yum.repos.d/CentOS-Base.repo`)以下の修正を行うことで利用できないようにします。

以下は`[base]`セクションのみ記載していますが、他の`[updates]`,`[extras]`及び`[centosplus]`も同様に最後の行に`enabled=0`を付け加えます。

```:/etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=0     ← 追記
```


### リポジトリが認識されているか確認
`yum repolist all`を実行することで、登録されているリポジトリと有効か無効かを確認可能です。
最新リポジトリを無効化しているため、他のリポジトリを登録していない限り以下の様な結果が表示されるかと思われます。

```shell:
# yum repolist all
リポジトリー ID                     リポジトリー名                  状態
base/7/x86_64                       CentOS-7 - Base                 無効
base-debuginfo/x86_64               CentOS-7 - Debuginfo            無効
base-source/7                       CentOS-7 - Base Sources         無効
c7-media                            CentOS-7 - Media                無効
centos7.6.1810-base/x86_64          CentOS-7.6.1810 - Base          有効: 10,019
centos7.6.1810-centosplus/x86_64    CentOS-7.6.1810 - Plus          有効:    103
centos7.6.1810-extras/x86_64        CentOS-7.6.1810 - Extras        有効:    435
centos7.6.1810-fasttrack/x86_64     CentOS-7.6.1810 - Fasttrack     有効:     67
centos7.6.1810-updates/x86_64       CentOS-7.6.1810 - Updates       有効:  2,500
centosplus/7/x86_64                 CentOS-7 - Plus                 無効
centosplus-source/7                 CentOS-7 - Plus Sources         無効
...省略
```

## アップデート実施
旧マイナーリポジトリが準備できましたので、あとは普通にアップデートを実施できます。

```shell:
# yum update
```


## 最新版でのアップデート実施
マイナーやカーネルは上げたくないけど、`nss`や`openssl`といった一部のパッケージは最新にしたいという場合があります。その場合は、以下の様に`--enablerepo`オプションをつけることで、一時的に最新リポジトリを有効にすることができます。
なお、必ず`-y`オプションは付けず、依存関係を確認して問題が無いことを確認してからインストールを実施して下さい。パッケージによってはカーネルに依存しているものもあり、最新になってしまう場合があります。

```shell:
# yum --enablerepo=base update openssl
```