How to Install Mainline Kernel on CentOS Stream 10 and 9

Install Mainline Kernel on CentOS Stream 10 and 9 using ELRepo. Covers kernel-ml, verification, updates, and rollback.

Last updatedAuthorJoshua JamesRead time6 minGuide typeCentOS Stream

Newer Wi-Fi chipsets, storage controllers, and workstation hardware can need kernel support that arrives before CentOS Stream’s default enterprise-tracking kernel picks it up. You can install the latest Linux kernel on CentOS Stream from ELRepo, which packages alternate upstream kernel branches for Enterprise Linux systems while leaving the original CentOS Stream kernel available as a fallback.

These steps cover CentOS Stream 10 and CentOS Stream 9. The mainline kernel-ml branch is available on both releases, while the long-term kernel-lt branch currently appears only for CentOS Stream 9.

Install the Latest Linux Kernel on CentOS Stream

ELRepo installs alternate kernel packages beside the CentOS Stream kernel. That side-by-side behavior is important because it lets you test the newer kernel, then boot back into the stock kernel if hardware, Secure Boot, or third-party modules do not behave as expected.

Choose an ELRepo Kernel Branch for CentOS Stream

Choose one branch for the initial install. Installing both branches is possible, but the last installed branch can become the default boot entry, so switching between them is clearer when you use grubby after the packages are installed.

Kernel BranchPrimary PackageCentOS Stream ScopeBest FitUpdate Behavior
Mainline kernelkernel-mlStream 10 and Stream 9Newest hardware support, recent kernel features, non-production systems, and workstations that need a newer branchTracks ELRepo’s current mainline kernel builds
Long-term kernelkernel-ltStream 9 onlySystems that need a newer-than-stock kernel but prefer a slower-moving long-term branchTracks ELRepo’s long-term kernel builds

Check your current kernel before changing anything. CentOS Stream 10 systems commonly report a 6.12.x kernel, while CentOS Stream 9 systems report a 5.14.x kernel. The exact package revision changes with normal Stream updates.

uname -r
rpm -q kernel-core

Update CentOS Stream Before Adding ELRepo

Refresh package metadata and apply pending updates before adding an alternate kernel repository. Review the DNF transaction before accepting it, especially on remote systems where a kernel or bootloader change may require console access.

sudo dnf upgrade --refresh

Add ELRepo on CentOS Stream

Install the ELRepo release package that matches your CentOS Stream major version. DNF imports the ELRepo signing key during the transaction; confirm the prompt when it appears.

Use this command on CentOS Stream 10:

sudo dnf install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm

Use this command on CentOS Stream 9:

sudo dnf install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm

Verify the ELRepo repository files were added. The normal elrepo repository is enabled, while elrepo-kernel stays disabled until you enable it for a specific kernel transaction.

dnf repolist all | grep -E '^elrepo'

Relevant output includes:

elrepo         ELRepo.org Community Enterprise Linux Repository - el10  enabled
elrepo-extras  ELRepo.org Community Enterprise Linux Extras Repository  disabled
elrepo-kernel  ELRepo.org Community Enterprise Linux Kernel Repository  disabled
elrepo-testing ELRepo.org Community Enterprise Linux Testing Repository disabled

On CentOS Stream 9, the repository names use el9 instead of el10. The enabled and disabled states are the same.

Check Available ELRepo Kernel Packages

List the kernel packages exposed by elrepo-kernel. The version numbers change as ELRepo publishes new builds, so treat this as a live availability check instead of a fixed version target.

dnf list available --disablerepo='*' --enablerepo=elrepo-kernel 'kernel-ml*' 'kernel-lt*'

CentOS Stream 10 should list kernel-ml, kernel-ml-core, kernel-ml-devel, kernel-ml-modules, and kernel-ml-modules-extra. CentOS Stream 9 should list those mainline packages plus matching kernel-lt packages.

Install kernel-ml on CentOS Stream

Install the ELRepo mainline kernel package. DNF pulls the required kernel-ml-core and kernel-ml-modules packages automatically.

sudo dnf --enablerepo=elrepo-kernel install kernel-ml

If you build external modules or need a broader driver set, install the development files and extra modules before rebooting.

sudo dnf --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel kernel-ml-modules-extra

Use kernel-ml-devel for DKMS or other kernel-module builds. The kernel-ml-headers package is for userspace kernel API headers, not the usual fix for module builds.

Install kernel-lt on CentOS Stream 9

CentOS Stream 9 can use ELRepo’s long-term kernel branch instead of kernel-ml. Do not run both branch install commands unless you intend to choose the boot default manually afterward.

sudo dnf --enablerepo=elrepo-kernel install kernel-lt

For module builds or extra drivers on the long-term branch, install the matching development and extra-module packages.

sudo dnf --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel kernel-lt-modules-extra

CentOS Stream 10 does not currently list kernel-lt in ELRepo’s elrepo-kernel metadata. Use kernel-ml on Stream 10, or stay with the CentOS Stream kernel if you need the enterprise-tracking branch.

Install only one ELRepo kernel branch first. If both kernel-ml and kernel-lt are installed on CentOS Stream 9, GRUB can select kernel-lt as the default until grubby changes the boot entry.

Reboot Into the ELRepo Kernel

The newly installed kernel does not run until the next boot. Reboot when you have console or out-of-band recovery available, especially on remote systems.

sudo reboot

Verify the Latest Kernel on CentOS Stream

After the system comes back online, confirm that the active kernel comes from ELRepo. A successful boot prints a kernel string containing .elrepo..

uname -r

Mainline kernels should show an ELRepo mainline version string, and Stream 9 long-term kernels should show the ELRepo long-term branch. The exact numbers change over time, but the elrepo.x86_64 suffix is the stable success signal.

