<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ifeatu Osegbo</title>
    <description>The latest articles on DEV Community by Ifeatu Osegbo (@amfeatu).</description>
    <link>https://dev.to/amfeatu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4165541%2F7d2586fe-4869-4828-8d81-9402f04b7761.jpg</url>
      <title>DEV Community: Ifeatu Osegbo</title>
      <link>https://dev.to/amfeatu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amfeatu"/>
    <language>en</language>
    <item>
      <title>Master the Migration: Upgrading Your RHEL Workload - Part 1</title>
      <dc:creator>Ifeatu Osegbo</dc:creator>
      <pubDate>Tue, 27 Oct 2026 13:02:55 +0000</pubDate>
      <link>https://dev.to/amfeatu/master-the-migration-upgrading-your-rhel-workload-part-1-3b8</link>
      <guid>https://dev.to/amfeatu/master-the-migration-upgrading-your-rhel-workload-part-1-3b8</guid>
      <description>&lt;h2&gt;
  
  
  Upgrading Red Hat Enterprise Linux 8 to 9: A Practical Guide Using Leapp
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Introduction
&lt;/h4&gt;

&lt;p&gt;As Linux administrators and engineers, we eventually reach a point where critical systems must be upgraded without unnecessarily disrupting business operations.&lt;/p&gt;

&lt;p&gt;At first, upgrading a perfectly functioning operating system may seem unnecessary. After all, why disturb a system that is working as expected?&lt;/p&gt;

&lt;p&gt;However, enterprise environments cannot rely indefinitely on systems simply because they continue to function. Security vulnerabilities, software lifecycle policies, vendor support requirements, and evolving technology standards make operating system upgrades an essential part of infrastructure management.&lt;/p&gt;

&lt;p&gt;But upgrading RHEL is only part of the story!&lt;/p&gt;

&lt;p&gt;In this series, I’ll go beyond the traditional upgrade approach and explore different paths to modernize your Linux infrastructure. We will go from conventional in-place upgrades and fresh installations to the emerging world of Image Mode with bootc.&lt;/p&gt;

&lt;p&gt;What are the trade-offs? Which approach works best for different environments? And how can we minimize downtime while keeping critical workloads running? I’ll explore these questions hands-on, uncover the challenges, and share practical lessons along the way.&lt;/p&gt;

&lt;p&gt;The journey from traditional Linux management to modern, image-based operating systems starts here. Stay tuned. You won’t want to miss what’s next!&lt;/p&gt;

&lt;p&gt;In this article however, I will explain why upgrading from Red Hat Enterprise Linux (RHEL) 8 to RHEL 9 matters, the precautions to take before beginning the process, and how to approach an in-place upgrade using Leapp.&lt;/p&gt;

&lt;p&gt;The objective is to share practical experience, highlight common challenges, and help Linux administrators plan and execute upgrades with greater confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Upgrade from RHEL 8 to RHEL 9?
&lt;/h2&gt;

&lt;p&gt;An operating system upgrade is more than a version change. It is an opportunity to improve security, maintain vendor supportability, and prepare infrastructure for future requirements. Here are some reasons to consider upgrading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Security and Compliance:&lt;/strong&gt;&lt;br&gt;
Security and compliance teams continually assess infrastructure for vulnerabilities, outdated software, and deviations from organizational security policies.&lt;/p&gt;

&lt;p&gt;RHEL 9 introduces newer security capabilities, updated cryptographic policies, and security improvements that can help organizations meet their security and regulatory requirements.&lt;/p&gt;

&lt;p&gt;However, an upgrade alone does not guarantee compliance. Administrators must also review system configurations, access controls, security policies, and application requirements after the migration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lifecycle Planning and Vendor Support:&lt;/strong&gt;&lt;br&gt;
Every operating system has a defined support lifecycle. As a platform approaches the end of its maintenance or support period, organizations must plan how to maintain security updates, technical support, and application compatibility.&lt;/p&gt;

&lt;p&gt;Running an unsupported operating system can increase operational risk, particularly when it hosts business-critical applications.&lt;br&gt;
Upgrading to a supported release helps organizations maintain access to the appropriate vendor updates and support services, subject to their subscription and support agreements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access to Newer Tools and Technologies:&lt;/strong&gt;&lt;br&gt;
Newer operating system releases provide updated system libraries, development tools, virtualization capabilities, and platform features.&lt;/p&gt;

