Linuxカーネルビルド方法(rpm系/CentOS)
- ソースパッケージからのビルド
- 最新ソースからのビルド
事前準備
ソースパッケージを取得する。
$ 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
$ 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再起動を行い、新しいカーネルで起動する。