Installing a Vanilla Linux Kernel on Fedora

Updated on 2017-12-28

Installing a Vanilla Linux Kernel on Fedora is quite simple (once one knows how to do it..)

Configuring & Building Linux

One can start by cloning Torvalds' Linux repository to fetch the latest master (or we could fetch the latest stable release) :

$ git clone https://github.com/torvalds/linux.git
$ cd linux

I like setting EXTRAVERSION in the Makefile to be able to identify which kernel I am testing. That can be done by opening the Makefile with one's favorite editor or replacing the EXTRAVERSION line with sed:

$ sed -i "s/^EXTRAVERSION = .*$/EXTRAVERSION = name_of_my_version/" Makefile

Now we need to generate the .config Linux kernel configuration file. We can start from the default one:

$ make defconfig

Or we can reuse configuration files from the local installation with:

$ make olddefconfig

Note that make help provides the list of possible make commands.

For computers using (U)EFI, one may need to update the .config file to support EFI handover. This is done by setting EFI stub support when configuring the kernel (for instance with make menuconfig).

Processor type and features  --->
    [*] EFI runtime service support
    [*]   EFI stub support

Sources: stackoverflow and gentoo linux wiki.

Without that option activated, I ended up having the following error message when trying to boot my new kernel:

error: kernel doesn't support EFI handover

This option isn't required when building a kernel for a virtual machine.

In order to compile the kernel, (at least) the following dependencies are required:

  • git
  • gcc
  • ncurses-devel
  • elfutils-libelf-devel
  • openssl-devel
  • perl-interpreter
  • rpm-build (if building rpm packages)

Then we can build the kernel as simply as that:

$ make

The straight forward approach to install the Kernel, if it has been built on the target machine is:

$ sudo make install
$ sudo make modules_install

We can now reboot on the newly built Kernel.

Building RPM package

We can even make RPMs to install the new kernel on any RPM based machine:

$ make binrpm-pkg

The packages are available in the ~/rpmbuild/RPMS/x86_64 directory:

$ ls ~/rpmbuild/RPMS/x86_64/
kernel-4.14.0efistub+-3.x86_64.rpm  kernel-headers-4.14.0efistub+-3.x86_64.rpm
$

The newly built kernel can be installed with the standard rpm install command:

$ cd ~/rpmbuild/RPMS/x86_64/
$ sudo rpm -i kernel-4.14.0efistub+-3.x86_64.rpm

That's it, when rebooting, the new kernel is available in the grub menu (together with the previously installed kernels) .

$ dmesg | head -3
[    0.000000] microcode: microcode updated early to revision 0x1c, date = 2015-02-26
[    0.000000] Linux version 4.14.0efistub+ (florent@amn) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) #3 SMP Sun Nov 19 22:52:23 CET 2017
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.14.0efistub+ root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet LANG=en_US.UTF-8

Tested with Linux 4.14.0 hash ed30b147e1f6e396e70a52dbb6c7d66befedd786