Ubuntu 10.04(Lucid)にLinux標準カーネル2.6.37.1をインストールしてみた

Ubuntu10.04(Lucid)でLinux標準カーネルのバージョン2.6.37.1をインストールをしてみました。



以下は2/20の作業ログをまとめたものなのですが、今 The Linux Kernel Archives を確認してみたら最新の安定バージョンとして「2.6.37.2」が2/24にリリースされてますね。
2.6.37.2でも同様の方法でインストールできると思うので、UbuntuなどのDebian系をお使いの方はこれから説明する方法で試してみてはいかがでしょうか。



カーネルソースのダウンロードと配置

まず、カーネルソースを The Linux Kernel Archives からダウンロードして、/usr/src/ に配置します。

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.1.tar.bz2
$ sudo mv linux-2.6.37.1.tar.bz2 /usr/src/
$ cd /usr/src/
$ sudo tar jxf linux-2.6.37.1.tar.bz2
$ sudo rm linux-2.6.37.1.tar.bz2

※バージョン2.6.37.2で試してみたい場合は、wgetコマンド実行部分を

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.2.tar.bz2

と読み替えてください。そして、移行で登場する「2.6.37.1」の部分も「2.6.37.2」と読み替えてください。




「.config」の作成

次に、makeするための「.config」ファイルを作成します。
これはUbuntuから提供されるものを用いると良いです。

私の環境では

$ ls -lF /boot/config*
-rw-r--r-- 1 root root 116048 2010-11-24 22:57 /boot/config-2.6.32-26-generic
-rw-r--r-- 1 root root 116492 2011-01-11 10:36 /boot/config-2.6.32-28-generic-pae
-rw-r--r-- 1 root root 116044 2011-02-18 15:40 /boot/config-2.6.32-foobar

だったので、この中で比較的新しい「config-2.6.32-28-generic-pae」を使用して

$ cd /usr/src/linux-2.6.37.1/
$ sudo cp /boot/config-2.6.32-28-generic-pae .config

としました。



これらの「config」ファイルは

$ dpkg -S /boot/config-2.6.32-28-generic-pae
linux-image-2.6.32-28-generic-pae: /boot/config-2.6.32-28-generic-pae

からも分かる通り、「linux-image」と名の付くパッケージに含まれています。
なので、

$ apt-cache search linux-image-2.6.3 --names-only

などで検索して、インストールしたいカーネルのバージョンと近いものをインストールして
その中に含まれる「config」ファイルを使用した方が良いかもしれません。


ちなみに、同じバージョンの「linux-image」でも、末尾に
『generic』
と付くものと
『generic-pae』
と付くものの2種類があります。
『pae』が付く方は「PAEカーネル」と呼ばれるもので、

3.2GB以上の大容量メモリを利用できるようにしたLinuxカーネル

とのことみたいです。

そして、この「.config」を元に次のコマンドを実行してmake時の設定を行います。
(以下ではmenuconfigを使っていますが、「既にある古いバージョンのconfigを使用して、新しいバージョンのconfigを作成する」という用途としては、oldconfigの方が良いかと思います - 2013年1月6日 追記)

$ cd /usr/src/linux-2.6.37.1/
$ sudo make menuconfig
(デフォルトのままで良い場合は、特に何もせずに「Exit」を選択してください)
※「make menuconfig」の際に「ncurses-devel」が無いとか怒られたときは
$ sudo apt-get install ncurses-dev

で、「ncurses-dev」をインストールしてください。
(「ncurses-devel」というパッケージはありませんでした)




Makefileの編集

デフォルトのままで良い場合は特に編集の必要はありません。

同じバージョンのカーネルを複数インストールするときなどは、
/usr/src/linux-2.6.37.1/Makefile の4行目

EXTRAVERSION = .1

の部分を適宜修正してください。



これはカーネルのバージョン名を表す際の記述で、
例えば、

EXTRAVERSION = .1-foobar

のようにすると、

$ uname -r
2.6.37.1-foobar

のようになります。
これは起動時のカーネル選択画面にも現れるので、
わかりやすい名前をつけると良いと思います。




debパッケージの作成

UbuntuなどのDebianディストリビューションの場合、
『make-kpkg』
というコマンドで、カーネルインストール用のdebパッケージを作成してくれます。

$ cd /usr/src/linux-2.6.37.1/
$ sudo make-kpkg clean
$ export CONCURRENCY_LEVEL=2
$ sudo time make-kpkg --initrd --revision=20110220 kernel_image kernel_headers

『CONCURRENCY_LEVEL』は並列度を指定する変数で、

CONCURRENCY_LEVEL=2

のように指定しておくと、デュアルコアCPUをまんべんなく使ってくれます。


また、CONCURRENCY_LEVELをわざわざexportしているのは
「sudo time」の上で実行している「make-kpkg」に適用したいためで
make-kpkgの実行時間を計測する必要が無ければ

sudo CONCURRENCY_LEVEL=2 make-kpkg --initrd --revision=20110220 kernel_image kernel_headers

で構わないと思います。もちろん、並列処理の必要が無ければCONCURRENCY_LEVELの指定はいらないです。



それと、「--revision」で指定しているのは、その名の通り『リビジョン番号』で
例えば、「--revision=20110220」と指定しておくと、

のようにdebパッケージが作成されます。



カーネルコンパイルは時間がかかるものなので、気長に待ちましょう。
マシンの性能にもよりますが、私の環境

Intel(R) Core(TM)2 Duo CPU     L7100  @ 1.20GHz

の場合、2時間半ほどかかりました。




インストール

make-kpkgが完了すると次のような2つのdebパッケージが出来上がっています。

$ cd /usr/src/
$ ls -lF *.deb
-rw-r--r-- 1 root src  7112644 2011-02-20 17:34 linux-headers-2.6.37.1-foobar_20110220_i386.deb
-rw-r--r-- 1 root src 34735916 2011-02-20 17:33 linux-image-2.6.37.1-foobar_20110220_i386.deb

そして、これらをインストールします。

$ sudo dpkg -i linux-image-2.6.37.1-foobar_20110220_i386.deb linux-headers-2.6.37.1-foobar_20110220_i386.deb

インストール完了後、再起動するとカーネル選択画面にただいまインストールしたカーネルが現れます。