Ubuntu でカーネルビルドをしよう!の巻
Ubuntu でカーネルビルドをして、カーネルを今のマシンに最適化するテスト。
事前準備
カーネルビルドに必要なパッケージをインストール。
# apt-get install build-essential
# apt-get install kernel-package
コンパイルの準備
カーネルソースを取得したら /usr/src に tar.bz2 ができてるので、/usr/src に移動して解凍する。
# cd /usr/src
# tar xf linux-source-2.6.35.bz2
.config という名前の設定ファイルが必要なので、既存のものをコピーして使う。
# cp /boot/config-2.6.35-28-generic .config
# make oldconfig
コンパイル
それではコンパイル。と行きたいところだが、このままコンパイルすると以下のエラーで怒られる。
ld: cannot find /ubuntu/omnibook/sections.lds: No such file or directory
見ての通り /ubuntu/omnibook/sections.lds が無いことが原因。これらのファイルはダウンロードしたカーネルソース内にあるので、シンボリックリンクを作成する。
参考:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/505420
ではいよいよコンパイル。
# make-kpkg --initrd kernel_image
環境変数 CONCURRENCY_LEVEL に数値をいれておくと、同時にその数値分のファイルを並列コンパイルしてくれるという記述があったものの手元の環境では有意な差は見られなかった。
# env CONCURRENCY_LEVEL=2 <- 有意な差は無し。
Core2Duo E8500, Mem 4GB のマシンでビルドに40分程度。並列コンパイルが出来ているのかどうか不明なため、もっとビルド時間を減らすチューニングの余地はありそう。
インストール
コンパイルが終了すると /usr/src に .deb ファイルが作成される。これを dpkg -i でインストール。
# cd /usr/src
# sudo dpkg -i linux-image-2.6.35.11_2.6.35.11-10.00.Custom_i386.deb
これでマシンを再起動すれば自前ビルドのカーネルが使用できる。
まとめるとこれだけ。apt-get は初回のみ必要なので、これらを除けばかなり少ない手順でカーネルビルドが行えることがわかる。
# apt-get install build-essential
# apt-get install kernel-package
# apt-get install linux-source-2.6.35
# cd /usr/src
# tar xf linux-source-2.6.35.tar.bz2
# cp /boot/config-2.6.35-28-generic .config
# make oldconfig
# ln -s /usr/src/linux-source-2.6.35/ubuntu /ubuntu
# make-kpkg --initrd kernel_image
# cd /usr/src
# dpkg -i linux-image-2.6.35.11_2.6.35.11-10.00.Custom_i386.deb
それでは良いカーネルビルドライフを!