Running a custom compiled Linux Kernel is always useful, specially when you are looking to enable or disable specific Kernel features, which are not available in default distribution-supplied kernels.
In this article, I will explain how to compile and use latest Linux Kernel from the sources in CentOS 7 distribution (instructions provided here are also works on RHEL and Fedora).
If you don’t want to go through these complex setup, then follow our easy article that explains How to Install or Upgrade to Kernel on CentOS 7 using third-party RPM repository.
Install Required Packages for Kernel Compilation
First, make sure to update your software package repositories, install the development tools needed for compiling a kernel, and install the ncurses library using the following yum command.
# yum update # yum install -y ncurses-devel make gcc bc bison flex elfutils-libelf-devel openssl-devel grub2
Compile and Install Kernel in CentOS 7
Download the latest Kernel 4.17 sources using wget command under /usr/src/ directory or you can also download the latest kernel by going to kernel.org.
# cd /usr/src/ # wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.17.11.tar.xz
Extract the archived files and change directories using following commands.
# tar -xvf linux-4.17.11.tar.xz # cd linux-4.17.11/
Configure the Kernel in CentOS 7
The Kernel must be correctly configured with the following required configuration options within the CentOS 7 environment.
CONFIG_KVM_GUEST=y CONFIG_VIRTIO_PCI=y CONFIG_VIRTIO_PCI_LEGACY=y CONFIG_BLK_DEV_SD CONFIG_SCSI_VIRTIO=y CONFIG_VIRTIO_NET=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y
I strongly suggest you to copy the running Kernel configuration (
.config) from the /boot directory to new kernel linux-4.17.11 directory.
# cp -v /boot/config-3.10.0-693.5.2.el7.x86_64 /usr/src/linux-4.17.11/.config
Now run the
make menuconfig command to configure the Linux kernel. Once you execute the below command a pop up window appears with all the menus. Here you can enable or disable certain kernel features. If you unfamiliar with these menus, just hit
ESC key to exit.
# cd /usr/src/linux-4.17.11/ # make menuconfig
Once your kernel configuration options are set, click on Save to save the configuration interface and exit from the menu.
Compile the Kernel in CentOS 7
Before starting kernel compilation, make sure your system has more than 25GB of free space on the file system. To confirm, you can check the file system free space using df command as shown.
# df -h
Now compile and install the kernel and modules using following commands (it may take several hours). The compilation process place files under /boot directory and also make a new kernel entry in your grub.conf file.
# make bzImage # make modules # make # make install # make modules_install
Once the compilation completes, reboot the system and verify newly installed Kernel.
# uname -sr
That’s it. I hope this article will be much helpful to you all. If you’re facing any problems or difficulties while compiling or installing kernel feel free to ask or post your questions using our comment form below.