カーネル2.6.36のビルド

カーネル2.6.36がリリースされました。
やっぱりなんか新しいのでたら使いたくなるじゃーん、というわけでカーネルをビルドしてみましょう。

環境

 ・KVM上のubuntu10.04

ビルド方法

必要なパッケージの取得

 ビルドに必要なパッケージを取得しておきます。

[bash]
apt-get install build-essential
apt-get install kernel-package libncurses5-dev libqt3-mt-dev
[/bash]

ソースファイルの取得

 The Linux Kernel Archivesからビルドしたいカーネルのソースを取得して展開します。

[bash]
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
tar jxf linux-2.6.35.4.tar.bz2
[/bash]

コンフィグファイルの作成

 以前のコンフィグファイルから作成します。
 今まで一回もビルドしたことねーよ!って人でもちゃんと/boot/config-2.6.xx.xがあると思いますので、探してみましょう。

[bash]
cd linux-2.6.36
cp /boot/config-2.6.35.4 .config
make oldconfig
[/bash]

ビルドパラメータを変更

 ビルドパラメータを変更します。今回は特に変更しませんでした。

[bash]
make menuconfig
[/bash]

 KVMではなく通常のマシンにインストールしているのであれば、CPUに関するパラメータを最適なものにしておくと、パフォーマンスが向上するようです。

[text]
Processor type and features >
Processor family => Core 2/newer Xeon
Timer frequency => 1000 HZ
[/text]

カーネルのインストールパッケージを作る

 「CONCURRENCY_LEVEL=2」はスレッドを2つ作ってビルドする指定です。

[bash]
make-kpkg clean
CONCURRENCY_LEVEL=2 make-kpkg –initrd –revision=20101025 kernel_image kernel_headers
[/bash]

.deb ができるので dpkg でインストール & initrd.imgの作成

[bash]
cd ..
dpkg -i linux-image-2.6.36_20101025_amd64.deb
mkinitramfs -o /boot/initrd.img-2.6.36 2.6.36
update-grub2
[/bash]

再起動

 これで再起動すると新しいカーネルで起動するはずです。

[bash]
$ uname -r
2.6.36
[/bash]

 ちなみに、再起動したところ全然起動しなくなってしまった場合、困ったことになると思います。
 一応grub(grub2)について知っておくとあせることがなくなるかもしれません。

grubについて

 現在のubuntuではブートローダにgrub2が使われています。
 grub2では、主に/etc/default/grubと/etc/grub.d に設定ファイルがあり、update-grubを実行することで/boot/grub/grub.cfgに設定が書き込まれます。
 grubでは/boot/grub/menu.lstを書き換えて使っていましたが、grub2では/boot/grub/grub.cfgをユーザーが書き換えることはしません。(してもいいけど、そのうち上書きされちゃう)

 例えば、/etc/default/grubは以下のようになっています。

[text]
# If you change this file, run ‘update-grub’ afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo’
#GRUB_GFXMODE=640×480

# Uncomment if you don’t want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
[/text]

 GRUB_DEFAULT=0でデフォルトで起動するOSを指定し、GRUB_TIMEOUTでメニューを表示する時間(秒)を指定しています。(あとシリアルコンソール出力の設定をしている)
 詳細な設定については、以下を参照してください。

起動時OS選択画面

 複数のOSが選択肢としてある場合、以下のようなメニューが表示されます。


                        GNU GRUB  version 1.98-1ubuntu7

 +--------------------------------------------------------------------------+
 |Ubuntu, with Linux 2.6.36                                                 |
 |Ubuntu, with Linux 2.6.36 (recovery mode)                                 |
 |Ubuntu, with Linux 2.6.35.4                                               |
 |Ubuntu, with Linux 2.6.35.4 (recovery mode)                               |
 |Ubuntu, with Linux 2.6.32-21-server                                       |
 |Ubuntu, with Linux 2.6.32-21-server (recovery mode)                       |
 |Memory test (memtest86+)                                                  |
 |Memory test (memtest86+, serial console 115200)                           |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 +--------------------------------------------------------------------------+

      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the commands before
      booting or 'c' for a command-line.

 ここで、eを押すと起動パラメータの変更を行うことができます。

起動しなくて困った場合

 どう困ってるかにもよりますが、カーネルをインストールした場合に起こりそうなのは、新しく起動しようとしているカーネルがうまく起動しない場合、でしょう。
 この場合は、以前のカーネルで動かせばよいだけです。
 grubのメニューが表示される場合はメニューから以前のカーネルを選択して起動すればOKです。
 grubのメニューが表示されない場合は困りますが、ubuntuのインストールCDなどから起動して/boot/grub/grub.cfgを編集して、一時的に以前のカーネルから起動するようにして、起動後修復すればよいです。

参考

grub