If you installed kernel-ml-devel or kernel-lt-devel, confirm the development tree matches the running kernel.

test -d /usr/src/kernels/$(uname -r) && echo "matching kernel development tree found"
matching kernel development tree found

Check the default boot entry if you installed more than one ELRepo branch or if the system still boots the CentOS Stream kernel.

sudo grubby --default-kernel

The path should point to a /boot/vmlinuz-... entry for the kernel branch you want to run.

Manage ELRepo Kernel Updates on CentOS Stream

ELRepo leaves elrepo-kernel disabled by default, so normal DNF updates do not automatically pull new mainline or long-term kernel builds. Use a targeted update command when you want to check the installed ELRepo branch.

sudo dnf --enablerepo=elrepo-kernel upgrade 'kernel-ml*'

Use the long-term package pattern on CentOS Stream 9 if you installed kernel-lt.

sudo dnf --enablerepo=elrepo-kernel upgrade 'kernel-lt*'

Reboot after a kernel update, then run uname -r again to confirm the new ELRepo build is active.

If you need perf or related kernel tools from the same ELRepo branch, the packages are kernel-ml-tools and kernel-lt-tools. Install them only when you need branch-matched tools because they replace the distro kernel-tools package, and the mainline and long-term tools conflict with each other.

Restore the Default CentOS Stream Kernel

Return to the CentOS Stream kernel before removing ELRepo kernel packages. Removing the kernel you are currently running can leave you without a clean fallback.

Set the Stock Kernel as the Boot Default

Select the newest non-ELRepo kernel entry, make it the default, and reboot.

The tail command guide explains the tail -n 1 selector if you want to adjust how the newest matching boot entry is chosen.

stock_kernel=$(ls -1 /boot/vmlinuz-* | grep -v elrepo | sort -V | tail -n 1)
sudo grubby --set-default="$stock_kernel"
sudo grubby --default-kernel
sudo reboot

After reconnecting, confirm the active kernel no longer contains elrepo.

uname -r

Remove ELRepo Kernel Packages

Remove the branch packages only after the stock kernel is running. Review the DNF transaction before accepting removal.

sudo dnf remove 'kernel-ml*'

On CentOS Stream 9, remove the long-term branch too if you installed it.

sudo dnf remove 'kernel-lt*'

If you installed ELRepo kernel tools and want the distro perf package back afterward, reinstall the stock tools package.

sudo dnf install kernel-tools

Remove ELRepo or Disable the Kernel Repository

Remove the ELRepo release package if you no longer need any ELRepo packages.

sudo dnf remove elrepo-release

If you want to keep ELRepo but ensure the kernel repository stays disabled, install the DNF plugin if needed and disable only elrepo-kernel.

sudo dnf install dnf-plugins-core
sudo dnf config-manager --set-disabled elrepo-kernel

Troubleshoot ELRepo Kernels on CentOS Stream

System Still Boots the CentOS Stream Kernel

If uname -r still shows the stock kernel after reboot, confirm the ELRepo kernel entry exists and set it as the default.

The grep command guide covers the -E filter used here if you want to adjust the boot-entry search pattern.

sudo grubby --info=ALL | grep -E '^(title|kernel)='
elrepo_kernel=$(ls -1 /boot/vmlinuz-*elrepo* | sort -V | tail -n 1)
sudo grubby --set-default="$elrepo_kernel"

Run sudo grubby --default-kernel, reboot, then verify again with uname -r.

Secure Boot Blocks the ELRepo Kernel

ELRepo documents that kernel-ml and kernel-lt packages are not signed for Secure Boot. If firmware refuses to boot the ELRepo kernel, boot the stock CentOS Stream kernel from GRUB and either keep the distro kernel or change Secure Boot policy from firmware with the operational risk understood.

DKMS or Proprietary Modules Fail After Reboot

External modules need development files for the running kernel. Install the matching ELRepo devel package first, then rebuild your modules with the tool your driver stack uses.

sudo dnf --enablerepo=elrepo-kernel install kernel-ml-devel
sudo dkms autoinstall

The dkms package comes from EPEL on CentOS Stream. Use the Install EPEL on CentOS Stream workflow first if dkms is not available on your system.

dnf config-manager Is Missing

Minimal systems may not include the DNF plugin that provides config-manager. Install it from the CentOS Stream repositories, then rerun the disable command.

sudo dnf install dnf-plugins-core
sudo dnf config-manager --set-disabled elrepo-kernel

Conclusion

CentOS Stream is back online with an ELRepo kernel branch available for newer hardware support, and the stock kernel remains close by as a recovery path. Keep ELRepo kernel updates deliberate with targeted DNF commands, and use the GRUB fallback before removing any kernel branch that has not already booted cleanly on your hardware.

Share this guide

Help another Linux user troubleshoot faster

Share this guide with someone troubleshooting Linux systems or saving it for later.

Follow LinuxCapable

Want more LinuxCapable guides in Google?

Add LinuxCapable as a preferred source so Google can show more of our fresh Linux tutorials in Top Stories and From your sources when relevant.

Add LinuxCapable as a preferred source on Google
Search LinuxCapable

Need another guide?

Search LinuxCapable for package installs, commands, troubleshooting, and follow-up guides related to what you just read.

Found this guide useful?

Support LinuxCapable to keep tutorials free and up to date.

Buy me a coffeeBuy me a coffee
Before commenting, please review our Comments Policy.
Formatting tips for your comment

You can use basic HTML to format your comment. Useful tags currently allowed in published comments:

You type Result
<code>command</code> command
<strong>bold</strong> bold
<em>italic</em> italic
<blockquote>quote</blockquote> quote block

Got a Question or Feedback?

We read and reply to every comment - let us know how we can help or improve this guide.

Verify before posting: