[CentOS7] yum update で php 関連のエラーが発生

# アップデートでエラーが発生

久しぶりにアップデート作業を行うと以下のエラーが発生。

```shell
$ sudo yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                    | 8.3 kB  00:00:00     
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * nux-dextop: mirror.li.nux.ro
 * remi-safe: ftp.riken.jp
 * updates: ftp.riken.jp
base                                                                                    | 3.6 kB  00:00:00     
epel                                                                                    | 4.7 kB  00:00:00     
extras                                                                                  | 2.9 kB  00:00:00     
mariadb                                                                                 | 3.4 kB  00:00:00     
nux-dextop                                                                              | 2.9 kB  00:00:00     
remi-safe                                                                               | 3.0 kB  00:00:00     
updates                                                                                 | 2.9 kB  00:00:00     
(1/3): epel/x86_64/updateinfo                                                           | 1.1 MB  00:00:00     
(2/3): remi-safe/primary_db                                                             | 2.2 MB  00:00:00     
(3/3): epel/x86_64/primary_db                                                           | 7.0 MB  00:00:01     
Resolving Dependencies
--> Running transaction check
---> Package ImageMagick6-libs.x86_64 0:6.9.12.55-1.el7.remi will be updated
---> Package ImageMagick6-libs.x86_64 0:6.9.12.56-1.el7.remi will be an update
---> Package gd-last.x86_64 0:2.3.3-2.el7.remi will be obsoleted
--> Processing Dependency: gd-last(x86-64) >= 2.1.1 for package: php-gd-7.4.23-1.el7.remi.x86_64
--> Processing Dependency: libgd.so.3()(64bit) for package: php-gd-7.4.23-1.el7.remi.x86_64
---> Package gd3php.x86_64 0:2.3.3-7.el7.remi will be obsoleting
--> Finished Dependency Resolution
Error: Package: php-gd-7.4.23-1.el7.remi.x86_64 (@remi-php74)
           Requires: libgd.so.3()(64bit)
           Removing: gd-last-2.3.3-2.el7.remi.x86_64 (@remi-safe)
               libgd.so.3()(64bit)
           Obsoleted By: gd3php-2.3.3-7.el7.remi.x86_64 (remi-safe)
              ~libgd.so.103()(64bit)
Error: Package: php-gd-7.4.23-1.el7.remi.x86_64 (@remi-php74)
           Requires: gd-last(x86-64) >= 2.1.1
           Removing: gd-last-2.3.3-2.el7.remi.x86_64 (@remi-safe)
               gd-last(x86-64) = 2.3.3-2.el7.remi
           Obsoleted By: gd3php-2.3.3-7.el7.remi.x86_64 (remi-safe)
               Not found
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

『Obsoleted By: gd3php-2.3.3-7.el7.remi.x86_64』のメッセージが気になります。
gd3php が廃止された？
何か情報が古くなってるのでしょうか。



# 対処方法

## 最初に

--skip-broken オプションを付けて yum update を再実行してみました。
結果は変わらず同エラー。

```shell
$ sudo yum update --bkip-broken
```

## 次に

エラーに出てた gd3php がどのリポジトリにあるかを確認してみます。
コマンドの出力結果から remi にあるようです。

```shell
$ yum list --enablerepo=remi,epel gd3php
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp-srv2.kddilabs.jp
 * nux-dextop: mirror.li.nux.ro
 * remi: ftp.riken.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp-srv2.kddilabs.jp
Installed Packages
gd3php.x86_64                                      2.3.3-7.el7.remi                                       @remi
```

となると remi リポジトリの設定をまずは確認です。
リポジトリファイルを grep すると enabled が 0 となっておりデフォルト無効でした。
つまり普通にオプション無しで yum を使うと remi は対象外になります。


```shell
$ grep enabled /etc/yum.repos.d/remi.repo   
enabled=0
```

yum のオプションに --enablerepo を指定し remi リポジトリを有効化、その後アップデート実行。
しかしエラーは改善されず。

```shell
$ sudo yum update --enablerepo=remi
```

remi リポジトリは複数あるため、リポジトリ名 remi の後ろにワイルドカード付けて再実行。
結果はようやくアップデート成功！

```shell
$ sudo yum update --enablerepo=remi*
```

# 結論

必要に応じてアップデート時にも --enablerepo オプションを付け、外部リポジトリの有効化をしましょう。