===== building as RPM =====
My notes on compiling the RHEL kernel on RHEL7. Takes 90min on 4 cores 2.8Gzh with 6GB of RAM.
https://fedoraproject.org/wiki/Building_a_custom_kernel/Source_RPM
# lets start in registering the system and activate
# the devel repos
subscription-manager register --username=rhn-support-chorn \
--name=chorn-rhel7-host
subscription-manager list --all --available >allsubs
less allsubs
subscription-manager subscribe --pool=
subscription-manager repos --disable='*' \
--enable=rhel-7-server-extras-rpms \
--enable=rhel-7-server-rpms \
--enable=rhel-7-server-optional-rpms
# now install dependencies
yum groupinstall -y "Development Tools"
yum install -y ncurses-devel qt-devel hmaccalc zlib-devel \
binutils-devel elfutils-libelf-devel rpmdevtools \
yum-utils bc xmlto asciidoc python-devel newt-devel \
pesign elfutils-devel audit-libs-devel numactl-devel \
pciutils-devel perl-ExtUtils-Embed.noarch java-devel \
asciidoc newt-devel pesign pciutils-devel
rpmdev-setuptree
# echo '%_topdir /root/rpmbuild' >~/.rpmmacros
cat .rpmmacros
# fetch kernel sources and verify if rpmbuild prepare is ok
yumdownloader --source kernel
rpm -ivh kernel-3.10.0-*
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec
# lets verify if we got the expected directories
ls -d /root/rpmbuild/BUILD/kernel-3.10.0-*
ls -d /root/rpmbuild/BUILD/kernel-3.10.0-*/linux*
# lets start the build
cd ~/rpmbuild/
rpmbuild -bb --target=x86_64 SPECS/kernel.spec
===== building from source =====
# lets start in registering the system and activate
# the devel repos
subscription-manager register --username=rhn-support-chorn \
--name=chorn-rhel7-host
subscription-manager list --all --available >allsubs
less allsubs
subscription-manager subscribe --pool=
subscription-manager repos --disable='*' \
--enable=rhel-7-server-extras-rpms \
--enable=rhel-7-server-rpms \
--enable=rhel-7-server-optional-rpms
# now install dependencies
yum groupinstall "Development Tools"
yum install ncurses-devel qt-devel hmaccalc zlib-devel \
binutils-devel elfutils-libelf-devel rpmdevtools \
yum-utils bc xmlto asciidoc python-devel newt-devel \
pesign elfutils-devel audit-libs-devel numactl-devel \
pciutils-devel perl-ExtUtils-Embed.noarch \
asciidoc newt-devel pesign pciutils-devel
# get and extract kernel sources
cd /usr/src
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.13.tar.xz
tar xJf linux-4.14.13.tar.xz
ln -s linux-4.14.13 linux
# configure, using the kernel config from RHEL as
# starting point
cd linux
cp /boot/config-$(uname -r) .config
# the following will ask you just about the new/unanswered
# options. If you feel lucky, just press to stay
# with the suggested default.
make oldconfig
# build the kernel
make -j3
make modules_install
# deloys /boot/vmlinuz pointing to your new kernel,
# and /boot/initrd to the initramfs.
make install
# create grub2 entry
grub2-mkconfig >/boot/grub2/grub.cfg
reboot
===== patch =====
### minimal specfile changes for a patch
$ diff kernel.spec.org kernel.spec
6a7
> %define buildid .local
377a379,380
> Patch1: nfs4.1_server_trunking_disc-fix2.patch
>
686a690
> ApplyPatch nfs4.1_server_trunking_disc-fix2.patch
### a small patch, example
$ cat ../SOURCES/nfs4.1_server_trunking_disc-fix2.patch
diff -Naur ./fs/nfs/client.c ../nfs.org2/client.c
--- a/fs/nfs/client.c 2017-04-17 05:24:37.714782986 +0200
+++ b//fs/nfs/client.c 2017-04-17 05:27:53.642782986 +0200
@@ -433,7 +433,7 @@
static bool nfs_client_init_is_complete(const struct nfs_client *clp)
{
- return clp->cl_cons_state != NFS_CS_INITING;
+ return clp->cl_cons_state <= NFS_CS_READY;
}
int nfs_wait_client_init_complete(const struct nfs_client *clp)
### building the modified kernel
$ rpmbuild -bp --target=$(uname -m) kernel.spec