IBM i yum update エラー（gcc が古い時

5733-OPS が廃止された直後の頃から、IBMi(AS/400) に **yum** をインストールしていると、初期導入済み `gcc` が、現在の最新 `gcc` では廃止された依存ライブラリが、存在しているようで、 `yum update` or `yum upgrade` がエラーになり、上手いこといってくれない。今回はそんな時の対処法。

## TL;DR

```clle
# 念のためIFSをバックアップ
SAV DEV('/QSYS.lib/QGPL.lib/IFS_PKGS.file')
    OBJ(('/QOpenSys/pkgs'))
    SAVACT(*SYNC) CLEAR(*REPLACE) DTACPR(*YES)
```

```sh
# 手動で古いgccを削除
rpm -e --nodeps  gcc-c++-6.3.0-1.ppc
rpm -e --nodeps  gcc-cpp-6.3.0-1.ppc
rpm -e --nodeps  gcc-6.3.0-1.ppc
rpm -e --nodeps  libgcc-6.3.0-1.ppc
# 新しいgccを導入
yum install gcc
# パッケージを更新
yum update
```

## 現象

初期の頃に `yum` を導入している場合、おそらく `installed`（←コレ初期バンドルのパッケージ） になっている、`gcc` が古く、依存ライブラリ等が、削除されている関係等で上手く更新されないと思われる。

