CentOS 6 – How to Compile Realtime Kernel from RHEL 6 MRG Sources

centos6kernelrhel6

I'm trying to compile kernel-rt-2.6.33.9-rt31.75.el6rt.src.rpm from RHEL6 MRG source RPMs on Centos 6 x86_64 system.

It's first time I'm doing this, so I did research on how to do this properly. From what I found, I did:

rpm -ihv kernel-rt-2.6.33.9-rt31.75.el6rt.src.rpm 
cd ~/rpmbuild/SPECS
nano kernel-rt.spec 
rpmbuild -bb kernel-rt.spec 2> build-err.log | tee build-out.log

in kernel-rt.spec I've disbleed compilation of variants I don' need – ie compile only rt and firmware. Also defined not to build debuginfo.

After compilation finished, I've got in ~/rpmbuild/RPMS/x86_64/ two files:

kernel-rt-2.6.33.9-rt31.75.el6rt.x86_64.rpm
kernel-rt-devel-2.6.33.9-rt31.75.el6rt.x86_64.rpm

but when I tried to install kernel, I got error message:
$ sudo rpm -ihv kernel-rt-2.6.33.9-rt31.75.el6rt.x86_64.rpm
error: Failed dependencies:
kernel-rt-firmware >= 2.6.33.9-rt31.75.el6rt is needed by kernel-rt-2.6.33.9-rt31.75.el6rt.x86_64

There was no folder ~/rpmbuild/RPMS/noarch – where I would expect it to show up.

Also, I've tried rpmbuild --rebuild kernel-rt-2.6.33.9-rt31.75.el6rt.src.rpm, but got same results…

What am I doing wrong?
I've seen this question, but it suggests what I tried already and I want to build kernel myself, not use pre-built from SLC.

Best Answer

I'd still recommend using the precompiled realtime kernels if you're not making any drastic driver changes or other optimizations, but if you need to build your own, do the following to generate the proper packages.

rpmbuild -ba --without debug kernel.spec

This builds your kernel.

rpmbuild -ba --target noarch --with firmware --without debug --without doc --without perftool --without perf kernel.spec 

This builds the kernel-rt-firmware package.