One of the biggest draws to using Linux is its easy customization and one of the most fun things to customize is the Kernel itself, the heart of the Linux operating system.
Chances are that you will most likely never have to compile your own kernel. The one that ships with your distribution and updates via your package management system is usually good enough, but there are times when it might be necessary to recompile the kernel.
Some of these reasons might be special hardware needs, the desire to create a monolithic kernel instead of a modularized one, optimizing the kernel by removing useless drivers, running a development kernel, or simply learning more about Linux.
In this case, we are going to compile a newly released kernel on Debian systems that includes several new features, such as new drivers for the graphics cards, and offers significant improvements to the filesystem.
How to Compile Kernel in Debian
To get started, we are going to need some packages, namely build-essential and kernel headers.
sudo apt update sudo apt install build-essential linux-headers-$(uname -r)
Now, visit the official kernel website to download the desired kernel version. Alternatively, you can use the following commands to download the source directly.
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.tar.xz tar -xvf linux-6.7.tar.xz cd linux-6.7/
Now, we will need to configure the kernel, it is advisable to begin with the configuration currently in use and build upon it. To accomplish this, we’ll copy the existing configuration from the /boot directory to the current working directory and save it as .config.
cp /boot/config-`uname -r` .config
To start with the actual configuration process, you have one of two options.
- If you have X11 installed, you can run
make xconfig, and have a nice GUI menu to assist you as you configure your Kernel.
- If you are running in a CLI environment, you can run make
menuconfig, but it will need the libncurses5-dev package installed to use it.
If you are going with a cli environment, make sure to install the libncurses5-dev package to start the kernel configuration process as shown.
apt install libncurses5-dev make menuconfig
As you will see, once you are in the configuration of your choice, there are a ton of different options available for your Kernel. In fact, there are far too many for the scope of this tutorial.
When selecting Kernel options, the best way is by trial and error, and doing plenty of Googling, which is the best way to learn. If you are simply just trying to update your Kernel to the most recent version, you don’t have to change anything and can simply select “Save Configuration”. Since we copied the current kernel’s configuration file to the new kernel’s
Be mindful that “Kernel module loader” is selected in “Loadable module support”. If it is not, and you are using kernel modules, it can seriously mess things up.
Now initiate the kernel compilation process using the following commands, which will compile the kernel, install modules, and copy the necessary files to the boot directory.
make make modules_install make install
Once installed, you simply reboot, and select the new kernel from your GRUB menu.
Be sure to pay close attention to any error messages during the boot process so you can troubleshoot any issues.
To check the new kernel version in Debian, you can use the following command in the terminal.
If you want to see a list of installed kernels, you can check the contents of the /boot directory:
Remove Old Kernel in Debian
To remove old kernels in Debian, first you need to list the installed kernels to identify the ones you want to remove using the dpkg command.
dpkg --list | grep linux-image
To remove an old kernel, use the following apt command and make sure to replace linux-image-OLD_VERSION with the version number of the kernel you want to remove.
sudo apt purge linux-image-OLD_VERSION
After removing the old kernels, update GRUB to reflect the changes.
In conclusion, compiling a kernel in Debian is a valuable skill that allows users to tailor their operating system to specific needs, incorporating the latest features and optimizations.