| Tested on | Red Hat Enterprise Linux 10.2 |
|---|---|
| Package | dnf 4.20.0 |
| Applies to | RHEL 10 and RHEL 9 where the current kernel RPM split is equivalent |
| Privilege | sudo or root |
| Scope | Explain RHEL kernel RPM packages (kernel, kernel-core, kernel-modules-core, kernel-modules), check installed versions, update or install a specific kernel with DNF, and verify before reboot. Does not replace a full kernel-update walkthrough, GRUB administration, or old-kernel cleanup procedures. |
| Related guides | How to update the kernel on RHEL Remove old kernels with DNF Change the default boot kernel Boot an older kernel with grubby DNF command cheat sheet |
On current RHEL releases, kernel is a meta package. The bootable kernel image is provided by kernel-core, while kernel modules are split between kernel-modules-core, kernel-modules, and optional packages such as kernel-modules-extra.
For a normal update, install or upgrade the kernel package and let DNF select the matching subpackages. You do not need to update kernel-core, kernel-modules-core, and kernel-modules one by one unless you are deliberately building a minimal package set.
Quick Reference: RHEL Kernel RPM Packages
| Package | Purpose |
|---|---|
kernel |
Meta package that pulls the required kernel subpackages |
kernel-core |
Provides the kernel binary such as /boot/vmlinuz-* |
kernel-modules-core |
Core modules required for common hardware and boot functionality |
kernel-modules |
Additional modules beyond the core module set |
kernel-modules-extra |
Optional modules for less common hardware or features |
kernel-uki-virt |
Unified Kernel Image for supported virtual/cloud environments |
kernel-devel |
Headers and build files for compiling external kernel modules |
kernel-headers |
User-space kernel interface headers |
kernel-tools |
Kernel-related user-space utilities |
kernel-tools, kernel-devel, and kernel-headers are related packages, but they are not part of the bootable kernel set in the same way as kernel-core and the module packages.
1. What Is the kernel-core Package?
kernel-core contains the actual kernel binary and the core boot files for one kernel version.
Check the installed build on the host:
rpm -q kernel-corekernel-core-6.12.0-211.42.1.el10_2.x86_64The bootable image lives under /boot:
rpm -ql kernel-core | grep '/boot/vmlinuz'/boot/vmlinuz-6.12.0-211.42.1.el10_2.x86_64That vmlinuz file is the compressed kernel image GRUB loads at boot. kernel-core is not simply a "minimal modules" package on current RHEL releases; module content is split into kernel-modules-core and kernel-modules.
2. kernel vs kernel-core vs kernel-modules-core
| Package | Contains files? | Main role |
|---|---|---|
kernel |
Normally a meta package | Pulls required kernel subpackages |
kernel-core |
Yes | Bootable kernel image and core boot files |
kernel-modules-core |
Yes | Core or common loadable kernel modules |
kernel-modules |
Yes | Remaining standard modules for the release |
kernel-modules-extra |
Yes | Optional modules for less common hardware |
Confirm that kernel itself does not ship file content on RHEL 10:
rpm -ql kernel(contains no files)The meta package exists so administrators can install or query one package name while DNF resolves the dependent subpackages.
See what kernel-core installs under /boot and /lib/modules:
rpm -ql kernel-core | head/boot/.vmlinuz-6.12.0-211.42.1.el10_2.x86_64.hmac
/boot/System.map-6.12.0-211.42.1.el10_2.x86_64
/boot/config-6.12.0-211.42.1.el10_2.x86_64
/boot/initramfs-6.12.0-211.42.1.el10_2.x86_64.img
/boot/symvers-6.12.0-211.42.1.el10_2.x86_64.xz
/boot/vmlinuz-6.12.0-211.42.1.el10_2.x86_64
/lib/modules
/lib/modules/6.12.0-211.42.1.el10_2.x86_64kernel-modules-core provides the core module tree:
rpm -ql kernel-modules-core | head/lib/modules
/lib/modules/6.12.0-211.42.1.el10_2.x86_64
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/build
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/arch
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/arch/x86
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/arch/x86/crypto
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/arch/x86/crypto/blowfish-x86_64.ko.xzkernel-modules adds the remaining standard .ko modules for that kernel version:
rpm -ql kernel-modules | head/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/drivers/acpi/video.ko.xz
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/drivers/base/regmap/regmap-sdw-mbq.ko.xz
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/drivers/base/regmap/regmap-sdw.ko.xz
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/drivers/bcma/bcma.ko.xz
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/drivers/bluetooth/ath3k.ko.xz
/lib/modules/6.12.0-211.42.1.el10_2.x86_64/kernel/drivers/bluetooth/bcm203x.ko.xzAll subpackages for one kernel release share the same version string, such as 6.12.0-211.42.1.el10_2.
3. Which RHEL Kernel Packages Do You Need?
Standard RHEL system
On a normal server or workstation, manage the meta package:
kernelDNF resolves the matching kernel-core, kernel-modules-core, and kernel-modules builds. You do not need to assemble those RPMs manually for a standard installation.
Minimal or virtual system
Some virtual or cloud images use a reduced kernel package combination. In those cases kernel-core plus kernel-modules-core can be enough for the intended environment, but the exact package set depends on the image and hardware requirements. Do not assume every cloud VM needs only kernel-core with no module packages.
Current RHEL releases also provide kernel-uki-virt, a Unified Kernel Image (UKI) for supported virtual and cloud environments. It combines the kernel, initramfs, and kernel command line in one signed image and can be used instead of kernel-core for supported deployments.
It is separate from the traditional kernel-core plus module package layout described above. RHEL 10 documentation confirms the same behavior.
kernel-modules-extra
kernel-modules-extra is optional. Install it when hardware or a feature you need is provided by that package, not because every bare-metal host should carry it by default. On the lab host it was not installed:
rpm -q kernel-modules-extrapackage kernel-modules-extra is not installed4. Check Installed Kernel Packages
List the main kernel RPMs for the running release:
rpm -q kernel kernel-core kernel-modules-core kernel-modules kernel-modules-extrakernel-6.12.0-211.42.1.el10_2.x86_64
kernel-core-6.12.0-211.42.1.el10_2.x86_64
kernel-modules-core-6.12.0-211.42.1.el10_2.x86_64
kernel-modules-6.12.0-211.42.1.el10_2.x86_64
package kernel-modules-extra is not installedCompare that with the kernel that is actually running:
uname -r6.12.0-211.42.1.el10_2.x86_64Installed kernel versions and the running kernel are not always the same immediately after an update. RHEL keeps multiple kernel builds installed because kernel packages use DNF install-only handling instead of replacing the previous RPM in place.
5. Check Available Kernel and kernel-core Versions
List installed and available kernel builds:
dnf --showduplicates list kernelInstalled Packages
kernel.x86_64 6.12.0-211.42.1.el10_2 @rhel-10-for-x86_64-baseos-rpms
Available Packages
kernel.x86_64 6.12.0-211.43.1.el10_2 rhel-10-for-x86_64-baseos-rpms
kernel.x86_64 6.12.0-211.44.1.el10_2 rhel-10-for-x86_64-baseos-rpms
kernel.x86_64 6.12.0-211.46.1.el10_2 rhel-10-for-x86_64-baseos-rpms
kernel.x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpmsYou can inspect kernel-core the same way when you want to confirm the matching subpackage versions:
dnf --showduplicates list kernel-coreInstalled Packages
kernel-core.x86_64 6.12.0-211.42.1.el10_2 @rhel-10-for-x86_64-baseos-rpms
Available Packages
kernel-core.x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpmsMatching kernel subpackages use the same version-release string. To see which repository provides a package name:
dnf repoquery kernel-coreThat query is useful when you need to confirm package availability without starting an install transaction.
6. Update kernel-core Safely with DNF
For a normal kernel update on RHEL, upgrade the meta package:
sudo dnf upgrade kernelDNF resolves the matching kernel-core, kernel-modules-core, and kernel-modules packages for the new version. Preview the transaction first when you want to see the exact RPM set:
sudo dnf upgrade kernel --assumenoInstalling:
kernel x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 1.6 M
Installing dependencies:
kernel-core x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 19 M
kernel-modules x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 42 M
kernel-modules-core x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 31 M
Transaction Summary
===========================================================================================
Install 4 PackagesThe new kernel is installed alongside existing kernel versions. You do not need to run separate dnf upgrade commands for kernel-core, kernel-modules-core, and kernel-modules during a standard update.
For the full operational kernel-update workflow, see how to update the kernel on RHEL.
7. Install a Specific Kernel Version
When you need one build rather than the latest available kernel, list versions first:
dnf --showduplicates list kernelInstall the required kernel version-release from the repository:
sudo dnf install kernel-6.12.0-211.47.1.el10_2DNF installs the matching dependent kernel packages in the same transaction:
Installing:
kernel x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 1.6 M
Installing dependencies:
kernel-core x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 19 M
kernel-modules x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 42 M
kernel-modules-core x86_64 6.12.0-211.47.1.el10_2 rhel-10-for-x86_64-baseos-rpms 31 MYou normally do not specify every dependent RPM manually. For broader package-version selection patterns, see install or downgrade a specific RPM version.
8. Verify the New Kernel Before Reboot
After installation, confirm the new kernel RPMs are on disk:
rpm -q kernel kernel-core | sortkernel-6.12.0-211.42.1.el10_2.x86_64
kernel-6.12.0-211.47.1.el10_2.x86_64
kernel-core-6.12.0-211.42.1.el10_2.x86_64
kernel-core-6.12.0-211.47.1.el10_2.x86_64The older kernel remaining installed is expected. It provides a fallback if the new kernel fails to boot.
Check which kernel GRUB will boot by default:
grubby --default-kernel/boot/vmlinuz-6.12.0-211.47.1.el10_2.x86_64That shows the new kernel is selected for the next boot. The running kernel does not change until you reboot:
uname -r6.12.0-211.42.1.el10_2.x86_64Reboot when you are ready to start running the new build:
sudo rebootAfter login, uname -r should match the newly installed kernel version. For default-kernel changes without a full operational walkthrough here, see change the default boot kernel.
9. kernel-tools, kernel-devel and kernel-headers Are Different
Not every RPM whose name starts with kernel is part of the bootable kernel stack.
kernel-tools provides kernel-related user-space utilities and supporting documentation. On the lab host:
rpm -q kernel-toolskernel-tools-6.12.0-211.42.1.el10_2.x86_64kernel-devel contains the files needed to compile out-of-tree kernel modules against a specific kernel version. kernel-headers provides user-space headers used when building software that interfaces with kernel APIs.
For a normal kernel install or upgrade, let DNF resolve dependencies. You do not need to manually synchronize every kernel-* RPM to the same version on every host. Match kernel-devel to the target kernel only when you are building an external module for that kernel.
10. What About Old kernel-core Packages?
RHEL intentionally keeps older kernel builds installed as fallback boot options. List what is present:
rpm -q kernel kernel-core | sortWhen /boot fills up or you need to remove excess kernels, use DNF-based cleanup instead of direct rpm -e removal. See remove old kernels on RHEL with DNF.
Common Problems
| Problem | Likely reason |
|---|---|
kernel-core updated but running version unchanged |
Reboot has not happened yet |
| New kernel installed but old one remains | Normal install-only behavior |
| Hardware missing after minimal kernel install | Required module may be in kernel-modules or kernel-modules-extra |
| External module will not build | Matching kernel-devel may be missing for the target kernel |
/boot fills with old kernels |
Review installonly_limit and old-kernel cleanup |
| New kernel fails to boot | Boot a known-working fallback kernel and investigate |
Summary
On current RHEL releases, kernel is the package administrators normally manage, while kernel-core contains the bootable kernel image. kernel-modules-core carries the core module set, kernel-modules supplies additional standard modules, and kernel-modules-extra is optional.
DNF installs new kernel versions alongside existing ones because kernel RPMs are handled as install-only packages. A reboot is required before uname -r reflects a newly installed kernel, even when kernel-core and the module packages are already on disk.
Use dnf upgrade kernel or dnf install kernel-VERSION and let DNF resolve the matching subpackages. For full kernel-update operations, boot management, and safe old-kernel removal, use the dedicated guides linked above rather than treating this page as a second generic kernel-update tutorial.
References
- Managing, monitoring and updating the kernel — RHEL 10 kernel administration, including package overview and live patching context
- Linux kernel RPM package overview — Red Hat description of
kernel,kernel-core, and module packages - Updating RHEL content with DNF — DNF upgrade behavior, including install-only packages
- DNF configuration reference —
installonlypkgsandinstallonly_limitsettings

