2017年7月9日日曜日

CentOS-7 kernel build方法

CentOSは、Redhatのクローンらしくて、個人でbuildするのは、筋違いのようである。
開発したいのならfedoraでやろうということのようである。
https://wiki.centos.org/HowTos/Custom_Kernelにかかれていることをメモしとく。

開発環境の構築
$su
#yum groupinstall "Development Tools"
#yum install ncurses-devel
#yum install qt-devel (This is only necessary if you wish to use make xconfig instead of make gconfig or make menuconfig.)
#yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel
#yum install kernel-devel
#yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto 
#yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
#yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
#exit


ソースコードの取得

$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
(この二行は実行しなくてもできた)

下記の場所からパッケージを探す
http://vault.centos.org/7.N.YYMM/os/Source/SPackages/
http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/


$ rpm -i http://vault.centos.org/7.3.1611/updates/Source/SPackages/kernel-3.10.0-514.26.2.el7.src.rpm  2>&1 | grep -v exist

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

以上でソースコードが ~/rpmbuild/BUILD に作られる

モジュール関係でエラーが発生する場合は、yumで追加、updateする。


kernel specification fileの修正

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

%define buildid .your_identifier

注意 %とdefineの間にスペースを入れない
  buildidーを変更しないと現在動作中のカーネルを書き換えてしまう。


$rpmbuild -bb --target=`uname -m` kernel.spec 2> build-err.log | tee build-out.log

~/rpmbuild/RPMS/`uname -m`/ にrpmファイルができる