Recompile x86_64 kernel for CentOS 6.4

Hi, due to some changes in the official CentOS 6 kernel like the integration of IPMI into the kernel (boot hanging bug) and the preemptive scheduling to "desktop" instead of "server" (which resulted in poorer performance) i decided to recompile the kernel.

Here is a small howto if you want to recompile your centos stock kernel with other options:

  1. create building tree as non-root user
    # su <user>
    # mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
    # echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
    # exit
  2. install needed packages:
    # yum groupinstall "Development Tools"
    # yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel
    # yum install rpm-build redhat-rpm-config asciidoc hmaccalc
    # yum install binutils-devel elfutils-libelf-devel newt-devel zlib-devel ncurses-devel
    # yum install xmlto python-devel
  3. change user (NEVER RECOMPILE AS ROOT):
    # su <user>
  4. install source rpm:
    # rpm -ivh http://vault.centos.org/6.4/updates/Source/SPackages/kernel-2.6.32-358.2.1.el6.src.rpm
    (6.4 -> centos version, kernel-2.6.32-358.2.1.el6.src.rpm -> kernel version)
  5. prepare source build tree
    # cd ~/rpmbuild/SPECS
    # rpmbuild -bp –target="x86_64" kernel.spec
  6. edit rpmbuild/SPECS/kernel.spec and replace line 18 with your custom build id:
    # %define buildid .custom.NOIPMI.SERVER
    (-> kernel-2.6.32.358.2.1.custom.NOIPMI.SERVER.x86_64.rpm)
  7. copy over old kernel config:
    # cd ~/rpmbuild/BUILD/kernel-2.6.32-358.2.1.el6/linux-2.6.32-358.2.1.el6.x86_64
    # cp /boot/config-2.6.32-358.2.1.el6.x86_64 .config
  8. now chane the kernel config to your desires:
    # make clean
    # make menuconfig
  9. then copy the config file to your SOURCE directory:
    # cp .config configs/kernel-2.6.32-x86_64.config
    # cp configs/* ~/rpmbuild/SOURCES
  10. launch the compile process:
    # cd ~/rpmbuild/SPECS
    # rpmbuild -bb –with baseonly –without debug –without debuginfo –target="x86_64" kernel.specs

​Now there should be some cryptic output to the screen. Lean back and have a coffee, the compilation process can take some time. Depending on your hardware this can take between 30 min and 3 hours (apparemtly up to 9 hours on a PentiumIII).

The compiled kernel can be found in the RPMS folder.