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で起動してます。
[...] 先日ポストしたこちらのエントリで紹介している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 [...]
EC2: Tokyo Region (AP North East)でのUser Provided Kernel用のAKI at nkjmkzk.net
20 3月 11 at 12:08 PM