```sh
yum update
更新処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package gcc-aix.fat 0:6.3.0-25 will be 不要
---> Package gcc-cplusplus-aix.fat 0:6.3.0-25 will be 不要
---> Package gcc-cpp-aix.fat 0:6.3.0-25 will be 不要
---> Package gcc-gfortran-aix.fat 0:6.3.0-25 will be 不要
---> Package gcc6-aix.fat 0:6.3.0-29 will be obsoleting
---> Package gcc6-cplusplus-aix.fat 0:6.3.0-29 will be obsoleting
---> Package gcc6-cpp-aix.fat 0:6.3.0-29 will be obsoleting
---> Package gcc6-gfortran-aix.fat 0:6.3.0-29 will be obsoleting
---> Package gmp-aix.fat 0:5.1.3-13 will be 更新
---> Package gmp-aix.fat 0:5.1.3-14 will be an update
---> Package libgcc-aix.fat 0:6.3.0-25 will be 更新
---> Package libgcc-aix.fat 0:6.3.0-29 will be an update
---> Package libgcc_s1.ppc64 0:6.3.0-25 will be 更新
---> Package libgcc_s1.ppc64 0:6.3.0-29 will be an update
---> Package libmpc.ppc 0:1.0.3-1 will be 不要
--> 依存性の処理をしています: libmpc.a(libmpc.so.3) のパッケージ: gcc-cpp-6.3.0-1.ppc
--> 依存性の処理をしています: libmpc.a(libmpc.so.3) のパッケージ: gcc-c++-6.3.0-1.ppc
--> 依存性の処理をしています: libmpc >= 0.8.1 のパッケージ: gcc-cpp-6.3.0-1.ppc
--> 依存性の処理をしています: libmpc >= 0.8.1 のパッケージ: gcc-c++-6.3.0-1.ppc
---> Package libmpc-aix.fat 0:1.0.3-14 will be 更新
---> Package libmpc-aix.fat 0:1.0.3-15 will be obsoleting
---> Package libstdcplusplus-aix.fat 0:6.3.0-25 will be 更新
---> Package libstdcplusplus-aix.fat 0:6.3.0-29 will be an update
---> Package libstdcplusplus-devel.ppc64 0:6.3.0-25 will be 更新
---> Package libstdcplusplus-devel.ppc64 0:6.3.0-29 will be an update
---> Package libstdcplusplus6.ppc64 0:6.3.0-25 will be 更新
---> Package libstdcplusplus6.ppc64 0:6.3.0-29 will be an update
---> Package mpfr-aix.fat 0:3.1.2-12 will be 更新
---> Package mpfr-aix.fat 0:3.1.2-13 will be an update
--> 依存性解決を終了しました。
エラー: パッケージ: gcc-cpp-6.3.0-1.ppc (installed)
             要求: libmpc.a(libmpc.so.3)
            削除: libmpc-1.0.3-1.ppc (installed)
                libmpc.a(libmpc.so.3)
            次のものにより不要にされた: : libmpc-aix-1.0.3-15.fat (ibm)
                見つかりません
エラー: パッケージ: gcc-c++-6.3.0-1.ppc (installed)
             要求: libmpc.a(libmpc.so.3)
            削除: libmpc-1.0.3-1.ppc (installed)
                libmpc.a(libmpc.so.3)
            次のものにより不要にされた: : libmpc-aix-1.0.3-15.fat (ibm)
                見つかりません
エラー: パッケージ: gcc-c++-6.3.0-1.ppc (installed)
             要求: libmpc >= 0.8.1
            削除: libmpc-1.0.3-1.ppc (installed)
                libmpc = 1.0.3-1
            次のものにより不要にされた: : libmpc-aix-1.0.3-15.fat (ibm)
                見つかりません
エラー: パッケージ: gcc-cpp-6.3.0-1.ppc (installed)
             要求: libmpc >= 0.8.1
            削除: libmpc-1.0.3-1.ppc (installed)
                libmpc = 1.0.3-1
            次のものにより不要にされた: : libmpc-aix-1.0.3-15.fat (ibm)
                見つかりません
 問題を回避するために --skip-broken を用いることができません
** Found 34 pre-existing rpmdb problem(s), 'yum check' output follows:
figlet-2.2.5-1.ppc は次の要求が不足ています:  libc.a(shr.o)
gcc-6.3.0-1.ppc は次の要求が不足ています:  info
gcc-6.3.0-1.ppc は次の要求が不足ています:  /sbin/install-info
gcc-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm >= ('0', '7.1.0.0', None)
gcc-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm < ('0', '7.2.0.0', None)
gcc-6.3.0-1.ppc は次の要求が不足ています:  libc.a(shr.o)
gcc-6.3.0-1.ppc は次の要求が不足ています:  libiconv.a(shr4.o)
gcc-c++-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm >= ('0', '7.1.0.0', None)
gcc-c++-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm < ('0', '7.2.0.0', None)
gcc-c++-6.3.0-1.ppc は次の要求が不足ています:  libc.a(shr.o)
gcc-c++-6.3.0-1.ppc は次の要求が不足ています:  libiconv.a(shr4.o)
gcc-cpp-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm >= ('0', '7.1.0.0', None)
gcc-cpp-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm < ('0', '7.2.0.0', None)
gcc-cpp-6.3.0-1.ppc は次の要求が不足ています:  libc.a(shr.o)
gcc-cpp-6.3.0-1.ppc は次の要求が不足ています:  libiconv.a(shr4.o)
gmp-5.1.3-2.ppc は次の要求が不足ています:  libc.a(shr.o)
iperf-2.0.9-1.ppc は次の要求が不足ています:  libC.a(ansi_32.o)
iperf-2.0.9-1.ppc は次の要求が不足ています:  libC.a(shr.o)
iperf-2.0.9-1.ppc は次の要求が不足ています:  libc.a(shr.o)
iperf-2.0.9-1.ppc は次の要求が不足ています:  libpthreads.a(shr_comm.o)
iperf-2.0.9-1.ppc は次の要求が不足ています:  libpthreads.a(shr_xpg5.o)
libgcc-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm >= ('0', '7.1.0.0', None)
libgcc-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm < ('0', '7.2.0.0', None)
libgcc-6.3.0-1.ppc は次の要求が不足ています:  libc.a(shr.o)
libgcc-6.3.0-1.ppc は次の要求が不足ています:  libpthreads.a(shr_xpg5.o)
libmpc-1.0.3-1.ppc は次の要求が不足ています:  libc.a(shr.o)
libstdc++-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm >= ('0', '7.1.0.0', None)
libstdc++-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm < ('0', '7.2.0.0', None)
libstdc++-6.3.0-1.ppc は次の要求が不足ています:  libc.a(shr.o)
libstdc++-6.3.0-1.ppc は次の要求が不足ています:  libpthreads.a(shr_comm.o)
libstdc++-6.3.0-1.ppc は次の要求が不足ています:  libpthreads.a(shr_xpg5.o)
libstdc++-devel-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm >= ('0', '7.1.0.0', None)
libstdc++-devel-6.3.0-1.ppc は次の要求が不足ています:  AIX-rpm < ('0', '7.2.0.0', None)
mpfr-3.1.2-3.ppc は次の要求が不足ています:  libc.a(shr.o)
```

