普段はCentOSとUbuntuを使用しているのですが、Ubuntuの場合は最新のカーネルパッケージについては頻繁にビルドされたものが公開されるのでそれを適用していたのですが、CentOSの場合、RHELからのバックポートがあるとはいえ、未だに2.6系なので、本当に最新の機能を使用したり、必要な機能が使えてなかったりする場合があるので、この際なので、独自にビルドしてみることにしました。
手順
1. ビルド用のディレクトリを作成する。
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}/
2. ビルドに必要なパッケージ類を導入する。
yum -y groupinstall "Development tools"
yum -y install ncurses-devel bc wget
3. 最新のカーネルソースファイルをダウンロードし、解凍する。
cd rpmbuild/SOURCES/
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.12.5.tar.xz
xz -cd linux-3.12.5.tar.xz | tar xf -
4. yumで提供されている最新のカーネルの.configファイルを使用してカーネルの再構築を行います。
cd linux-3.12.5
cp /boot/config-2.6.32-431.el6.x86_64 ./.config
5. 下記のコマンドを実行し、カーネルコンパイルのオプションの差異を確認する。ここではとりあえずEnterを長押しします。
make oldconfig
6. 別途カーネルコンパイルのオプションを変更する場合は、以下のコマンドを実行し、必要がある/なしを選択し、configを修正する。
make menuconfig
※例えば:[Kernel hacking]-[printk and dmesg options]-[Show timing information on printks]
→dmesgに経過時間を表示するか否か
Device Drivers --->
[*] Staging drivers --->
Compressed RAM block device support
7. 以下のファイルを編集し、バージョン情報など必要事項を修正する。
VERSION = 3
PATCHLEVEL = 12
SUBLEVEL = 5
EXTRAVERSION = <リビジョン番号>
NAME = One Giant Leap for Frogkind
8. カーネルをビルドする。環境によって時間がかかるので注意すること。
make rpm
9. /rpmbuild/RPMS/<アーキテクチャ名>
以下にrpmパッケージが作成されていることを確認する。
$ cd ~/rpmbuild/RPMS/x86_64
$ ll
total 344608
-rw-r--r-- 1 root root 246168504 Dec 13 02:04 kernel-3.12.5_kometch_build_20131213_01-1.x86_64.rpm
-rw-r--r-- 1 root root 105793972 Dec 13 02:06 kernel-devel-3.12.5_kometch_build_20131213_01-1.x86_64.rpm
-rw-r--r-- 1 root root 909736 Dec 13 02:04 kernel-headers-3.12.5_kometch_build_20131213_01-1.x86_64.rpm
10. 作成されたパッケージをインストールする。
$ rpm -Uvh ./kernel-*.rpm
Preparing... ########################################### [100%]
1:kernel-headers ########################################### [ 33%]
2:kernel-devel ########################################### [ 67%]
3:kernel ########################################### [100%]
11. 一度再起動を実施し、起動時のカーネル選択画面で先ほど導入したカーネルを選択する。
12. 正常に起動してくることを確認したら、以下のファイルを編集し、boot時にインストールしたカーネルが選択されるように修正する。
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.12.5-kometch-build-20131213-01)
以上でカーネルのパッケージ作成手順は終了です。このパッケージについてはカーネルコンパイルのオプション次第で他のマシンなどでも使いまわすことができるので、必要があれば使用してみるのもいいと思います。
詳解 Linuxカーネル 第3版 (2007/02/26) Daniel P. Bovet、Marco Cesati 他 |