kernel-headers の依存性解決に失敗する

今まで通りに普通に yum でパッケージをインストールしようとしたら kernel-headers の依存関係エラーで失敗しました。

以下は、gcc を yum インストールしようとしたときに出力されたエラーメッセージです。

glibc-headers をアップデートするために、kernel-headers を要求したんだけど依存関係解決ができず、失敗に終わっています。

kernel-headers 依存関係解決 失敗Raw Code(S)Raw Code(T)
# yum -y install gcc
読み込んだプラグイン:fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: centos.usonyx.net
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package gcc.x86_64 0:4.4.7-16.el6 will be インストール
--> 依存性の処理をしています: libgomp = 4.4.7-16.el6 のパッケージ: gcc-4.4.7-16.el6.x86_64
--> 依存性の処理をしています: cpp = 4.4.7-16.el6 のパッケージ: gcc-4.4.7-16.el6.x86_64
--> 依存性の処理をしています: glibc-devel >= 2.2.90-12 のパッケージ: gcc-4.4.7-16.el6.x86_64
--> 依存性の処理をしています: cloog-ppl >= 0.15 のパッケージ: gcc-4.4.7-16.el6.x86_64
--> 依存性の処理をしています: libgomp.so.1()(64bit) のパッケージ: gcc-4.4.7-16.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package cloog-ppl.x86_64 0:0.15.7-1.2.el6 will be インストール
--> 依存性の処理をしています: libppl_c.so.2()(64bit) のパッケージ: cloog-ppl-0.15.7-1.2.el6.x86_64
--> 依存性の処理をしています: libppl.so.7()(64bit) のパッケージ: cloog-ppl-0.15.7-1.2.el6.x86_64
---> Package cpp.x86_64 0:4.4.7-16.el6 will be インストール
--> 依存性の処理をしています: libmpfr.so.1()(64bit) のパッケージ: cpp-4.4.7-16.el6.x86_64
---> Package glibc-devel.x86_64 0:2.12-1.166.el6_7.3 will be インストール
--> 依存性の処理をしています: glibc-headers = 2.12-1.166.el6_7.3 のパッケージ: glibc-devel-2.12-1.166.el6_7.3.x86_64
--> 依存性の処理をしています: glibc-headers のパッケージ: glibc-devel-2.12-1.166.el6_7.3.x86_64
---> Package libgomp.x86_64 0:4.4.7-16.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package glibc-headers.x86_64 0:2.12-1.166.el6_7.3 will be インストール
--> 依存性の処理をしています: kernel-headers >= 2.2.1 のパッケージ: glibc-headers-2.12-1.166.el6_7.3.x86_64
--> 依存性の処理をしています: kernel-headers のパッケージ: glibc-headers-2.12-1.166.el6_7.3.x86_64
---> Package mpfr.x86_64 0:2.4.1-6.el6 will be インストール
---> Package ppl.x86_64 0:0.10.2-11.el6 will be インストール
--> 依存性解決を終了しました。
エラー: パッケージ: glibc-headers-2.12-1.166.el6_7.3.x86_64 (updates)
             要求: kernel-headers >= 2.2.1
エラー: パッケージ: glibc-headers-2.12-1.166.el6_7.3.x86_64 (updates)
             要求: kernel-headers
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

原因と対策

カーネルがアップデートが無効になっていた

別に失敗する理由もないんだけどな。。と思いながら yum.conf 設定ファイルを確認したところ、以下のように yum によってカーネルがアップデートされないように exclude=kernel* centos* が設定されていました。

OS 構築後、yum update 実行により勝手にカーネルがアップデータされないように設定したのですが、その設定が入っていることを忘れてました。

以下の設定だと kernelcentos で始まるパッケージは yum 実行時にインストール対象から排除されるようになります。

これが原因で gcc インストール時に kernel-headers の依存関係解決ができなかったんですね。

/etc/yum.conf : カーネルアップデートが無効になったいるRaw Code(S)Raw Code(T)
・・・
exclude=kernel* centos*
・・・

一時的に kernel* を有効にする

このままだと glibc-headerskernel-headers をインストールすることができず、結局 gcc のインストールに失敗するので、一時的に kernel* を許可するように設定してから gcc をインストールします。

・・・
#exclude=kernel* centos*
exclude=centos*
・・・
kernel-headers 依存関係解決 成功Raw Code(S)Raw Code(T)
# yum -y install gcc
読み込んだプラグイン:fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: centos.usonyx.net
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                  | 3.7 kB     00:00
extras                                | 3.4 kB     00:00
updates                               | 3.4 kB     00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package gcc.x86_64 0:4.4.7-16.el6 will be インストール
--> 依存性の処理をしています: libgomp = 4.4.7-16.el6 のパッケージ: gcc-4.4.7-16.el6.x86_64

・・・

---> Package glibc-headers.x86_64 0:2.12-1.166.el6_7.3 will be インストール
--> 依存性の処理をしています: kernel-headers >= 2.2.1 のパッケージ: glibc-headers-2.12-1.166.el6_7.3.x86_64
--> 依存性の処理をしています: kernel-headers のパッケージ: glibc-headers-2.12-1.166.el6_7.3.x86_64
--> トランザクションの確認を実行しています。
---> Package kernel-headers.x86_64 0:2.6.32-573.12.1.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

・・・

rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : ppl-0.10.2-11.el6.x86_64                                         1/9
  インストールしています  : cloog-ppl-0.15.7-1.2.el6.x86_64                                  2/9
  インストールしています  : mpfr-2.4.1-6.el6.x86_64                                          3/9
  インストールしています  : cpp-4.4.7-16.el6.x86_64                                          4/9
  インストールしています  : kernel-headers-2.6.32-573.12.1.el6.x86_64                        5/9
  インストールしています  : glibc-headers-2.12-1.166.el6_7.3.x86_64                          6/9
  インストールしています  : glibc-devel-2.12-1.166.el6_7.3.x86_64                            7/9
  インストールしています  : libgomp-4.4.7-16.el6.x86_64                                      8/9
  インストールしています  : gcc-4.4.7-16.el6.x86_64                                          9/9

・・・

インストール:
  gcc.x86_64 0:4.4.7-16.el6

依存性関連をインストールしました:
  cloog-ppl.x86_64 0:0.15.7-1.2.el6          cpp.x86_64 0:4.4.7-16.el6                    glibc-devel.x86_64 0:2.12-1.166.el6_7.3
  glibc-headers.x86_64 0:2.12-1.166.el6_7.3  kernel-headers.x86_64 0:2.6.32-573.12.1.el6  libgomp.x86_64 0:4.4.7-16.el6
  mpfr.x86_64 0:2.4.1-6.el6                  ppl.x86_64 0:0.10.2-11.el6

完了しました!

設定を元に戻す

インストールが無事に完了したら忘れずに設定を元に戻します。

/etc/yum.conf : カーネルアップデートを無効にするRaw Code(S)Raw Code(T)
・・・
exclude=kernel* centos*
・・・

終わりに

yum インストール・アップデート時に一部のパッケージだけが依存関係エラーで失敗したら yum.conf 設定で排除されている可能性があるので、もしそうだったら一時的に設定をコメントアウトしてからインストールすればいいよ。 という小ネタでしたけど、原因が分からず困ってる方がいらっしゃるかもしれないので。。

以上、yum : kernel-headers の依存性解決に失敗する でした。