当社では、製品の使用目的やお客様の用途に合わせてLinuxカーネルの最適化を行っています。そのためディストリビューションのカーネルをそのまま用いることはほとんど無く、ソースから必要な機能のみをイネーブルしてコンパイルしたカーネルを用いています。新人の私は、Linuxカーネルをコンパイルしたことがなかったので、勉強がてらチャレンジしてみました。

1. ソース・ファイルの入手と準備

現在のバージョンの確認方法

 $ su

 # uname -a
 Linux kakkey 2.6.21.4 ・・・


ディレクトリを移動

 # cd /usr/src

最新のカーネル・ソースをhttp://www.kernel.orgより入手します。
 The Public Linux Archive → 
 Linux Repository,including kernel source → 
 kernel/ → v2.6/ → より最新のkernel linux-2.6.21.5.tar.bz2をwgetでダウンロードします。
 
 # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.5.tar.bz2

ソースを展開

  # tar xjf /usr/src/linux-2.6.21.5 tar.bz2

 「linux-バージョン番号」のディレクトリが作成されます。

2. コンパイル前の準備

念のため、コンパイル前の情報を保存しておきます。

 ブート・ローダ「GURB」の設定ファイルを保存

 # cd /boot/grub
 # cp -a menu.lst menu.lst.orig

 

3. カーネルとモジュールのコンパイルと導入

カーネル・パラメータの設定

 使用しているマシンはX Window System環境が無いサーバなので、CUIで設定するツール「make menuconfig」を使用します。
 「make menuconfig」は「ncurses-dev」が必要なので、事前にインストールしておきます。

 # cd /usr/src/linux-2.6.21.5

 # apt-get install ncurses-dev

makeとgccが無い場合はインストールしておきます。

 # apt-get install make gcc

安定稼動していた時のカーネル・パラメータを /usr/src/linux-2.6.21.5/.configにコピーし、make menuconfigを実行します。

   # zcat /proc/config.gz >  /usr/src/linux-2.6.21.5/.config

  # make menuconfig 

  Image

 

 

 

 

 

 

 

 

 

 

自分の環境にあわせて、パラメータを設定します。

   [*] :静的にモジュールをカーネルに組み込む
   <M> :動的にモジュールを組み込む
   [ ],< > :無効

コンパイル&インストール

 # make

 # make modules

 # make modules_install

 # make install

自分で前のバージョンを保存しなくても、自動的にやってくれるようです。

 # cd /boot
 # ls -la

 838062 Jun 12 00:41 System.map-2.6.21.4.old
 77449 Jun 12 00:41 config-2.6.21.4.old
 1435728 Jun 12 00:41 vmlinuz-2.6.21.4.old

 # cd /usr/src/linux-2.6.21.5
 # ls -la

 44539 Jun 18 14:24 .config
 40750 Jun 15 16:39 .config.old

4. 新しいカーネルで起動する

ブート・ローダの「GURB」の設定ファイルを変更
 # cd /boot/grub

 # vi menu.lst

 title           Debian GNU/Linux, kernel 2.6.18-4-686
 root            (hd0,1)
 kernel          /boot/vmlinuz-2.6.18-4-686 root=/dev/sda2 ro
 initrd          /boot/initrd.img-2.6.18-4-686
 savedefault

 title           Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)
 root            (hd0,1)
 kernel          /boot/vmlinuz-2.6.18-4-686 root=/dev/sda2 ro single
 initrd          /boot/initrd.img-2.6.18-4-686
 savedefault

「title」の内容が、電源を入れた後、OSを選択する画面に表示される項目です。
新しいカーネルが起動できるように、menu.lstに以下の項目を追加します。

 title           Debian GNU/Linux, kernel 2.6.21.5
 root            (hd0,1)
 kernel          /boot/vmlinuz-2.6.21.5  root=/dev/sda2 ro
 savedefault

設定が終了したら再起動します。

 # reboot

新しいカーネルを選択して起動します。

uname -a で確認
Linux kakkey 2.6.21.5 ・・・

最新のカーネルで起動できました。 

めでたし、めでたし。

#こんなに、すんなりいくことは珍しく、ルートファイルシステムがマウントできなくてパニックを起こすことなどもよくあるらしいです。