Linuxカーネルビルド方法(rpm系/CentOS)

  1. ソースパッケージからのビルド
  2. 最新ソースからのビルド

事前準備

ソースパッケージを取得する。

$ yumdownloader --source kernel

ビルドに必要なパッケージなどをインストールする。

$ sudo yum-builddep kernel-2.6.18-164.15.1.el5.src.rpm
$ sudo yum install kernel-devel rpm-build ncurses-devel qt-devel

ビルド用ディレクトリを作成する。今回は、~/work/rpmbuild以下とした。

$ mkdir -p work/rpmbuild/{BUILD, RPMS, SOURCES, SPECS, SRPMS}
$ echo '%_topdir %(echo $HOME)/work/rpmbuild' > .rpmmacros

ソースパッケージからのビルド

カーネルのソースパッケージをインストールする。

$ rpm -i ./kernel-2.6.18-164.15.1.el5.src.rpm

カーネルソースツリーを作成する。

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

現行カーネルのconfigをコピーし、.configを作成する。

$ cd ../BUILD/kernel-2.6.18/linux-2.6.18.x86_64
$ mv .config .config.org
$ cp /boot/config-`uname -r` ./.config

menuconfigを使用して、カーネルを設定する。リビジョン番号は、specファイルに設定する。

$ make menuconfig
$ cd ~/work/rpmbuild/SPECS/
$ vi kernel-2.6.spec
%define buildid <リビジョン番号>

カーネルをビルドする。ここで、--with/--withoutでビルドオプションを指定できる。指定できるオプションは、specファイルの始めの方に記載されている。

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

~/work/rpmbuild/RPMS/<アーキテクチャ名>以下にrpmパッケージが作成されているので、インストールする。

$ cd ../RPMS/x86_64
$ sudo rpm -ivh ./kernel-2.6.18-164.15.1.el5.20100324.0635.x86_64.rpm

カーネルパッケージをインストールすると、ブートローダ(GRUB)設定が更新されるので、OS再起動を行い新しいカーネルで起動する。

最新ソースからのビルド

http://www.kernel.org/から最新のカーネルソースをダウンロードし、ソースを展開する。

$ cd ~/work/rpmbuild/SOURCES
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.bz2
$ tar jxvf linux-2.6.33.1.tar.bz2
$ cd linux-2.6.33.1

現行カーネルのconfigをコピーし、.configを作成する。

$ make clean && make mrproper
$ cp /boot/config-`uname -r` ./.config

oldconfigを使用して、新たに追加されたパラメータを設定する。

$ make oldconfig

menuconfigを使用して、カーネルを設定する。リビジョン番号は、Makefileファイルに設定する。

$ make menuconfig
$ vi Makefile
EXTRAVERSION = <リビジョン番号>

カーネルをビルドする。

$ make rpm

~/work/rpmbuild/RPMS/<アーキテクチャ名>以下にrpmパッケージが作成されているので、インストールする。

$ cd ~/work/rpmbuild/RPMS/x86_64
$ sudo rpm -ivh ./kernel-2.6.33.1.20100325.0614-1.x86_64.rpm

initrdを作成し、ブートローダ(GRUB)を設定する。

$ sudo mkinitrd /boot/initrd-2.6.33.1.20100325.0614.img 2.6.33.1.20100325.0614
$ sudo vi /boot/grub/menu.lst
title CentOS (2.6.33.1.20100325.0614)
	root (hd0,0)
	kernel /vmlinuz-2.6.33.1.20100325.0614 ro root=/dev/VG_root/LV_root
	initrd /initrd-2.6.33.1.20100325.0614.img

OS再起動を行い、新しいカーネルで起動する。