これは、私流の Linux kernel 再構築手順です。
私なりの工夫が入っているため、他のサイトで紹介されている手順より、
多少繁雑に見えるかも知れません。
対象は Plamo Linux 4.x をインストールした直後の状態で、ブートローダ
として grub を前提にしています。一応安全性を多少は考慮しているつもりです。
参考になれば幸いです。
松本 徳真 < matsu@netfort.gr.jp >
ブートローダとしてgrubを使用する場合、ブート時にカーネルを選択したり
する事が出来ます。カーネル再構築→テスト→再構築→テストを繰り返す
時は、以下のような設定をしておくと、カーネルをメニューで選択できて
少し便利かも知れません。
/etc/grub.conf を書き換えます。私は次のような
/etc/grub.conf を
使用しています。参考にして下さい。
この設定はそのまま使用してはいけません。(hd0,0), /dev/hda1 の部分
は、環境によって異なるからです。
まず、/etc/grub.conf のバックアップを作成します。
# cp -a /etc/grub.conf /etc/grub.conf.orig
次に /etc/grub.conf を編集します。
splashimage の行はもともとあった grub.conf と同じにして下さい。
(hd0,0), /dev/hda1 の部分も、もともとあった grub.conf と同じ
になるように注意して下さい。
title の行はgrubのメニュー選択時に表示される物ですので、好きに
書いて構いません。私の例では "Plamo Linux 4.0" とありますが、
他のバージョンを使用している場合など、
臨機応変に対応して下さい。timeout の値は自由に設定して下さい。
私の例では、Plamo のデフォルトより短めになっています。あまり
短くしすぎると泣きを見ます。
もともとあった grub.conf との大きな違いは、vmlinuz, vmlinuz.test,
vmlinuz.orig という 3種類のカーネルをメニューで選択して起動できる
ようにしてあることです。
準備が出来れば再起動します。自信が無い場合は Plamo Linux の install 時の
最後の方で
作成した起動ディスク(レスキューディスク)を手元に準備して下さい。
再起動に失敗した場合は、起動ディスクで起動した後、
# cp /etc/grub.conf.orig /etc/grub.conf
でもとに戻るはずです。
# cd /
# cp -a vmlinuz vmlinuz.orig
# chmod a-w vmlinuz.orig
これで、今使っている /vmlinuz というカーネルを /vmlinuz.orig にコピー
しました。今後、vmlinuz は、新しいカーネルで書き換えるのですが、
vmlinuz.orig と言うファイルを大切に保存しておけば、grub のメニューで
"Plamo Linux 4.0 (orig)" を選択する事で、Plamo Linux インストール直後の
カーネルの状態に戻す事が出来る訳です。
次に、ドライバモジュール類も間違って消さないように、読み込み専用に変更
しておきましょう。
# chmod -R a-w /lib/modules/`uname -r`
ここで、uname -r は、カーネルのバージョンを表示するコマンドです。
カーネルのバージョンが 2.4.22 の場合は、2.4.22 と表示します。
Plamo linux 4.0 では、インストール直後は、2.4.26-plamo のはずです。
この場合、シェルでは、 /lib/modules/`uname -r` は、/lib/modules/2.4.26-plamo
を表します。
それでは、念のために、再起動して、
"Plamo Linux 4.0 (orig)" を選択しても無事に起動する事を確認しておいた
方が良いでしょう。
Plamo Linux インストール時に既に用意されているカーネルソースを利用
するなら何もする必要はありません。
ちょっと新しいカーネル linux-2.6.7.tar.bz2 を使用したいという
場合は展開して
/usr/src/linux にシンボリックリンクを張って下さい。
# cd /usr/src
# rm linux
# tar jxf linux-2.6.7.tar.bz2
# ln -s linux-2.6.7 linux
/usr/src/linux/Makefile を編集します。このファイルの先頭に
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 7
EXTRAVERSION =
という部分があります。この EXTRAVERSION の部分を
EXTRAVERSION = -matsu01
の様に書き換えるのです。私は、このカーネルを使用するマシンの host名と、
番号で構成しています。また、カーネルの設定を大きく変更する毎に、数字の
部分を大きくしています。その他の部分は絶対に変更しないで下さい。
このように作成した、カーネルで起動して uname -r で、カーネルバージョン
を見ると 2.6.7-matsu01 となります。ちょっと恰好いいでしょう?
実は、このようにして module として作成されたドライバは、
/lib/modules/2.6.7-matsu01/ にインストールされます。
Plamo Linux 4.0 インストール時のカーネルモジュールは
/lib/modules/2.4.26-plamo/ にインストールされています。もし、Plamo
付属のソースでカーネル再構築する場合に、
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 26
EXTRAVERSION = -plamo
とあるのを、
EXTRAVERSION = -matsu01
の様に変更しておく事で、インストール時に用意されたモジュール類を破壊
せずに済む訳です。
カーネル再構築は、一発で理想のカーネルになることは普通考えられません。
それまで、古いカーネルや、モジュールは必要なわけです。また、何か問題が
発生した時、一度古いカーネルに戻してテストする事は、問題の切り分けの
ためにも重要です。時々、古いモジュールを削除するような指示がなされる
事がありますが、インストール時に用意されたカーネルとモジュールは、
絶対に消さないと言う心構えでいましょう。
ちょっと長くなってしまいましたが、このような工夫をする事で、
grubのメニューで "Plamo Linux 4.0 (orig)" を選べば、いつでもインストール
直後のカーネルとモジュールの状態に戻せる訳です。
# cd /usr/src/linux
# make mrproper
# make include/asm ## 2.6.x のみ
# make menuconfig
で、カーネルの設定を行います。各項目については、参考になる
資料がたくさん(本当か??)あるでしょうし、私の手に余ります
ので省略します。
make menuconfig では、 .config を読み込んで、 それをデフォルトの
設定として使用します。そして、新しい設定を反映した .config を出力
します。.config は、make mrproper で削除されます。設定が終ると、
# cd /usr/src/linux
# cp .config config-20040731
のように、別ファイルにして保存しておくと良いでしょう。Plamo Linux の
デフォルトカーネルの設定は、 /boot/config にあります( 注: 3.2 以前は、
/usr/src/linux/plamoconfig )。
# cd /usr/src/linux
# make mrproper
# make include/asm ## 2.6.x のみ
# cp /boot/config .config
# make menuconfig
とすると、Plamo Linux 提供の標準設定のカーネルになるはずです。これを
元に、不要なものを削ったり、必要なものを追加したりすると良いでしょう。
一度にたくさんの変更をしない方が無難です。問題が発生した時、何処を変更
した時に問題が発生したのか分かりにくいからです。
ここでは、カーネルの設定に、make menuconfig を使用しましたが、
異なるバージョン用の .config をコピーして来た時は、make oldconfig を
使用する事で、新たに追加された項目についてのみ質問があります。
make oldconfig で、追加項目の確認、その後で make menuconfig で細かい
設定という手順が良いと思います。また、2.4.x の .config を、2.6.x で
使おうとすると、ある程度知識が無いとはまります。このような場合は、
デフォルトのカーネルからスタートした方が良い事もあります。
# cd /usr/src/linux
# make dep clean ## 2.4.x のみ
# make bzImage
# make modules
# make modules_isntall
以上でカーネルの再構築、モジュールノコンパイル、モジュールのインストールが
出来たはずです。再構築されたカーネルは、
/usr/src/linux/arch/i386/boot/bzImage です(PC/AT 互換機の場合)。
# cd /usr/src/linux
# cp arch/i386/boot/bzImage /vmlinuz.test
としてやれば出来上がりです。次回起動時に grub のメニューで、
"Plamo Linux 4.0 (testing)" を選んでやれば新しいカーネルで起動します。
もし不都合があれば "Plamo Linux 4.0 (orig)" や "Plamo Linux 4.0"
を選べば元の状態で起動出来ます。
もし満足なカーネルが出来上がったなら、vmlinuz.test から vmlinuz に昇格
させてやれば、grub で選択しなかった時デフォルトで起動するカーネルにな
ります。
もし問題のあるカーネルが出来上がった場合は、"カーネルの設定。" に戻って
やり直しとなります。この際はもう make mrproper を実行する必要はありま
せん。
2回目以降のカーネルのモジュールを作成する前に、古いモジュールを削除して
おく必要があります。
# rm -rf /lib/modules/2.4.26-matsu01
この時オリジナルの /lib/modules/2.4.26-plamo を間違って削除しないように十分に
注意をして下さい。また、EXTRAVERSION を変更した直後はこの作業は必要
ありません。
# cd /usr/src/linux
# make menuconfig
# make dep clean ## 2.4.x のみ
# make bzImage
# make modules
# make modules_isntall
# cp arch/i386/boot/bzImage /vmlinuz.test
そして再起動を繰り返しながら望む kernel を探し求める事になるでしょう。
素敵なカーネルに出会えたら .config を保存しておく事と、EXTRAVERSION の
番号を変えておく事をお忘れ無く。
ここで、紹介した手順の意図を理解できれば、もうカーネルの再構築は恐く
ありません。どんどんカーネルを再構築して下さい。
とはいえ、無事にカーネルが起動し、ファイルシステムをマウントした後で
カーネルパニック、ハングアップした場合は、無傷でいられる訳ではありません。
過去に、特定の条件の下で、ファイルシステムを破壊するカーネルも存在しま
した。よって、開発版カーネルを追っかけたり、怪しいパッチをテストする
ための環境にするには、もう少し工夫しなければなりません。
このページに関する、ご意見、感想、苦情はこちらまで 松本 徳真 / matsu@netfort.gr.jp