VMWare上のLinuxのカーネルを再構築

最近Linuxのカーネルを再構築することがあったので,その作業行程をメモとして残しておきます.

元の環境

VMWare Fusion上の仮想マシン
Debian GNU/Linux 6.0.3 (squeeze)

$ uname -r
2.6.32-5-amd64

カーネル再構築

あらかじめ必要なパッケージなど

cursesはmenuconfigを使う場合に必要になります.

# apt-get install build-essential libncurses-dev ncurses-dev

カーネルのソースコードの入手

2012/1/24 時点での2.6系の最新バージョンは2.6.39.4でしたが,
どうもうまくいかなかったので今回は2.6.32.27を入れることにしました.
2.6.38.xは起動が怪しく,2.6.39.xは起動できず,問題も解決できなかった
ので,同じマイナーバージョンのリビジョン違いで試しています.

ソース入手先
ftp://ftp.kernel.org/pub/linux/kernel/

# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.27.tar.gz

カーネルのビルド

# tar zxf ./linux-2.6.32.27.tar.gz
# cd linux-2.6.32.27

古い.configなどが残ってるかもしれないので,一度初期化しておきます.

# make mrproper

元のカーネルから設定を引き継ぐ場合,以下が必要です.
make oldconfigをした際に対話型の設定が始まりますが,数が多いので
ひとまず全てenterで設定を終えてから,make menuconfigで必要な箇所は変更します.

# cp /boot/config-2.6.32-5-amd64 .config
# make oldconfig

カーネルに組み込む機能やモジュールとして読み込む機能を選択します.
VMWare上で動作させる場合,deprecated sysfs featuresを有効にする
必要があるそうです.また,iptablesやipvs関連の機能を使う予定がある
ため,関連する項目は一通りチェックをつけておきます.

# make menuconfig
General setup
    enable deprecated sysfs features to support old userspace tools

Networking support
Networking options
    Network packet filtering framework (Netfilter)
    Core Netfilter Configuration
    IP: Netfilter Configuration
    IPv6: Netfilter Configuration

    IP virtual server support

これで,選択した内容の.configが生成されるので,ビルド,インストールします.

# make
# make modules_install
# make install

初期RAMディスク(initrd)の作成

# update-initramfs -c -k `make kernelrelease`

GRUBの設定を更新

Debian squeezeではgrub2を利用しているため,grubで利用していた設定ファイルの
/boot/grub/menu.lstは存在せず,代わりに/boot/grub/grub.cfgを利用します.
update-grub2コマンドで,設定ファイルを直接編集すること無く更新します.

# update-grub2

再起動して確認

$ uname -r
2.6.32.27