&lt;p&gt;RHEL 9 also introduces changes that may benefit modern application development, automation, and infrastructure management.&lt;br&gt;
These improvements can help organizations prepare for evolving workloads and technology requirements. However, administrators must verify that their applications, drivers, monitoring agents, and third-party software are compatible with the target release.&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding the Risks Before Upgrading
&lt;/h2&gt;

&lt;p&gt;Although upgrading offers several benefits, it is not an activity that should be undertaken without proper planning.&lt;/p&gt;

&lt;p&gt;A major-version upgrade can affect application dependencies, system libraries, network configurations, security policies, and third-party software.&lt;/p&gt;

&lt;p&gt;Before proceeding, consult the relevant application teams, software vendors, and official Red Hat documentation to confirm that the proposed upgrade is supported.&lt;/p&gt;

&lt;p&gt;For business-critical infrastructure, the upgrade should first be tested in a development or staging environment that closely resembles production.&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding Leapp
&lt;/h2&gt;

&lt;p&gt;Traditionally, moving between major operating system versions has often involved provisioning a new server, reinstalling applications, migrating data, and switching production workloads to the replacement system.&lt;/p&gt;

&lt;p&gt;Although this approach remains appropriate in many environments, it can require significant planning and may introduce additional migration complexity.&lt;/p&gt;

&lt;p&gt;Red Hat provides Leapp as a framework for supported in-place upgrades between specific RHEL major versions.&lt;/p&gt;

&lt;p&gt;Leapp assesses the existing system, identifies potential upgrade blockers, prepares the target operating system packages, and facilitates the upgrade process through a dedicated boot environment.&lt;/p&gt;

&lt;p&gt;The process generally involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewing the supported upgrade path.&lt;/li&gt;
&lt;li&gt;Preparing the source operating system.&lt;/li&gt;
&lt;li&gt;Running a pre-upgrade assessment.&lt;/li&gt;
&lt;li&gt;Resolving reported inhibitors.&lt;/li&gt;
&lt;li&gt;Executing the upgrade.&lt;/li&gt;
&lt;li&gt;Verifying the upgraded operating system.&lt;/li&gt;
&lt;li&gt;Performing post-upgrade cleanup and validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leapp does not eliminate the need for backups, compatibility testing, or recovery planning. A successful upgrade depends on proper preparation and the condition of the source system.&lt;/p&gt;
&lt;h3&gt;
  
  
  Confirm the Supported Upgrade Path
&lt;/h3&gt;

&lt;p&gt;Before running any commands, establish whether your current RHEL installation can be upgraded to the intended target release.&lt;/p&gt;

&lt;p&gt;For a typical RHEL 8 to RHEL 9 upgrade, the source system should be on the latest supported RHEL 8 minor release, commonly RHEL 8.10, with the necessary updates installed. At the time of writing, upgrades are supported from 8.10 to 9.8&lt;/p&gt;

&lt;p&gt;Also verify whether the upgrade is supported for your system architecture, installed packages, subscription configuration, and infrastructure platform.&lt;/p&gt;
&lt;h3&gt;
  
  
  Review the System Requirements
&lt;/h3&gt;

&lt;p&gt;Before starting an in-place upgrade, confirm that the server meets the relevant requirements.&lt;/p&gt;
&lt;h3&gt;
  
  
  Operating System and Architecture
&lt;/h3&gt;

&lt;p&gt;For this practical exercise, the environment is based on the x86_64 architecture.&lt;/p&gt;

&lt;p&gt;The procedure may differ for other architectures, so consult the relevant Red Hat documentation before applying the same approach elsewhere.&lt;/p&gt;
&lt;h3&gt;
  
  
  Subscription and Repository Access
&lt;/h3&gt;

&lt;p&gt;Ensure the system has a valid RHEL subscription or an appropriately configured repository source or Satellite. &lt;/p&gt;

&lt;p&gt;For disconnected environments, confirm that the required installation media or local repository mirrors contain the packages needed for the upgrade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Red Hat Developer Subscription can be suitable for eligible development and testing environments, subject to its applicable terms. I used it for this process. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Available Disk Space
&lt;/h3&gt;

&lt;p&gt;Check that sufficient space is available in the relevant filesystems, particularly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/var&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/lib/leapp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/boot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/usr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact space requirements depend on the environment and upgrade configuration. Review the pre-upgrade report and official documentation rather than relying on a fixed estimate.&lt;/p&gt;
&lt;h3&gt;
  
  
  Console Access
&lt;/h3&gt;

