| 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 | 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—systemd soft reboot on RHEL leaves the same kernel running, so it cannot activate this package. Confirm the version still in memory:
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