## 対処手順

`yum remove` で削除すると、依存しているパッケージが全て削除されしまうので、`rpm -e --nodeps` コマンドで依存関係を無視して、必要な分だけ手動で削除する。

①念のためIFSをバックアップ

```clle

SAV DEV('/QSYS.lib/QGPL.lib/IFS_PKGS.file')
    OBJ(('/QOpenSys/pkgs'))
    SAVACT(*SYNC) CLEAR(*REPLACE) DTACPR(*YES)
```

②次に古い`gcc`を手動で削除

```sh
rpm -e --nodeps  gcc-c++-6.3.0-1.ppc
rpm -e --nodeps  gcc-cpp-6.3.0-1.ppc
rpm -e --nodeps  gcc-6.3.0-1.ppc
rpm -e --nodeps  libgcc-6.3.0-1.ppc
```

③新しい`gcc`をインストール

```sh
yum install gcc
======================================================================================================================================================================
 パッケージ                                       アーキテクチャ                      バージョン                               リポジトリー                      容量
======================================================================================================================================================================
インストールしています:
 gcc                                              noarch                              6-2                                      ibm                              6.3 k
 gcc6-aix                                         fat                                 6.3.0-29                                 ibm                               25 M
     置き換えています  gcc-aix.fat 6.3.0-25
 gcc6-cplusplus-aix                               fat                                 6.3.0-29                                 ibm                              9.1 M
     置き換えています  gcc-cplusplus-aix.fat 6.3.0-25
 gcc6-cpp-aix                                     fat                                 6.3.0-29                                 ibm                              8.2 M
     置き換えています  gcc-cpp-aix.fat 6.3.0-25
 gcc6-gfortran-aix                                fat                                 6.3.0-29                                 ibm                              8.8 M
     置き換えています  gcc-gfortran-aix.fat 6.3.0-25
 libmpc-aix                                       fat                                 1.0.3-15                                 ibm                               63 k
     置き換えています  libmpc.ppc 1.0.3-1
依存性関連での更新をします。:
 gmp-aix                                          fat                                 5.1.3-14                                 ibm                              294 k
 libgcc-aix                                       fat                                 6.3.0-29                                 ibm                              189 k
 libstdcplusplus-aix                              fat                                 6.3.0-29                                 ibm                              3.3 M
 libstdcplusplus6                                 ppc64                               6.3.0-29                                 ibm                              3.3 M
 mpfr-aix                                         fat                                 3.1.2-13                                 ibm                              223 k

トランザクションの要約
======================================================================================================================================================================
インストール        6 Packages
Upgrade       5 Packages

総ダウンロード容量: 59 M
```

④パッケージを更新
```sh
yum update

======================================================================================================================================================================
 パッケージ                                         アーキテクチャ                     バージョン                              リポジトリー                      容量
======================================================================================================================================================================
更新:
 libgcc_s1                                          ppc64                              6.3.0-29                                ibm                              198 k
 libstdcplusplus-devel                              ppc64                              6.3.0-29                                ibm                              1.3 M

トランザクションの要約
======================================================================================================================================================================
Upgrade       2 Packages

総ダウンロード容量: 1.5 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
(1/2): libgcc_s1-6.3.0-29.ibmi7.2.ppc64.rpm                                                                                                    | 198 kB  00:00:00
(2/2): libstdcplusplus-devel-6.3.0-29.ibmi7.2.ppc64.rpm                                                                                        | 1.3 MB  00:00:03
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

```

以上で正常に戻った、めでたしめでたし。