&lt;p&gt;Ensure that out-of-band or hypervisor console access is available.&lt;br&gt;
Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dell iDRAC&lt;/li&gt;
&lt;li&gt;HPE iLO&lt;/li&gt;
&lt;li&gt;A hypervisor console&lt;/li&gt;
&lt;li&gt;A supported serial console&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Console access is particularly important because the upgrade process includes rebooting the system. If networking fails during the migration, remote SSH access may no longer be available.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Verified Backup and Recovery Plan
&lt;/h3&gt;

&lt;p&gt;Before proceeding, ensure that a suitable backup or recovery mechanism is available and that the recovery procedure has been tested.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A backup that has never been restored is not a fully validated recovery plan.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Pre-Upgrade Planning Checklist
&lt;/h2&gt;

&lt;p&gt;A structured checklist helps reduce the risk of unexpected downtime. In as much as this is not very exhaustive, tailor this to what your organization use. &lt;/p&gt;
&lt;h3&gt;
  
  
  Before the Upgrade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Test the upgrade in a development or staging environment.&lt;/li&gt;
&lt;li&gt;Confirm that application owners have been notified.&lt;/li&gt;
&lt;li&gt;Validate application compatibility with the target RHEL release.&lt;/li&gt;
&lt;li&gt;Obtain the necessary management and change-control approvals.&lt;/li&gt;
&lt;li&gt;Take a backup or snapshot and verify the recovery procedure.&lt;/li&gt;
&lt;li&gt;Update the source system to the latest supported RHEL 8 minor release.&lt;/li&gt;
&lt;li&gt;Confirm that the appropriate kernel is installed and running.&lt;/li&gt;
&lt;li&gt;Verify subscription status and repository accessibility.&lt;/li&gt;
&lt;li&gt;Review third-party repositories and packages.&lt;/li&gt;
&lt;li&gt;Confirm console access.&lt;/li&gt;
&lt;li&gt;Document current services, network settings, mount points, and application dependencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  During the Upgrade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Run the Leapp pre-upgrade assessment.&lt;/li&gt;
&lt;li&gt;Review and resolve all upgrade inhibitors.&lt;/li&gt;
&lt;li&gt;Review any additional warnings that could affect the workload.&lt;/li&gt;
&lt;li&gt;Run the upgrade only after the system is ready.&lt;/li&gt;
&lt;li&gt;Monitor progress through the available console.&lt;/li&gt;
&lt;li&gt;Keep the recovery plan accessible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  After the Upgrade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Verify the operating system release and running kernel.&lt;/li&gt;
&lt;li&gt;Confirm that SELinux is operating in the intended mode.&lt;/li&gt;
&lt;li&gt;Validate networking, DNS, routing, and authentication.&lt;/li&gt;
&lt;li&gt;Verify critical system services.&lt;/li&gt;
&lt;li&gt;Test application functionality.&lt;/li&gt;
&lt;li&gt;Confirm database and storage availability.&lt;/li&gt;
&lt;li&gt;Revalidate monitoring, logging, and security controls.&lt;/li&gt;
&lt;li&gt;Review temporary files, obsolete packages, and upgrade logs.&lt;/li&gt;
&lt;li&gt;Update operational documentation and monitoring baselines.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Performing Backups
&lt;/h2&gt;

&lt;p&gt;Once you have management approvals and the upgrade has been tested, the next step is to protect the existing environment.&lt;/p&gt;

&lt;p&gt;The backup method should be selected according to the server's role, storage layout, and recovery requirements. Let's consider a few scenarioes:&lt;/p&gt;
&lt;h3&gt;
  
  
  Virtual Machines
&lt;/h3&gt;

&lt;p&gt;A hypervisor snapshot may provide a convenient recovery point. However, snapshots are not a substitute for an independent backup. Follow the hypervisor vendor's guidance and ensure that application consistency requirements are addressed.&lt;/p&gt;
&lt;h3&gt;
  
  
  Physical Servers
&lt;/h3&gt;

&lt;p&gt;Depending on the environment, recovery options may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Red Hat-compatible ReaR recovery images.&lt;/li&gt;
&lt;li&gt;Storage or logical-volume snapshots.&lt;/li&gt;
&lt;li&gt;File-level backups.&lt;/li&gt;
&lt;li&gt;Full-system backup solutions.
At a minimum, protect critical configuration files, application data, and other information required to rebuild the service.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Database Servers
&lt;/h3&gt;

