CentOSのカーネルの再構築をしてみる

追記:UbuntuDebian系)のカーネル再構築は「Ubuntuのカーネル再構築」を参照。

Linuxカーネルの再構築はしたことがなかったのでやってみた。

主に参考にしたWebページは、「CentOS 5 カーネルの再構築方法」と「How To Compile A Kernel - The CentOS Way」。

2〜3回やってみると結構簡単な作業である。要約すると次のようになる。

  1. 環境の整備(開発環境パッケージなどの追加)
  2. ソースコード・パッケージのダウンロード
  3. ソースコードの展開
  4. カーネルの構成設定ファイル(.config)の作成
  5. make
  6. ファイルの設置

それぞのステップは大体1つか2つのコマンドで実行できるので、作業としては単純である。

環境の整備(開発環境パッケージなどの追加)

「ソフトウェアの追加と削除」などを使って開発環境を整える。必要なのは、「開発ツール」「開発ライブラリ」と「kernel-devel」「kernel-headers」。

ソースコード・パッケージのダウンロード

ディストリビューションによって方法は異なるようである。Fedoraであれば、yum-utilsの中のyumdownloadを使ってrpmパッケージをダウンロードできる。
CentOSの場合はCentOSミラーサイトなどからftpコマンドかブラウザで直接ダウンロードしてくる。私の場合は、

http://ftp.riken.jp/Linux/centos/5.0/updates/SRPMS/

から、最新のカーネルである「kernel-2.6.18-8.1.8.el5.src.rpm」をダウンロードしてきた。

ソースコードの展開

必要なコマンドは2つ。先ずはパッケージを展開する。

# rpm -ivh kernel-2.6.18-8.1.8.el5.src.rpm

(ユーザIDがないとう警告が出るが問題はない。自動的にrootで展開される。)
このコマンドを実行すると /usr/src/redhat の下にソースコードを再構成するためのキットが展開されるので、次にソースコードを再構成する。

# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target x86_64 kernel-2.6.spec

rpmbuild は /usr/src/redhat/SOURCES の下にあるtar形式(bzip2圧縮されている)のソースを /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64 に展開し、更に /usr/src/redhat/SOURCES の下にあるパッチを当てて最新の状態する。

これから作るカーネルを今動いているカーネルと区別するために名前を変えておく。

# cd usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
# vi Makefile

EXTRAVERSION = -8.1.8.el5-x1


次に、展開されたソースコードを初期化する。

# make clean && make mrproper

カーネルの構成設定ファイル(.config)の作成

これから作るカーネルのパラメータを設定ための構成設定ファイル作る。雛形として/boot/config-2.6.18-8.1.8.el5 (現在起動しているカーネルの構成設定ファイル)をコピーして、その内容を反映する。

# cp /boot/config-2.6.18-8.1.8.el5 .config
# make oldconfig

次に構成設定ファイルに変更を加えるが、メニュー形式で設定を変更する。

# make menuconfig

make

# make

ファイルの設置

作られたカーネルやモジュール類を適切な場所に設置する。

# make modules_install
# installkernel 2.6.18-8.1.8.el5-x1 arch/x86_64/boot/bzImage System.map

以上で作業は終了。リブートすれば良い。(リブート時にgrubのメニューから今作ったカーネルを指定してブートする。installkernel でgrub.confの中に項目が追加されている。)