CentOS 5 上で最新の Linux カーネルをコンパイルする
@IT の Linux Kernel Watch は、いつも楽しく読ませて頂いています。Linux カーネルには次々と魅力的な拡張が為されていますが、安定性を追求する CentOS では中々、新しいカーネルが提供されません。そこで、今回はカーネルをソースコードから自分でコンパイルしてみます。今回は以下の通り、CentOS 5 x86_64 を使いました。
1 2 |
|
また、開発ツールや開発ライブラリは予め、インストールしてあります。
ソースコードの取得¶
The Linux Kernel Archives から最新のソースコードをダウンロードし、展開します。現時点で安定版の最新カーネルは 2.6.31.1 でした。
1 2 3 |
|
カーネルパラメータの指定¶
次に "make mrproper" でカーネルソースを初期化します。
1 |
|
横着する為に、現カーネルのコンフィグを新カーネルへ引き継ぎます。現カーネルのコンフィグ(.config)を引き継ぎ、新カーネルへ差分を取り出して設定するには "make oldconfig" します。大量に質問されますが、ENTER キーを押しっぱなしにして、とりあえず全てデフォルトのままにしておきます。
1 2 |
|
新カーネルでの新しい機能を設定する為に、"make menuconfig" します。
1 |
|
ncurses がインストールされていれば ASCII 文字列で作成されたメニューが表示されます。今回はメニューから以下を有効にします。
- [General setup]
- [enable deprecated sysfs features to support old userspace tools] にチェック
- [Networking support]
- [Networking options]
- [Network packet filtering framework (NetFilter)] [Core Netfilter Configuration] の中のすべての項目 [IP: Netfilter Configuration] の中のすべての項目 [IPv6: Netfilter Configuration] の中のすべての項目 [IP virtual server support] の中のすべての項目
- [Networking options]
コンパイルと RPM パッケージの作成¶
ここまでの作業が完了したら、カーネルをコンパイルします。今回は単純にコンパイルするのではなく、別の CentOS 5 にも流用出来るよう、"make rpm" で RPM パッケージを作成しておきます。カーネルのコンパイルには非常に時間がかかり、端末のスペックにも依存しますが、私の環境では 40 分ほどかかりました。
1 |
|
コンパイルが完了したら、パッケージは以下に作成されます。
- RPM パッケージ
- /usr/src/redhat/RPMS/x86_64/
- SRPM パッケージ
- /usr/src/redhat/SRPMS/
インストール¶
RPM パッケージをインストールします。
1 |
|
インストールが完了しても、まだ新カーネルで起動するには準備が足りません。次は mkinitrd で起動用の RamDisk を作成します。
1 |
|
上記のコマンドが完了すると "/boot/initrd-2.6.36.1.img" というイメージが作成されます。最後に、起動時に表示される grub のメニューに新カーネルが表示されるよう、/boot/grub/grub.conf へ下記を追記します。私の環境では grub.conf 中で"default=0" 、つまり「一番、上に記載してあるカーネルで起動する」と定義してあったので、下記は grub.conf のカーネル定義部分のうち、一番上に記載します。
1 2 3 4 |
|
これで OS を再起動すると、新しいカーネルで立ち上がりました。
1 2 |
|
参考¶
以下を参考にさせて頂きました。