<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Elrepo on Di</title>
        <link>https://dixu.ddns.net/tags/elrepo/</link>
        <description>Recent content in Elrepo on Di</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Thu, 24 Sep 2026 12:00:00 -0400</lastBuildDate><atom:link href="https://dixu.ddns.net/tags/elrepo/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Safely Update the Linux Kernel on Rocky Linux 9</title>
            <link>https://dixu.ddns.net/p/safely-update-the-linux-kernel-on-rocky-linux-9/</link>
            <pubDate>Sat, 11 Jul 2020 22:14:00 -0400</pubDate>
            <guid>https://dixu.ddns.net/p/safely-update-the-linux-kernel-on-rocky-linux-9/</guid>
            <description>&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/index&#34;  title=&#34;Red Hat&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;RHEL 9 Kernel Management&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://elrepo.org/wiki/doku.php?id=start&#34;  title=&#34;Official&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ELRepo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://elrepo.org/wiki/doku.php?id=kernel-ml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ELRepo kernel-ml&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://elrepo.org/wiki/doku.php?id=kernel-lt&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ELRepo kernel-lt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;scope&#34;&gt;Scope&#xA;&lt;/h2&gt;&lt;p&gt;This guide updates the kernel on Rocky Linux 9 and other compatible Enterprise Linux 9 rebuilds. The normal and preferred method is to install the distribution kernel from the standard repositories. An optional section covers ELRepo&amp;rsquo;s &lt;code&gt;kernel-lt&lt;/code&gt; and &lt;code&gt;kernel-ml&lt;/code&gt; packages for testing hardware that the distribution kernel does not support.&lt;/p&gt;&#xA;&lt;p&gt;The original article targeted CentOS Linux 8, which reached end of life in December 2021. Migrate unsupported systems before changing their kernels.&lt;/p&gt;&#xA;&lt;p&gt;Enterprise Linux kernels retain a stable version family while backporting security fixes and drivers. A higher upstream version number does not by itself mean that the system is more secure, stable, or supported.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prepare-for-the-update&#34;&gt;Prepare for the Update&#xA;&lt;/h2&gt;&lt;p&gt;Identify the distribution, running kernel, architecture, and default boot kernel:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /etc/os-release&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;List installed kernel packages and boot entries:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -q kernel kernel-core --last&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ALL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Check available space in the boot filesystems:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h /boot /boot/efi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;/boot/efi&lt;/code&gt; path might not be a separate filesystem on a BIOS-based installation. Resolve a nearly full &lt;code&gt;/boot&lt;/code&gt; before installing another kernel, but keep at least one known-good older kernel.&lt;/p&gt;&#xA;&lt;p&gt;Before updating a remote server:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Confirm that a hypervisor console, physical console, or other out-of-band recovery method is available.&lt;/li&gt;&#xA;&lt;li&gt;Back up important data and boot configuration.&lt;/li&gt;&#xA;&lt;li&gt;Record the current kernel path reported by &lt;code&gt;grubby --default-kernel&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Check whether storage, networking, GPU, security, or virtualization depends on an out-of-tree module.&lt;/li&gt;&#xA;&lt;li&gt;Take a tested virtual-machine snapshot when the platform supports it and the storage design makes snapshots safe.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Inspect DKMS and installed third-party kernel modules when those tools are present:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -v dkms &amp;gt;/dev/null &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; dkms status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;^(kmod-|akmod-)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Confirm that required module packages have a build compatible with the new kernel before rebooting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-the-supported-distribution-kernel&#34;&gt;Install the Supported Distribution Kernel&#xA;&lt;/h2&gt;&lt;p&gt;Refresh metadata and review all available updates:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf check-update --refresh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The safest routine update keeps the kernel and related userspace packages at a consistent supported level:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf upgrade --refresh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For a maintenance window intentionally limited to kernel packages, use the documented kernel update command:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf update kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;DNF treats kernels as install-only packages. It installs the new kernel alongside older versions instead of replacing the running kernel immediately.&lt;/p&gt;&#xA;&lt;p&gt;List the installed kernels again and confirm that the new boot files exist:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -q kernel-core --last&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -lh /boot/vmlinuz-* /boot/initramfs-*.img&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ALL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The new distribution kernel normally becomes the default automatically. Confirm the selection:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the default is incorrect, copy the exact desired &lt;code&gt;/boot/vmlinuz-...&lt;/code&gt; path from &lt;code&gt;grubby --info=ALL&lt;/code&gt; and set it explicitly:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --set-default /boot/vmlinuz-VERSION.ARCH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;VERSION.ARCH&lt;/code&gt; with an installed kernel filename. Do not use &lt;code&gt;grub2-set-default 0&lt;/code&gt;; numeric positions can change when another kernel is installed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reboot-and-verify&#34;&gt;Reboot and Verify&#xA;&lt;/h2&gt;&lt;p&gt;Schedule the interruption, then reboot:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After the system returns, verify the running kernel and boot state:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --failed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo journalctl -b -p err..alert --no-pager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Test storage, networking, firewall rules, virtualization, containers, monitoring, and application services that depend on kernel features. Confirm that required modules loaded:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsmod&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dmesg --level&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;err,warn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Warnings are not automatically failures. Compare them with the previous boot and investigate messages related to required hardware or services.&lt;/p&gt;&#xA;&lt;h2 id=&#34;roll-back-to-an-older-distribution-kernel&#34;&gt;Roll Back to an Older Distribution Kernel&#xA;&lt;/h2&gt;&lt;p&gt;If the new kernel cannot boot, display the GRUB menu during startup by pressing &lt;strong&gt;Esc&lt;/strong&gt; repeatedly and select a known-good older kernel. Console access is essential when the machine cannot reach the network.&lt;/p&gt;&#xA;&lt;p&gt;If the system boots but the new kernel causes a problem, list the installed entries:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ALL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Set the exact older kernel path as the default and reboot:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --set-default /boot/vmlinuz-OLD_VERSION.ARCH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After rebooting, verify that &lt;code&gt;uname -r&lt;/code&gt; reports the selected version. Keep the failed kernel installed until logs and package state have been reviewed; removing it immediately can discard evidence needed for diagnosis.&lt;/p&gt;&#xA;&lt;h2 id=&#34;manage-retained-kernels&#34;&gt;Manage Retained Kernels&#xA;&lt;/h2&gt;&lt;p&gt;DNF&amp;rsquo;s &lt;code&gt;installonly_limit&lt;/code&gt; controls how many versions of install-only packages are retained. Inspect the configured value:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -R &lt;span class=&#34;s1&#34;&gt;&amp;#39;^installonly_limit&amp;#39;&lt;/span&gt; /etc/dnf/dnf.conf /etc/dnf/dnf.conf.d 2&amp;gt;/dev/null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;DNF normally keeps three versions. A value of at least &lt;code&gt;2&lt;/code&gt; preserves a rollback kernel; &lt;code&gt;1&lt;/code&gt; is not permitted. Do not manually remove the running kernel or every older kernel.&lt;/p&gt;&#xA;&lt;p&gt;After the new kernel has passed testing and a known-good rollback kernel remains, preview obsolete install-only packages:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf remove --oldinstallonly --setopt &lt;span class=&#34;nv&#34;&gt;installonly_limit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; --assumeno&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Review the proposed transaction. If it preserves the running kernel, the default kernel, and a tested fallback, run it interactively without &lt;code&gt;--assumeno&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf remove --oldinstallonly --setopt &lt;span class=&#34;nv&#34;&gt;installonly_limit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Do not remove kernels by copying a version prefix into a broad wildcard command. That can remove the active kernel, dependencies, or the only bootable fallback.&lt;/p&gt;&#xA;&lt;h2 id=&#34;optional-test-an-elrepo-kernel&#34;&gt;Optional: Test an ELRepo Kernel&#xA;&lt;/h2&gt;&lt;p&gt;Use the distribution kernel whenever it supports the hardware. ELRepo describes its alternative kernels as a last resort for hardware testing and provides them without distribution support. They can expose the system to compatibility, security, performance, or data-integrity problems.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;kernel-lt&lt;/code&gt; follows an upstream long-term-support branch.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;kernel-ml&lt;/code&gt; follows the upstream mainline stable branch.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Both install alongside the Rocky Linux kernel. Keep the Rocky Linux kernel and its boot entry intact.&lt;/p&gt;&#xA;&lt;h3 id=&#34;check-secure-boot&#34;&gt;Check Secure Boot&#xA;&lt;/h3&gt;&lt;p&gt;Check the firmware state before installing an ELRepo kernel:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf install -y mokutil&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mokutil --sb-state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ELRepo states that &lt;code&gt;kernel-lt&lt;/code&gt; and &lt;code&gt;kernel-ml&lt;/code&gt; are not signed for Secure Boot. They will not boot under a standard Secure Boot policy. Do not disable Secure Boot merely to obtain a newer version number; use the supported distribution kernel unless there is a tested requirement and an approved signing or firmware policy.&lt;/p&gt;&#xA;&lt;h3 id=&#34;install-the-elrepo-repository&#34;&gt;Install the ELRepo Repository&#xA;&lt;/h3&gt;&lt;p&gt;Import both current ELRepo RPM signing keys and install the EL9 repository package from its stable URL:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-v2-elrepo.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf update elrepo-release&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Display the enabled repository definition and available alternative kernels:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf repolist elrepo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf --disablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt; --enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;elrepo-kernel list available &lt;span class=&#34;s1&#34;&gt;&amp;#39;kernel-lt*&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;kernel-ml*&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;install-one-kernel-family&#34;&gt;Install One Kernel Family&#xA;&lt;/h3&gt;&lt;p&gt;Install the long-term kernel for a conservative hardware test:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf --enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;elrepo-kernel install kernel-lt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alternatively, install the mainline stable kernel when the required support is unavailable in &lt;code&gt;kernel-lt&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf --enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;elrepo-kernel install kernel-ml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Do not install both without a specific test plan. If an out-of-tree module must be compiled, install the matching &lt;code&gt;kernel-lt-devel&lt;/code&gt; or &lt;code&gt;kernel-ml-devel&lt;/code&gt; package rather than the similarly named headers package:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf --enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;elrepo-kernel install kernel-lt-devel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;kernel-lt-devel&lt;/code&gt; with &lt;code&gt;kernel-ml-devel&lt;/code&gt; when testing &lt;code&gt;kernel-ml&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;select-and-test-the-elrepo-kernel&#34;&gt;Select and Test the ELRepo Kernel&#xA;&lt;/h3&gt;&lt;p&gt;List the new boot entry and copy its exact kernel path:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ALL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Set the selected ELRepo kernel as the default:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --set-default /boot/vmlinuz-ELREPO_VERSION.ARCH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;ELREPO_VERSION.ARCH&lt;/code&gt; with the exact installed filename. Reboot and verify:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After the host returns:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --failed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo journalctl -b -p err..alert --no-pager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;An ELRepo kernel version normally contains &lt;code&gt;.el9.elrepo&lt;/code&gt;. Test every required service and device before considering it usable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;return-from-elrepo-to-the-distribution-kernel&#34;&gt;Return from ELRepo to the Distribution Kernel&#xA;&lt;/h2&gt;&lt;p&gt;List the boot entries, select the exact Rocky Linux kernel path, and reboot:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ALL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --set-default /boot/vmlinuz-ROCKY_VERSION.ARCH&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --default-kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Confirm that the running kernel is the distribution build before removing ELRepo packages:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qf /boot/vmlinuz-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -r&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Remove only the ELRepo kernel family that is no longer required:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf remove &lt;span class=&#34;s1&#34;&gt;&amp;#39;kernel-lt*&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For a mainline test, use:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf remove &lt;span class=&#34;s1&#34;&gt;&amp;#39;kernel-ml*&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Review the removal transaction before accepting it. Never remove the ELRepo kernel while it is still running, and never remove the remaining distribution kernel packages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&#xA;&lt;/h2&gt;&lt;h3 id=&#34;the-new-kernel-does-not-appear-in-grub&#34;&gt;The New Kernel Does Not Appear in GRUB&#xA;&lt;/h3&gt;&lt;p&gt;Confirm that the package and boot files exist:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -q kernel-core --last&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l /boot/vmlinuz-* /boot/loader/entries/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo grubby --info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ALL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Inspect the package transaction and kernel installation logs before manually rebuilding GRUB:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; info last&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo journalctl -b --no-pager &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -Ei &lt;span class=&#34;s1&#34;&gt;&amp;#39;kernel-install|grub|dracut&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enterprise Linux 9 normally manages Boot Loader Specification entries automatically. Do not overwrite EFI loader files with commands copied from older RHEL or CentOS releases.&lt;/p&gt;&#xA;&lt;h3 id=&#34;a-required-module-is-missing&#34;&gt;A Required Module Is Missing&#xA;&lt;/h3&gt;&lt;p&gt;Identify the device and expected module:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lspci -nnk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;modinfo MODULE_NAME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;MODULE_NAME&lt;/code&gt; with the required module. Boot the known-good kernel, then install or rebuild the matching signed module package. Do not force-load an incompatible module.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-system-boots-but-networking-or-storage-fails&#34;&gt;The System Boots but Networking or Storage Fails&#xA;&lt;/h3&gt;&lt;p&gt;Boot the previous kernel from GRUB, make it the default with &lt;code&gt;grubby&lt;/code&gt;, and collect logs from the failed boot:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo journalctl --list-boots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo journalctl -b -1 -k --no-pager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;-1&lt;/code&gt; boot is usually the immediately previous boot, but confirm the boot list before relying on that index.&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
