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カーネル」と呼ばれるもので、
とのことみたいです。
そして、この「.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