本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。
このトピックに関連した設定や試験問題を解く際には、以下の項目がポイントになります。
【1】カーネルコンフィグレーションの概要を把握しておく
カーネル(kernel:核)はシステム起動時にメモリにロードされ、その後メモリに常駐し、CPUやメモリなどシステム資源の管理やデバイスの制御、プロセスのスケジューリングなどを行う、文字どおりにLinuxオペレーティングシステムの核となるプログラムです。
カーネルは一般的に、/bootディレクトリの下に「vmlinuz」あるいは「vmlinuz-バージョン名」(例:/boot/vmlinuz-2.6.23.1-42.fc8)のファイルに格納され、システム起動時にGRUBやLILOなどのブートローダによってメモリにロードされます。またシステム立ち上げ後、必要に応じて動的にカーネルのアドレス空間にロードされるモジュールがあり、これは「/lib/modules/カーネルバージョン」(例:/lib/modules/2.6.23.1-42.fc8)ディレクトリの下に、種類ごとにサブディレクトリで分類され置かれています。このモジュールは動的にロード可能という意味でローダブルモジュール(loadable module)あるいは単にモジュールと呼ばれます。
このカーネル、あるいはローダブルモジュールを作り直す作業がカーネルコンフィグレーションです。カーネルコンフィグレーションは、カーネルの機能追加や不必要な機能の削除、またハードウェア構成変更に伴うデバイスの追加や削除に対応するために行います。
カーネルコンフィグレーションには、カーネルのソースと、ソースをコンパイルするためのユーティリティが必要なので、これを用意します。必要な開発ユーティリティはmake、Cコンパイラgcc、アセンブラas、リンカldなどがあり、今回取り上げるFedora 8の場合は、RPMパッケージとしてのmake、gcc、binutilsなどを、インストールする必要があります。
Linuxディストリビューションによっては、インストールCD/DVDにカーネルソースコードが含まれている場合と含まれていない場合があり、最近は含まれていない場合が多いようです。Fedora 8の場合は含まれていないので、Fedoraプロジェクトのダウンロードサイトあるいはそのミラーサイトから、Fedora 8カーネルのソースパッケージをダウンロードして、インストールしましょう。
kernel-2.6.23.1-42.fc8.src.rpm | - |
Xen非対応のカーネルソース |
kernel-xen-2.6-2.6.21-2950.fc8.src.rpm | - |
Xen対応のカーネルソース |
また、カーネル開発プロジェクトのサイトから、Linuxディストリビューションによってカスタマイズされていない、オリジナルのカーネルソースをダウンロードして使うこともできます。
ソースファイルを眺めると、リーナス・トーバルス(Linus Torvalds)氏をはじめ、たくさんの開発者が寄与したGPLを基に開発・配布されているオープンソースの典型であり、壮大なプロジェクトであることが実感できるでしょう。
(1)ダウンロードしたカーネルソースは一般的には/usr/srcの下に展開します(空き容量さえあれば、どこのディレクトリでも問題ありません)。
# rpm -ivh kernel-2.6.23.1-42.fc8.src.rpm # cd /usr/src # bunzip2 -c /usr/src/redhat/SOURCES/linux-2.6.23.tar.bz2 | tar xvf - |
(2)ソースを展開したディレクトリに移動します。
# cd /usr/src/linux-2.6.23 # ls COPYING MAINTAINERS arch fs kernel scripts CREDITS Makefile block include lib security Documentation README crypto init mm sound Kbuild REPORTING-BUGS drivers ipc net usr |
このディレクトリの下に、種類ごとにサブディレクトリに分類されてソースコードが置かれています。コンフィグレーションの手順はこのディレクトリの下のMakefileとそこからincludeされた複数のファイルに記述されており、それをmakeコマンドで実行します。
(3)makeコマンドを実行します。
Makefileのどの部分を実行するかを、make mrproper、make bzImage、make installなど、makeの引数で指定し、順番に実行していきます。引数として指定するmrproper、bzImage、installをmakeのターゲットと呼びます。
(例)カーネル2.6で初期状態から実行する例
# make mrproper | => | 以前のカーネルコンフィグレーションで生成されたすべてのファイルを削除して初期状態に戻す |
---|---|---|
# make menuconfig | => | 新しいカーネルの構成を記述したコンフィグレーションファイル.configを作る。ほかに、make config、make xconfig、make gconfig、make defconfigなどの方法がある |
# make | => | .configに従い、カーネルとローダブルモジュールを生成する |
# make modules_install | => | ローダブルモジュールを/lib/modulesの下にインストールする |
# make install | => | カーネルを/bootの下にインストールする |
(例)カーネル2.6で既存のコンフィグレーションファイルを利用する例
# cp /boot/config-2.6.23.1-42.fc8 ./.config | => | 現在使用しているカーネルのコンフィグレーションファイル/boot/config-2.6.23.1-42.fc8を.configにコピーする |
---|---|---|
# make clean | => | 以前のコンフィグレーションで生成されたファイルを削除する。ただし、.configは削除しない |
# make oldconfig | => | .configを基に関連ファイルを設定する。新たに設定の必要な項目があれば設定する |
# make | => | .configに従い、カーネルとローダブルモジュールを生成する |
# make modules_install | => | ローダブルモジュールを/lib/modulesの下にインストールする |
# make install | => | カーネルを/bootの下にインストールする |
この結果、最終的に/bootの下に新しいvmlinuzが作られ、/lib/modulesの下にカーネルバージョンのディレクトリができて、その下にローダブルモジュールが置かれます。
Copyright © ITmedia, Inc. All Rights Reserved.