&lt;p&gt;Database workloads require special attention. Take an appropriate logical backup or consistent database snapshot in addition to the system-level backup. Follow the database vendor's instructions for ensuring that the backup can be restored.&lt;/p&gt;
&lt;h3&gt;
  
  
  Application Servers
&lt;/h3&gt;

&lt;p&gt;Review the application vendor's backup and recovery guidance. Where practical, install and test the application on a separate RHEL 9 system before upgrading the production server.&lt;/p&gt;

&lt;p&gt;This helps identify unsupported dependencies before they become an operational problem.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prepare and Update the RHEL 8 System
&lt;/h2&gt;

&lt;p&gt;Before upgrading, verify the system's current state. Start by obtaining an administrative shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the operating system release:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/redhat-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the running kernel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the subscription status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;subscription-manager status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inspect enabled repositories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf repolist &lt;span class="nt"&gt;--enabled&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzeawt2y8n6y90aldvt4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzeawt2y8n6y90aldvt4t.png" alt=" " width="799" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Review repository configuration carefully, especially if the server uses Satellite, custom repository definitions, or third-party software sources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Update the System
&lt;/h3&gt;

&lt;p&gt;After confirming that the repositories are correct and the backup is available, update the source operating system according to your organization's patching procedures.&lt;br&gt;
For a standard RHEL 8 environment, the following commands can be used as a starting point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf clean all
dnf update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the transaction before allowing it to proceed in a production environment.&lt;/p&gt;

&lt;p&gt;If a reboot is required, schedule it through the normal change-control process if you have not done so already for the upgrade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the system returns, verify the release and running kernel again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/redhat-release
&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp46jhx02sxbqdazcyzra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp46jhx02sxbqdazcyzra.png" alt=" " width="799" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirm that the system is healthy before continuing.&lt;/p&gt;

&lt;p&gt;Make these changes only when they are required by the supported upgrade procedure for your environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review Leapp Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before installing or updating Leapp, inspect the existing environment for obsolete upgrade tooling, package conflicts, and unsupported third-party dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf remove leapp python2-leapp snactor leapp-upgrade-el7toel8 &lt;span class="nt"&gt;--disableexcludes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;all &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rpm &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nt"&gt;--nodeps&lt;/span&gt; leapp-deps-el8 leapp-repository-deps-el8 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fejbj2i4p1393ipw5xacz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fejbj2i4p1393ipw5xacz.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Older Leapp packages left over from previous major-version migrations can cause confusion or interfere with the intended procedure hence we had to remove them. &lt;/p&gt;

&lt;p&gt;Once the older Leapp application is removed as show in the diagram above, install the newer version from the enabled repo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; leapp-upgrade vdo kmod-kvdo &lt;span class="nt"&gt;--disableexcludes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;all 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installs the Leapp binaries and capabilities to manage old vdo disks with the logical volume manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwc66xa4u38trua0irbvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwc66xa4u38trua0irbvk.png" alt=" " width="799" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also check the installed storage, virtualization, security, and application components for known compatibility restrictions.&lt;/p&gt;

&lt;p&gt;This raise the file descriptor limit. The default value is 1024 and the upgrade process will need to open a lot of files during the upgrade. Ensure it is run on the same shell where the upgrade will be initiated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ulimit&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 65535
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fchbe7tge4ae2qbamp8iy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fchbe7tge4ae2qbamp8iy.png" alt=" " width="799" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the crypto policy to LEGACY to ensure that legacy applications work, you can change this back to default or whatever crypto policy in place in your environment after the upgrade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;update-crypto-policies &lt;span class="nt"&gt;--set&lt;/span&gt; LEGACY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5t2r1rh4ll2qbjjyy8qv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5t2r1rh4ll2qbjjyy8qv.png" alt=" " width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Disable Firewall zone drifting. This is an old feature of the firewall on older RHEL which allows packets destined for undefined zones to end up on the default firewall zone and these packets could be accepted on these zones. This feature is not accepted on RHEL 9 or other newer versions. If not disabled, Leapp will mark it as an inhibitor to the upgrade. Disable with the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; s/^AllowZoneDrifting&lt;span class="o"&gt;=&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;/AllowZoneDrifting&lt;span class="o"&gt;=&lt;/span&gt;no/ /etc/firewalld/firewalld.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Third-Party Software
&lt;/h3&gt;

