Linux Tips

Fedora 10でカーネルを再構築するには

北浦訓行
2009/2/18

 Fedora 8以降は、カーネルの再構築を行う手順が変わった。ここでは、Fedora 10でカーネルを再構築する方法を説明する。

 最初に、rootでログインして、再構築に必要なパッケージ(rpmdevtoolsyum-utils)をインストールしておく。

# yum install rpmdevtools yum-utils

 次に、一般ユーザーのアカウントでログインして、パッケージ再構築の準備を行う。rpmdev-setuptreeコマンドを実行すると、ホームディレクトリの下にrpmbuildディレクトリが作成され、さらにその下にBUILD、RPMS、SOURCES、SPECS、SRPMSの各サブディレクトリが作成される。

$ rpmdev-setuptree
$ ls ~/rpmbuild/
BUILD RPMS SOURCES SPECS SRPMS

 次に、yumdownloaderコマンドでカーネルソースをダウンロードする。原稿執筆時点での最新版は、kernel-2.6.27.12-170.2.5.fc10.src.rpmになる。

$ yumdownloader --source kernel
(省略)
$ ls
kernel-2.6.27.12-170.2.5.fc10.src.rpm

 カーネルソースがダウンロードできたら、rootでログインして、yum-builddepコマンドでカーネルソースの再構築に必要となるパッケージをインストールする。

$ su
パスワード: ←rootのパスワードを入力
# yum-builddep kernel-2.6.27.12-170.2.5.fc10.src.rpm
Loaded plugins: refresh-packagekit
module-init-tools-3.5-3.fc10.i386
patch-2.5.4-35.fc10.i386
(省略)
# exit
$

 続いて、rpmコマンドでカーネルソースをインストールする。

$ rpm -Uhv kernel-2.6.27.12-170.2.5.fc10.src.rpm
1:kernel 警告: ユーザ mockbuild は存在しません - root を使用します
(省略)

 これにより、rpmdev-setuptreeコマンドによって作成された~/rpmbuildディレクトリ下にカーネルソースが展開される。続いて、カーネルソースのツリーを用意する。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=`uname -m` kernel.spec

 カーネルソースのツリーは、~/rpmbuild/BUILD/kernel-<バージョン>/linux-<バージョン>.<アーキテクチャ>ディレクトリに作成される。

$ ls ~/rpmbuild/BUILD/kernel-2.6.27/linux-2.6.27.i686
COPYING config-debug config-powerpc64 drivers net
(省略)

 もし、カーネルソースにパッチを当てるなら、ここでソースツリーをコピーして、その作業を行うことになる。

 カーネルオプションを変更する場合は、カーネルソースのディレクトリに移動して、変更作業を行う。このあたりは、従来の手順とほとんど同じだ。バージョンやCPUアーキテクチャによってコピーするファイルが異なる。今回は最新カーネル(原稿執筆時点)に対して最も一般的なアーキテクチャであるi686を例にした。

$ cd ~/rpmbuild/BUILD/kernel-2.6.27/linux-2.6.27.i686
$ cp configs/kernel-2.6.27.12-i686.config .config
$ make oldconfig

 カーネルオプションを変更する際には、CUIバージョンとGUIバージョンを使用することができる。CUIの場合は、

$ make menuconfig

を実行する。この場合には、以下のような画面が表示される。

TeXbox
make menuconfig実行時の画面

 GUIの場合は、

$ make xconfig

を実行する。この場合には、以下のような画面が表示される。ただし、GUIの場合はqt3-develやlibXi-develなどのパッケージが必要となるため、あらかじめインストールしておかなければならない。

TeXbox
make xconfig実行時の画面

 カーネルオプションの変更が完了したら、kernel.specを変更してカスタムカーネルを作成する作業を行う。~/rpmbuild/SPECSディレクトリに移動して、テキストエディタでkernel.specを開く。

$ cd ~/rpmbuild/SPECS
$ vi kernel.spec

 「#% define buildid .local」という行があるので、先頭の「#」を削除して、「.local」をユニークな名称(ここでは「.NTFS_090201」)に変更する。

#% define buildid .local

%define buildid .NTFS_090202

【注意】
今回のkernel-2.6.27.12-170.2.5.fc10.src.rpmに含まれるkernel.specの「#% define buildid .local」は、「%」と「define」の間に空白が入っている。カーネルを再構築する際には、この空白を削除しなければならない。そうしないとエラーが発生する。

 次に、新しいカーネルをビルドする。この作業にはかなり時間がかかる。

$ rpmbuild -bb --target=`uname -m` kernel.spec

 新しいカーネルは、~/rpmbuild/RPMS/<アーキテクチャ>ディレクトリに作成される。その際には、kernel.specの「#% define buildid .local」を変更した名前が、rpmファイルの一部となる。例えば、今回は「%define buildid .NTFS_090202」としたので、以下のように、「kernel-2.6.27.12-170.2.5.NTFS_090202.fc10.i686.rpm」という名前のパッケージが作成される。

$ cd ~/rpmbuild/RPMS/i686
$ ls
kernel-2.6.27.12-170.2.5.NTFS_090202.fc10.i686.rpm
kernel-PAE-2.6.27.12-170.2.5.NTFS_090202.fc10.i686.rpm
(省略)

 あとはrpmファイルをインストールするだけだ。その際には、アップグレードオプション(-Uなど)を指定しないように注意が必要だ。

$ pwd
/home/<ユーザーアカウント>/rpmbuild/RPMS/i686
$ su
パスワード: ←rootのパスワードを入力
# rpm -ihv kernel-2.6.27.12-170.2.5.NTFS_090202.fc10.i686.rpm

 これで新しいカーネルのインストールは完了だ。GRUBにも新しいカーネルの設定が追加されるが、デフォルトではそのカーネルが起動しないようになっているので注意が必要だ。手動でカーネルを切り替える方法は「Fedora 10でGRUBの起動メニューを表示するには」を参照。

Linux Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間