nkjmkzk.net

powered by Kazuki Nakajima

EC2でLinux Kernelを普通にアップデートする方法

EC2では従来のAMIから作成したインスタンスでyum updateなどをおこなってkernelをアップデートしOSを再起動してもkernelはアップデートされませんでした。これは従来のAMIがkernelをマシンイメージ内で管理していないためです。kernelは外部にあるものをaki-ホゲホゲというKernel IDをインスタンス属性で指定することによって管理されており、マシンイメージ内にあるkernelは無視されることになります。

とはいえユーザがkernelをマシンイメージ内で普通に管理したい、というような要望に応えるため(だと思う)にUser Provided Kernelという構成がいつからサポートされるようになったようです。名前は難しいですが、要は他の一般的な環境と同じようにマシンイメージ内のkernelを使えるようになったよ、ということです。

今回は先日から採用しているOracle Linux 5.5 64bitのAMI(ami-09d43a60)をベースにUser Provided Kernelを利用する方法をみていきます。

ami-09d43a60からインスタンスを作成すると、2.6.18-194.0.0.0.3.el5xenというkernelで起動しますが、これはマシンイメージの外にあるkernelです。現時点では/bootは空の状態です。

[root@~]# uname -r
2.6.18-194.0.0.0.3.el5xen
[root@~]# ls /boot/
[root@~]#

まずはこのインスタンス内に新しいkernelをインストールします。Oracle Linux 5の最新のYum Repository情報をダウンロードし、現時点で最新のOracle Linux 5.6のkernelをインストールします。

[root@~]# cd /etc/yum.repos.d/
[root@~]# rm public-yum-el5.repo
[root@~]# wget http://public-yum.oracle.com/public-yum-el5.repo
[root@~]# vi public-yum-el5.repo
[ol5_u6_base]
name=Oracle Linux $releasever - U6 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/6/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1

[root@~]# yum update kernel -y
[root@~]# ll /boot
total 7384
-rw-r--r-- 1 root root   66896 Jan  4 16:30 config-2.6.18-238.el5xen
drwxr-xr-x 2 root root    4096 Mar 16 04:48 grub
-rw------- 1 root root 2493259 Mar 16 04:43 initrd-2.6.18-238.el5xen.img
-rw-r--r-- 1 root root  113855 Jan  4 16:34 symvers-2.6.18-238.el5xen.gz
-rw-r--r-- 1 root root 1224968 Jan  4 16:30 System.map-2.6.18-238.el5xen
-rw-r--r-- 1 root root 2185523 Jan  4 16:30 vmlinuz-2.6.18-238.el5xen
-rw-r--r-- 1 root root  421549 Jan  4 15:38 xen.gz-2.6.18-238.el5
-rwxr-xr-x 1 root root  978000 Jan  4 18:22 xen-syms-2.6.18-238.el5

ちなみに本来はイケイケなUEK(Unbreakable Enterprise Kernel)を使いたいところですが、僕が試した限りではUEKでは起動させることができませんでした。UEKは従来のParavirtual Kernelではなく、pvopsという非仮想化環境/仮想化環境兼用のkernelになっているのでそのあたりのビルドオプションがうまく合ってないのかな、と推測しています。一方、Amazon Linux AMIもkernel 2.6.34ベースのものなのでpvops kernelのはずですが、こちらはUser Provided Kernelとして起動できています。なのでpvops自体がNGということはないと思いますが、どうすればEC2 Compatibleなpvops kernelとしてビルドできるのかはわかっていません。

次にgrubのメニューファイルを作成します。

[root@~]# cd /boot
[root@~]# mkdir grub
[root@~]# vi grub/menu.lst
default=0
timeout=3
hiddenmenu

title Oracle Linux 5.6 64bit
    root (hd0)
    kernel /boot/vmlinuz-2.6.18-238.el5xen root=/dev/sda1
    initrd /boot/initrd-2.6.18-238.el5xen.img

ここで一度インスタンスを停止し、インスタンスのkenel属性を変更してAKIをUser Provided Kernelに準じたもの変更します。

[nkjm@mac]$ ec2-modify-instance-attribute i-f6668e99 --kernel aki-427d952b
* i-f6668e99: インスタンスID 適宜変更が必要
* --kernel: AKI(Kernel ID) 今回のAMIであればaki-427d952bでOK

ちなみにUser Provided Kernelに準じたAKI一覧はこちらの資料をご参考に。

Enabling User Provided Kernels in Amazon EC2 (PDFファイル)

本来はここでインスタンスのramdisk属性をNoneにしておくべきなのですが、kernelの方はec2-modify-instance-attributeで修正できるものの、ramdiskの値を消すということができなかったので(なんでやねん)、特に弊害がないようなのでそのままにしています。誰か消し方教えてください。

あとはインスタンスを再度起動してkernelを確認してみます。

[root@~]# uname -r
2.6.18-238.el5xen

ちゃんと新しいkernelで起動してます。

with one comment

Written by 中嶋 一樹

3月 16th, 2011 at 6:13 pm

Posted in Uncategorized

Tagged with ,

One Response to 'EC2でLinux Kernelを普通にアップデートする方法'

Subscribe to comments with RSS or TrackBack to 'EC2でLinux Kernelを普通にアップデートする方法'.

  1. [...] 先日ポストしたこちらのエントリで紹介しているPDFにはTokyo RegionでUser Provided Kernelを使用するためのAKIがまだ記載されていませんので下記にリストしておきます。 IMAGE aki-d609a2d7 ec2-public-images-ap-northeast-1/pv-grub-hd00-V1.01-i386.gz.manifest.xml IMAGE aki-d809a2d9 ec2-public-images-ap-northeast-1/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml IMAGE aki-d209a2d3 ec2-public-images-ap-northeast-1/pv-grub-hd0-V1.01-i386.gz.manifest.xml IMAGE aki-d409a2d5 ec2-public-images-ap-northeast-1/pv-grub-hd0-V1.01-x86_64.gz.manifest.xml [...]

Leave a Reply