&lt;p&gt;Third-party software can introduce upgrade blockers. Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker CE and associated packages.&lt;/li&gt;
&lt;li&gt;Kubernetes components.&lt;/li&gt;
&lt;li&gt;Custom kernel modules.&lt;/li&gt;
&lt;li&gt;Security agents.&lt;/li&gt;
&lt;li&gt;Monitoring agents.&lt;/li&gt;
&lt;li&gt;Backup software.&lt;/li&gt;
&lt;li&gt;Proprietary application dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In as much as uninstalling before and reinstalling the application after the upgrade works for most cases, it might not be necessary. Check the vendor's compatibility matrix and supported migration instructions first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the Leapp Pre-Upgrade Assessment
&lt;/h2&gt;

&lt;p&gt;The pre-upgrade assessment is one of the most important stages of the migration. It evaluates the system and generates a report identifying potential issues.&lt;/p&gt;

&lt;p&gt;On a connected system using the standard Red Hat subscription and repository workflow, the assessment is generally initiated with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leapp preupgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Without RHSM access, Leapp can use local repositories or ISO images:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;leapp upgrade --no-rhsm --enablerepo rhel-9-baseos --enablerepo rhel-9-appstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You will need to define those repositories under /etc/yum.repos.d/ (or supply the RHEL 9 ISO) before running the command. Red Hat Satellite is the better option for fleets, because it also centralises content views and approvals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For environments using custom repositories, disconnected installation media, or a particular target minor release, additional configuration may be required.&lt;/p&gt;

&lt;p&gt;Use the exact command and repository configuration documented for your environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsfsyqmxgrf6k07h8eu9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsfsyqmxgrf6k07h8eu9k.png" alt=" " width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the assessment completes, in most cases like the example in the image above, you will see some inhibitors(errors), inspect the report:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;less /var/log/leapp/leapp-report.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the answer file when applicable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;less /var/log/leapp/answerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg6v9whi84hlwym1nq7kg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg6v9whi84hlwym1nq7kg.png" alt=" " width="799" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The report may identify inhibitors, warnings, and other findings that require attention.&lt;/p&gt;

&lt;p&gt;There are situations where there is no inhibitor and in such case, you can go ahead with the upgrade. &lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;inhibitor&lt;/strong&gt; is an issue that prevents the upgrade from proceeding until it has been resolved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting Common Upgrade Inhibitors
&lt;/h2&gt;

&lt;p&gt;The exact issues reported by Leapp depend on the installed packages, configuration, and source system history.&lt;/p&gt;

&lt;p&gt;The following examples illustrate common categories of problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Unanswered Questions in the Answer File
&lt;/h3&gt;

&lt;p&gt;Leapp may require explicit answers to certain questions before it can proceed.&lt;br&gt;
Review the answer file and identify the section associated with the reported issue.&lt;br&gt;
For example, if the report identifies the VDO confirmation section as requiring an answer, the documented response may be supplied using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leapp answer &lt;span class="nt"&gt;--section&lt;/span&gt; remove_pam_pkcs11_module_check.confirm&lt;span class="o"&gt;=&lt;/span&gt;True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this example only when the corresponding question is present and its answer is appropriate for the system.&lt;/p&gt;

&lt;p&gt;Do not copy answer-file commands blindly. Different inhibitors require different responses, and some findings require configuration changes rather than a simple confirmation.&lt;/p&gt;

&lt;h3&gt;
  
  
  B. Unsupported Kernel Modules
&lt;/h3&gt;

&lt;p&gt;Legacy or unsupported kernel modules can prevent a migration.&lt;br&gt;
Examples that may be encountered in particular environments include &lt;code&gt;pata_acpi&lt;/code&gt; and &lt;code&gt;floppy&lt;/code&gt;.&lt;br&gt;
First, determine whether the module is loaded and whether the system actually requires it.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsmod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'pata_acpi|floppy'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;modprobe &lt;span class="nt"&gt;-r&lt;/span&gt; pata_acpi &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"blacklist pata_acpi"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/modprobe.d/blacklist-pata_acpi.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;modprobe &lt;span class="nt"&gt;-r&lt;/span&gt; floppy &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"blacklist floppy"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/modprobe.d/blacklist-floppy.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the module is confirmed to be unnecessary and the supported remediation calls for disabling it, follow the documented procedure.&lt;br&gt;
Do not unload or blacklist kernel modules indiscriminately. Doing so can affect hardware, storage, or system functionality.&lt;/p&gt;
&lt;h3&gt;
  
  
  C. Legacy Network Configuration
&lt;/h3&gt;

