読者です 読者をやめる 読者になる 読者になる

tkuchikiの日記

Linux やプログラミングについて書きます。

Amazon Linux で yum.conf に installonlypkgs を正しく設定しないと kernel update で問題が発生する

Amazon Linux 2014.03 の kernel update 時に instance が起動しなくなる問題の対処法 - tkuchikiの日記
の続編です。

この現象を確認したのは、
Amazon Linux 2012.03, 2012.09, 2013.03, 2013.09, 2014.03, 2014.09 です。
2012.03 よりも前のバージョンについては確認しておりません(Community AMIs から探せませんでした)。

問題

yum upgrade kernel したときに、

grubby fatal error: unable to find a suitable template
grubby: doing this would leave no kernel entries. Not writing out new config.

という不穏なエラーメッセージがでて /etc/grub.conf が更新されず、
そのまま reboot すると再起動時に boot しないというものです。

解決方法

解決方法としては、yum.conf に

installonlypkgs

を設定しないか、適切に設定する必要があります。

installonlypkgs はデフォルトでは、以下が設定されています。

installonlypkgs=kernel, kernel-bigmem, kernel-enterprise, kernel-smp, kernel-debug, kernel-unsupported, kernel-source, kernel-devel, kernel-PAE, kernel-PAE-debug

ですので、installonlypkgs を設定したい場合は、
デフォルトの kernel-* を記述した上で、更に追記すると良いと思います。

ちなみに、今回の現象を発生させないだけであれば、

installonlypkgs=kernel

だけでも良かったのですが、
それなら最初から書かないほうが良さそうです。

考察

yum のバージョンに問題あるのかと思いましたが、
CentOS 6.4 の yum 3.2.29 と 3.4.3 で試した限りでは現象を再現できませんでした。
ただ、リビジョン?ビルドバージョン?までは揃えていないので、
検証結果としては信憑性が低いと思います

以下が、Amazon Linux のバージョンごとの、yum --version です。

2012.03
$ cat /etc/system-release
Amazon Linux AMI release 2012.03

$ yum --version
3.2.29
  Installed: rpm-4.11.2-2.58.amzn1.x86_64 at 2014-12-10 07:38
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2014-12-05 18:22
  Committed: Ben Cressey <bcressey@amazon.com> at 2014-12-05

  Installed: yum-3.2.29-22.21.amzn1.noarch at 2012-06-25 22:51
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2012-01-05 22:44
  Committed: Cristian Gafton <gafton@amazon.com> at 2011-12-08

  Installed: yum-plugin-fastestmirror-1.1.30-10.12.amzn1.noarch at 2012-06-25 22:51
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2012-01-05 22:47
  Committed: Cristian Gafton <gafton@amazon.com> at 2011-12-08
2012.09
$ cat /etc/system-release
Amazon Linux AMI release 2012.09

$ yum --version
3.2.29
  Installed: rpm-4.11.2-2.58.amzn1.x86_64 at 2014-12-10 07:50
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2014-12-05 18:22
  Committed: Ben Cressey <bcressey@amazon.com> at 2014-12-05

  Installed: yum-3.2.29-30.24.amzn1.noarch at 2013-02-15 23:51
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2012-10-22 23:34
  Committed: Cristian Gafton <gafton@amazon.com> at 2012-10-22
2013.03
$ cat /etc/system-release
Amazon Linux AMI release 2013.03

$ yum --version
3.2.29
  Installed: rpm-4.8.0-32.40.amzn1.x86_64 at 2013-05-09 20:03
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2013-02-27 21:43
  Committed: Cristian Gafton <gafton@amazon.com> at 2013-02-25

  Installed: yum-3.2.29-40.25.amzn1.noarch at 2013-05-09 20:03
  Built    : Amazon.com, Inc. <http://aws.amazon.com> at 2013-02-28 06:14
  Committed: Cristian Gafton <gafton@amazon.com> at 2013-02-25
2013.09
$ cat /etc/system-release
Amazon Linux AMI release 2013.09

$ yum --version
3.4.3
インストール: rpm-4.11.1-3.49.amzn1.x86_64 (日時: 2013-12-10 23:46)
  構築      : Amazon.com, Inc. <http://aws.amazon.com>  (日時: 2013-09-27 14:54)
  コミット  : Ben Cressey <bcressey@amazon.com> (日時: 2013-09-27)

インストール: yum-3.4.3-111.46.amzn1.noarch (日時: 2013-12-10 23:47)
  構築      : Amazon.com, Inc. <http://aws.amazon.com>  (日時: 2013-10-17 19:02)
  コミット  : Andrew Jorgensen <ajorgens@amazon.com> (日時: 2013-10-11)
2014.03
$ cat /etc/system-release
Amazon Linux AMI release 2014.03

$ yum --version
3.4.3
インストール: rpm-4.11.2-2.54.amzn1.x86_64 (日時: 2014-04-10 21:46)
  構築      : Amazon.com, Inc. <http://aws.amazon.com>  (日時: 2014-03-19 17:08)
  コミット  : Andrew Jorgensen <ajorgens@amazon.com> (日時: 2014-02-25)

インストール: yum-3.4.3-137.51.amzn1.noarch (日時: 2014-04-10 21:46)
  構築      : Amazon.com, Inc. <http://aws.amazon.com>  (日時: 2014-03-12 01:47)
  コミット  : Ben Cressey <bcressey@amazon.com> (日時: 2014-03-12)
2014.09
$ cat /etc/system-release
Amazon Linux AMI release 2014.09

$ yum --version
3.4.3
インストール: rpm-4.11.2-2.56.amzn1.x86_64 (日時: 2014-10-08 01:25)
  構築      : Amazon.com, Inc. <http://aws.amazon.com>  (日時: 2014-07-29 01:13)
  コミット  : Lee Trager <ltrager@amazon.com> (日時: 2014-07-29)

インストール: yum-3.4.3-137.51.amzn1.noarch (日時: 2014-10-08 01:25)
  構築      : Amazon.com, Inc. <http://aws.amazon.com>  (日時: 2014-03-12 01:47)
  コミット  : Ben Cressey <bcressey@amazon.com> (日時: 2014-03-12)

0003813: YUM erase kernel\* removes running kernel, breaks grub, yum install kernel fails to reconfigure grub. - CentOS Bug Tracker
を見ると、kernel-xen で動いている環境で「grubby fatal error: unable to find a suitable template」
がでているようです。

Amazon LinuxXen で動いているので、関係あるのかもしれないですが、
検証した Amazon Linux は HVM なので、違うような気もします...

まとめ

yum.conf の installonlypkgs は、挙動を正しく理解していない場合は(特に Amazon Linux では)、慎重に設定しなくてはならないということがわかりました。
今回、chef で installpkgsonly を設定する cookbook を書いていて、

installonlypkgs=

という設定で、yum.conf を生成してしまっていたためこのような現象が発生しました。

opscode-cookbooks/yum · GitHub などを使っている場合、
知らずに不適切な設定をしている可能性があるのでご注意ください(この cookbook を使って問題があったわけではありません)。

その他

yum.conf の設定については、

man yum.conf

で確認することができます。