CentOS5.4のカーネルを2.6.33.2最新にする(とりあえずVMware Fusion上で)

最近忙しくって、久々の更新。
ず〜っと昔、興味だけでLinuxカーネルの再構築をしたことがあったけど、当時特に目的も無かったからか、脳みそに全く残っていなかったので再度挑戦。
挑戦って言うか、最新のカーネルじゃないと駄目っぽい案件があるので、検証がてらやってみました。

今日は、iMAC + OS X 10.6.3 SnowLeopard にVMware FusionにCentOS5.4をインストールした環境で取りあえずテストしてみました。超はまったので、忘れないうちにメモ。
CentOS5.4をインストールして、yum で最新版にアップしておきます。
この時点でのカーネルは2.6.18-164.15.1.el5 でした。


まず最新版のカーネルをここ(ftp://ftp.jp.kernel.org/pub/linux/kernel/v2.6/)から取って展開しときます。


cd /usr/src/kernels/
wget wget ftp://ftp.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.2.tar.gz
tar zxvf linux-2.6.33.2.tar.gz
cd linux-2.6.33.2


インストール時の.configをコピー


cp /usr/src/kernels/2.6.18-164.15.1.el5-i686/.config /usr/src/kernels/linux-2.6.33.2/

インストール時のconfigを最新カーネルに引継ぎ


make oldconfig
凄い数の項目でドライバー等をどうするか聞かれますが、わかる人は環境にあわせて決めてください。
今回は、すべてEnterで切り抜けます。


カーネルオプションの選択
ここで、エラはまりしたので注意。


make menuconfig
[General Setup] → [deprecated sysfs features to support old userspace tools] をenableにしないといけなかったようで、このまま何もせずに最後まで行って再起動するとカーネルパニックに陥り起動できなくなります。

[select]をenterで選択して

を[*]にします。

んで、設定が終わったらついでにカーネルに名前をつけときます。
Kernelに名前をつけるには、「EXTRAVERSION」を変更します。


# vi Makefile
EXTRAVERSION = .2.qloogtest
上の場合は、「2.6.33.2.qloogtest」って名前のカーネルになります。
実運用ならもっとわかりやすくつける必要がありますが、今日はテストなので。


ほんでもって、あとは再構築作業です。
これが、また時間がかかる。


make clean && make -j2 bzImage && make -j2 modules && make modules_install && make install

  • j2で2コアを使うという意味らしく、クアッドコアの人は-j4だそうで。

再構築が終わったら、GRUBの設定を変更して新カーネルがデフォルトでブートされるように変更


# vi /etc/grub.conf
#boot=/dev/sda
default=0 ←ここを0に。
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.33.2.qloogtest)
root (hd0,0)
kernel /vmlinuz-2.6.33.2.qloogtest ro root=/dev/VolGroup00/LogVol00
保存して再起動
reboot

再起動したら
# uname -r
2.6.33.2.qloog

これで2.6.33.2.qloogカーネルで起動してます。


時間は掛かるけど、はまらなければそれほど難しくない。
VMwareを使うと、スナップショットが取れるのでこんな感じの検証作業は楽ですなぁ。
解決するまでにロールバックを何度したことか・・・。
見たところエラーも無いようなので、実サーバーでやってみるか。