&lt;p&gt;Older network scripts and custom interface configurations can cause compatibility problems. Inspect the network connections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli connection show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review legacy network configuration files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /etc/sysconfig/network-scripts/
&lt;span class="nb"&gt;mv&lt;/span&gt; /etc/sysconfig/network-scripts/ifcfg-lo.bak /root/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where appropriate, NetworkManager provides a command to migrate supported connection profiles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli connection migrate &lt;span class="s2"&gt;"ens192"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Replace &lt;code&gt;ens192&lt;/code&gt; with the actual connection profile name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before changing a production network configuration, back up the relevant files and ensure that console access is available.&lt;br&gt;
Never assume that every legacy network script should be removed. Determine which files are active and whether the reported issue applies to the system.&lt;/p&gt;
&lt;h3&gt;
  
  
  D. Configuration Management and Watchdog Services
&lt;/h3&gt;

&lt;p&gt;Configuration-management agents, automated remediation services, and hardware watchdogs can interfere with a maintenance operation if they trigger changes or reboots unexpectedly.&lt;br&gt;
Identify the services installed on the system and determine whether the upgrade procedure requires any of them to be temporarily stopped.&lt;/p&gt;

&lt;p&gt;Coordinate this with the relevant operations teams.&lt;/p&gt;

&lt;p&gt;Do not disable monitoring, watchdogs, or configuration-management services without a clear reason and a plan to restore them after the upgrade.&lt;/p&gt;
&lt;h3&gt;
  
  
  E. RPM Database Warnings
&lt;/h3&gt;

&lt;p&gt;Leapp may report issues involving the RPM database or package metadata.&lt;br&gt;
Before attempting a repair, inspect the reported error and confirm the recommended remediation.&lt;/p&gt;

&lt;p&gt;If a database backup and rebuild are appropriate for the specific issue, an example of the backup procedure is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; /var/lib &lt;span class="nt"&gt;-czf&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"/root/rpmdb-backup-&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F-%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz"&lt;/span&gt; rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A database rebuild should be performed only when justified by the diagnostic findings and applicable vendor guidance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rpm &lt;span class="nt"&gt;--verifydb&lt;/span&gt;
rpm &lt;span class="nt"&gt;--rebuilddb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not rebuild the RPM database merely because an unrelated warning appears in the upgrade report.&lt;/p&gt;

&lt;h3&gt;
  
  
  F. Root SSH Login and Authentication Configuration
&lt;/h3&gt;

&lt;p&gt;Authentication configuration can introduce compatibility or security issues during a major-version upgrade.&lt;/p&gt;

&lt;p&gt;Review any reported findings involving SSH, PAM, or authentication modules.&lt;/p&gt;

&lt;p&gt;Do not enable root SSH login simply to work around an upgrade problem.&lt;/p&gt;

&lt;p&gt;If a report identifies a specific authentication configuration as incompatible, follow the documented remediation while maintaining the organization's security requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  G. The Newest Installed Kernel is not the Running Kernel
&lt;/h3&gt;

&lt;p&gt;This happens in a situation where you have a more recent kernel installed but an older kernel is booting up. Run the following commands to verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;
grubby &lt;span class="nt"&gt;--default-kernel&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a normal system, both would return the same kernel. However, when both of them are not agreeing, find out the default kernel and then sue the following commmand to fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;grubby &lt;span class="nt"&gt;--set-default&lt;/span&gt; /boot/vmlinuz-4.18.kernel.x86_64
grubby &lt;span class="nt"&gt;--default-kernel&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the problem is not fixed, reboot and rebuild grub. First, confirm the disk partition holding the boot device, reinstall grub on it and regenerate the grub configuration file. In the example below, I assume the  /boot partition is on the /dev/sda drive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;grub2-install /dev/sda 
grub2-mkconfig &lt;span class="nt"&gt;-o&lt;/span&gt; /boot/grub2/grub.cfg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Execute the In-Place Upgrade
&lt;/h2&gt;

&lt;p&gt;Once all inhibitors have been resolved, review the report again and confirm that the system is ready.&lt;/p&gt;

&lt;p&gt;Before starting, verify that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The backup is available.&lt;/li&gt;
&lt;li&gt;The recovery procedure is understood.&lt;/li&gt;
&lt;li&gt;The source system is healthy.&lt;/li&gt;
&lt;li&gt;The target release is supported.&lt;/li&gt;
&lt;li&gt;The required repositories are accessible.&lt;/li&gt;
&lt;li&gt;The application owners are ready to validate the workload.&lt;/li&gt;
&lt;li&gt;Console access is available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a standard connected system, the upgrade is generally initiated using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;leapp upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Without RHSM access, Leapp can use local repositories or ISO images:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;leapp upgrade --no-rhsm --enablerepo rhel-9-baseos --enablerepo rhel-9-appstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You will need to define those repositories under /etc/yum.repos.d/ (or supply the RHEL 9 ISO) before running the command. Red Hat Satellite is the better option for fleets, because it also centralises content views and approvals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7o6v0yd2z9k2c2aj3394.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7o6v0yd2z9k2c2aj3394.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the target-version and repository options required by the specific supported upgrade procedure.&lt;/p&gt;

