5733-OPS が廃止された直後の頃から、IBMi(AS/400) に yum をインストールしていると、初期導入済み gcc
が、現在の最新 gcc
では廃止された依存ライブラリが、存在しているようで、 yum update
or yum upgrade
がエラーになり、上手いこといってくれない。今回はそんな時の対処法。
TL;DR
# 念のためIFSをバックアップ
SAV DEV('/QSYS.lib/QGPL.lib/IFS_PKGS.file')
OBJ(('/QOpenSys/pkgs'))
SAVACT(*SYNC) CLEAR(*REPLACE) DTACPR(*YES)
# 手動で古い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
が古く、依存ライブラリ等が、削除されている関係等で上手く更新されないと思われる。
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をバックアップ
SAV DEV('/QSYS.lib/QGPL.lib/IFS_PKGS.file')
OBJ(('/QOpenSys/pkgs'))
SAVACT(*SYNC) CLEAR(*REPLACE) DTACPR(*YES)
②次に古い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
======================================================================================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
======================================================================================================================================================================
インストールしています:
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
④パッケージを更新
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
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上で正常に戻った、めでたしめでたし。