ここでは、モジュール形式カーネルの構築について解説します。モノリシックカーネルについては、the section called モノリシックカーネルの構築を参照してください。モノリシックカーネルの構築とインストールについて、モジュール形式カーネルとは異なる点について説明してあります。
以下では、x86アーキテクチャ用のカスタムカーネルを構築する手順を説明します。
注意 | |
---|---|
ここの例では、カーネルバージョンとして2.4.2-0.1.21を使っています。お使いのバージョンは、これとは異なるかもしれません。カーネルバージョンは、uname -rコマンドを使って調べることができます。2.4.2-0.1.21を実際のバージョンに読み替えてください。 |
最も重要な手順は、以降の作業でミスをした場合に備えて、正常に動作する緊急ブートディスクを用意しておくことです。インストール時にブートディスクを作成しなかった場合は、mkbootdiskコマンドを使って、今すぐ作成してください。実際のコマンドは、通常、mkbootdisk --device /dev/fd0 2.4.xのようになります。ここで、2.4.xは、カーネルの完全なバージョン番号(2.4.2-0.1.21など)です。ブートディスクができたら、それを使ってシステムがブートできることを確認してください。
まず、kernel-headersパッケージとkernel-sourceパッケージをインストールしておく必要があります。すでにインストールされている場合は、rpm -q kernel-headersコマンドとrpm -q kernel-sourceコマンドを実行してバージョンを確認してください。まだ、インストールしていない場合は、Red Hat Linux CD 1か、ftp://ftp.redhat.comにあるRed Hat FTPサイト(ミラーサイトの一覧は、http://www.redhat.com/mirrors.htmlにあります)からインストールしてください。RPMパッケージのインストールについては、Chapter 17を参照してください。
シェルプロンプトで、/usr/src/linux-2.4ディレクトリに移動します。これ以降のコマンドは、すべてこのディレクトリで実行しなければなりません。
カーネルを構築するときは、ソースツリーをきれいな状態にしておくことが重要です。したがって、最初に、make mrproperコマンドで作業を始めるのがよいでしょう。このコマンドは、前回の構築作業がソースツリーに残した設定ファイルなどを削除します。すでに正常に機能する設定ファイル(/usr/src/linux-2.4/.config)があり、それを使う予定の場合は、このコマンドを実行する前に別のディレクトリに待避させ、実行後に戻してください。また、この次の手順は飛ばしてください。
次に、カーネルに組み込むコンポーネントを指定する設定ファイルを作ります。
X Window Systemが使える環境なら、make xconfigコマンドを使うとよいでしょう。コンポーネントがメニューツリーの形式で表示され、これをマウスで選んでいきます。選択肢は、[Y](はい)と[N](いいえ)と[M](モジュール)の3つです。コンポーネントを選び終えたら、[Save and Exit]ボタンをクリックします。これで、設定ファイル/usr/src/linux-2.4/.configが作られ、Linux Kernel Configurationプログラムは終了します。
カーネルを設定する方法は、他にもあります。
make config—対話式のテキストプログラムです。コンポーネントが順次表示され、1つずつ選択の有無を指示していきます。この方法はX Window Systemを使いませんが、指示を遡って変更することはできません。
make menuconfig—テキストモードですがメニュー方式のプログラムです。コンポーネントは分類表示され、テキストモードのRed Hat Linuxインストールプログラムと同じ方法でコンポーネントを選びます。コンポーネントに対応するタグの印を切り替えて選択します。記号の意味は次のとおりです。[*](組み込む)、[ ](組み込まない)、<M>(モジュール)、< >(モジュール化可能)。この方法も、X Window Systemを使いません。
make oldconfig—これは非対話式のスクリプトで、設定ファイルにデフォルトを設定します。デフォルトのRed Hatカーネルを使っている場合は、お使いのコンピュータアーキテクチャ向けに出荷されているカーネルと同じになるように設定されます。いったん間違いのないデフォルトに設定し、そのあとで不要な機能を無効にするといった使い方ができます。
注意 | |
---|---|
kmod(詳しくは、the section called カーネルモジュールのロードを見てください)とカーネルモジュールを使うときは、設定の際、Yesと入力しなければなりません。kmod support とmodule version (CONFIG_MODVERSIONS) support に対して |
/usr/src/linux-2.4/.configファイルができたら、次にmake depコマンドを実行して、依存性を正しく設定します。
make cleanコマンドを実行し、構築用にソースツリーの準備をします。
モジュール形式のカーネルを構築する場合、次に/usr/src/linux-2.4/Makefileファイルを編集して、既存のカーネルを上書きしないようにします。ここで説明する方法を利用すると、トラブルの際、非常に簡単に回復させることができます。それ以外の用途について、詳しくはhttp://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.html(日本語の情報についてはJF プロジェクトのhttp://www.linux.or.jp/JF/JFdocs/INDEX-kernel.htmlなどもあります)か、お使いのLinuxシステム上の/usr/src/linux-2.4にあるMakefileを参照してください。
/usr/src/linux-2.4/Makefile中のEXTRAVERSION =で始まる行を編集し、その文字列の終わりに日付を加えて、名前が一意になるようにします。たとえば、バージョン2.4.2-0.1.21のカーネルをコンパイルしているのであれば、次のようにします。EXTRAVERSION = -0.1.21-feb2001。こうすれば、運用中のカーネルとバージョン2.4.2-0.1.21-12feb2001のカーネルという新旧2つのカーネルをシステムに同時に置くことができます。
make bzImageを実行して、カーネルを構築します。
make modulesを実行して、設定したモジュールをすべて構築します。
make modules_installを実行して、カーネルモジュールをインストールします(構築していない場合も)。コマンドの途中にある下線(_)を忘れないようにしてください。これで、カーネルモジュールは、ディレクトリパス/lib/modules/にインストールされます。これは、Makefileで指定したパス名です。上記の例でいえば、/lib/modules/2.4.2-0.1.21-12feb2001/となります。
SCSIアダプタがありSCSIドライバをモジュール化した場合は、新たにinitrd イメージを構築します(the section called initrdイメージの作成を参照してください。実用上、カスタムカーネルでSCSIドライバをモジュールにする理由はほとんどない点に注意)。initrdイメージは、これを作るべき特別な理由がない限り、作らないでください。また、それをlilo.confに追加しないでください。
make installを実行して、新しいカーネルとそれに付随するファイルを適切なディレクトリにコピーします。
今作ったばかりのカーネルは動かない可能性もありますから、元のカーネルを利用可能な状態のままにし、冗長ブートソースとする必要があります。それには、まず/etc/lilo.confファイルを更新し、/sbin/liloを実行します。
デフォルトの/etc/lilo.confファイルは、およそ次のようになっています。
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message linear default=linux image=/boot/vmlinuz-2.4.2-0.1.21 label=linux initrd=initrd-2.4.2-0.1.21.img read-only root=/dev/hda5 |
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message linear default=linux image=/boot/vmlinuz-2.4.2-0.1.21-12feb2001 label=linux initrd=initrd-2.4.2-0.1.21-12feb2001.img read-only root=/dev/hda5 image=/boot/vmlinuz-2.4.2-0.1.21 label=linux-old initrd=initrd-2.4.2-0.1.21.img read-only root=/dev/hda5 |
そして、/sbin/liloを実行して、この変更を有効にします。作業が順調であれば、次のようなメッセージが表示されます。
Added linux * Added linux-old |
これ以降、システム起動時にlinuxとlinux-oldという2つのLILOブートオプションが表示されるようになります。
新しいカーネル(linux)を起動するには、単にEnterキーを押すか、LILOの時間切れを待ちます。従来のカーネル(linux-old )を起動するときは、linux-oldを選び、Enter キーを押します。
コンピュータを再起動して、新しいカーネルの動作確認を始めます。ハードウェアが正しく検出できたかどうか、メッセージをよく見ます。