&lt;p&gt;For example, custom repository configurations may require additional parameters. Do not reuse a command copied from another environment without confirming that its target version and repositories match your system.&lt;/p&gt;

&lt;p&gt;Monitor the process and wait for the expected completion state before proceeding.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happens During the Upgrade?
&lt;/h3&gt;

&lt;p&gt;The upgrade process involves several stages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Transaction preparation&lt;/strong&gt;&lt;br&gt;
Leapp evaluates the required packages and prepares the changes necessary to transition the system to the target release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Upgrade environment preparation&lt;/strong&gt;&lt;br&gt;
The process prepares a dedicated boot environment for performing the migration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Package migration&lt;/strong&gt;&lt;br&gt;
During the upgrade, the system replaces or updates packages and components as required by the target operating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Reboot and finalization&lt;/strong&gt;&lt;br&gt;
The system reboots into the upgrade environment and performs the migration. It subsequently boots into the upgraded operating system if the process completes successfully.&lt;/p&gt;

&lt;p&gt;The exact behavior and duration depend on the system, installed packages, and repository configuration.&lt;/p&gt;

&lt;p&gt;Avoid interrupting the process unless required by an established recovery procedure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqy0jwm3oaji7mcv3xz5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqy0jwm3oaji7mcv3xz5a.png" alt=" " width="799" height="433"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Troubleshooting an Upgrade That Does Not Complete
&lt;/h2&gt;

&lt;p&gt;If the system fails to complete the upgrade, begin by examining the logs rather than immediately attempting another upgrade.&lt;br&gt;
Depending on the failure stage, useful locations may include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;less /var/log/leapp/leapp-report.txt
less /var/log/leapp/leapp-upgrade.log
less /run/initramfs/rdsosreport.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The files available and their relevance depend on how far the upgrade progressed. For a system that boots successfully, inspect the system journal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For earlier boot attempts, review the relevant previous boot where journal history is available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;--list-boots&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then inspect the appropriate boot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the error messages to determine whether the problem involves package dependencies, boot configuration, storage, networking, or another component.&lt;/p&gt;

&lt;p&gt;If the server cannot boot normally, use the available console and follow the recovery procedure appropriate to the failure stage.&lt;/p&gt;

&lt;p&gt;Do not assume that a failed upgrade can always be reversed with a simple rollback command. Recovery may require restoring a validated backup or following the documented recovery procedure for the environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the Upgraded System
&lt;/h2&gt;

&lt;p&gt;After the system boots successfully, verify the operating system and confirm that the migration completed as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check the Operating System Release
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/os-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/redhat-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsi0rtkpi8b93pir0lf8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsi0rtkpi8b93pir0lf8y.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirm that the system reports the intended RHEL 9 release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check the Running Kernel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm that the running kernel is appropriate for the upgraded operating system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check System Services
&lt;/h3&gt;

&lt;p&gt;Review failed services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl &lt;span class="nt"&gt;--failed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inspect the system journal for relevant errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-p&lt;/span&gt; err &lt;span class="nt"&gt;-b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Investigate any failures affecting the operating system or business applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verify Network Connectivity
&lt;/h3&gt;

&lt;p&gt;Check the network configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip address
ip route
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm that DNS resolution and connectivity to required services are working.&lt;br&gt;
For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;getent hosts labs.ifeatu.africa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;labs.ifeatu.africa&lt;/code&gt; with a hostname relevant to your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validate Applications
&lt;/h3&gt;

&lt;p&gt;Work with application owners to confirm that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Critical services start successfully.&lt;/li&gt;
&lt;li&gt;Databases are accessible.&lt;/li&gt;
&lt;li&gt;Application endpoints respond correctly.&lt;/li&gt;
&lt;li&gt;Authentication works.&lt;/li&gt;
&lt;li&gt;Scheduled jobs operate as expected.&lt;/li&gt;
&lt;li&gt;Monitoring and alerting are functioning.&lt;/li&gt;
&lt;li&gt;Backup jobs remain operational.&lt;/li&gt;
&lt;li&gt;Performance is within acceptable limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A successful operating system boot is not sufficient evidence that the entire business service is healthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Post-Upgrade Cleanup &amp;amp; Operations
&lt;/h2&gt;

&lt;p&gt;Once the upgraded system has been validated, review any remaining cleanup tasks.&lt;/p&gt;

&lt;p&gt;Clean up all RHEL 8 Kernels after confirming the booted RHEL 9 Kernel is active:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt;
rpm &lt;span class="nt"&gt;-qa&lt;/span&gt; &lt;span class="s1"&gt;'kernel*'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'\.el8'&lt;/span&gt;
dnf remove &lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-qa&lt;/span&gt; &lt;span class="s1"&gt;'kernel*'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'\.el8'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean up other leftovers from the previous installations - in this case, I will be removing items from old RHEL 7 and RHEL 8 installations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rpm &lt;span class="nt"&gt;-qa&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'\.el[78]'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-vE&lt;/span&gt; &lt;span class="s1"&gt;'^(gpg-pubkey|libmodulemd|katello-ca-consumer)'&lt;/span&gt; | &lt;span class="nb"&gt;sort
sudo &lt;/span&gt;dnf remove &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-qa&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'\.el[78]'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-vE&lt;/span&gt; &lt;span class="s1"&gt;'^(gpg-pubkey|libmodulemd|katello-ca-consumer)'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Retain the upgrade logs according to your organization's troubleshooting, audit, and retention requirements.&lt;/p&gt;

&lt;p&gt;Review security settings and confirm that any temporary changes made during troubleshooting have been reversed where appropriate.&lt;/p&gt;

&lt;p&gt;Restore normal monitoring and configuration-management operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rollback
&lt;/h2&gt;

&lt;p&gt;Leapp does not provide a built-in uninstall. Your rollback is whatever you prepared for earlier in this backup. Trust me I have seen situations where everything works fine but a single feature of the application which is not available after the upgrade was the reason for a rollback. Depending on what you planned for, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VM snapshot: revert the snapshot (accept the data loss since the snapshot was taken)&lt;/li&gt;
&lt;li&gt;LVM snapshot: merge the snapshot back and reboot&lt;/li&gt;
&lt;li&gt;ReaR or backup: restore the full system image
Decide in advance what "point of no return" means: for example, "if the app is not healthy within 60 minutes of the reboot, revert." That decision is much easier before the maintenance window than during it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Lessons and Recommendations
&lt;/h2&gt;

&lt;p&gt;Congratulations you made it to this point. An in-place RHEL upgrade from RHEL 8 to 9 is a technical exercise, but its success depends just as much on preparation and coordination as it does on executing commands.&lt;/p&gt;

&lt;p&gt;From planning to post-upgrade validation, administrators should focus on the following principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Plan before executing:&lt;/strong&gt; Confirm the supported upgrade path, application compatibility, and maintenance window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Back up and test recovery:&lt;/strong&gt; Ensure that a reliable recovery option is available before making major system changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use the pre-upgrade report:&lt;/strong&gt; Resolve inhibitors and investigate warnings instead of treating the assessment as a formality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understand your dependencies:&lt;/strong&gt; Third-party applications, drivers, repositories, and configuration-management tools can affect the outcome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintain console access:&lt;/strong&gt; Do not rely exclusively on SSH during an operation that changes core operating system components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate business services:&lt;/strong&gt; Confirm application functionality, networking, authentication, monitoring, and security after the upgrade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow official documentation:&lt;/strong&gt; Use the supported procedure for the exact source release, target release, architecture, and environment.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Upgrading from RHEL 8 to RHEL 9 is an important infrastructure lifecycle activity that can improve security, maintain supportability, and prepare systems for future technology requirements.&lt;/p&gt;

&lt;p&gt;However, a successful upgrade requires more than running a few commands. It demands careful planning, compatibility checks, tested backups, systematic troubleshooting, and thorough post-upgrade validation.&lt;/p&gt;

&lt;p&gt;Leapp provides a structured approach to supported in-place upgrades, but administrators must understand the environment and resolve the issues identified by the assessment before proceeding.&lt;/p&gt;

&lt;p&gt;I am documenting this process to share practical lessons from Linux administration, help other engineers troubleshoot real-world challenges, and make enterprise operating system upgrades easier to plan and execute confidently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The next in this series will be upgrading from RHEL 9 to 10.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>infrastructure</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
