What You Will Know After Reading This
- Why RHEL 7 end of support (maintenance ended 30 June 2024) leaves only a paid, shrinking ELS window, and what that costs you in audit exposure.
- Why Leapp cannot jump from 7 to 9, and how the two-hop path (
7.9 → 8.10 → 9.x) actually runs.- Which OpenSSL 3.0 and crypto-policy defaults will break legacy TLS clients, SHA-1 signatures, and short RSA keys.
- How the iptables-to-nftables shift and Python 2.7 removal surface in production.
- A qualification matrix for choosing in-place upgrade or greenfield rebuild, plus a 5-phase risk checklist.
Table of Contents
- Why a RHEL 7 to 9 Migration Is Not a Simple “Yum Update”
- RHEL Migration Strategy: Comparison Matrix and Scenario Math
- The Two-Hop Upgrade Workflow
- The Ekfrazo 5-Stage RHEL Migration and Risk Checklist
- Where Linux Migrations Fail: Hidden Kernel and Crypto Traps
- Qualification Matrix: In-Place Upgrade vs. Greenfield Migration
- How Ekfrazo Delivers Secure Enterprise Linux Modernization
- Frequently Asked Questions
Why a RHEL 7 to 9 Migration Is Not a Simple “Yum Update”
A rhel 7 to 9 migration crosses two major releases, two kernel ABIs (3.10 to 4.18 to 5.14), and three crypto generations, so treating it like a patch cycle invites boot failures and broken integrations.
On RHEL 7, yum update stays inside one kernel ABI and library baseline. RHEL 9 changes almost everything underneath your applications. Python 2.7 is gone. /usr/bin/python no longer exists by default. OpenSSL jumps from 1.0.2k to 3.0. The packet filter becomes nftables. ntpd is replaced by chrony, docker by podman, and legacy network-scripts by NetworkManager.
Skip the planning and you find out the hard way: a third-party kernel module fails on first boot, a Python 2 daemon dies silently, or a TLS 1.0 payment gateway stops connecting at 2 a.m.
Facing Legacy RHEL 7 End of Support Deadlines? Stop guessing your upgrade path. Request a RHEL migration assessment to evaluate your kernel modules and custom binaries with Ekfrazo’s senior engineers.
RHEL Migration Strategy: Comparison Matrix and Scenario Math
A sound rhel migration strategy picks between a two-hop Leapp in-place upgrade (7→8→9) and a greenfield parallel build, based on configuration drift, application runtimes, and the downtime your business can absorb.
| Migration Approach | Engineering Effort | Downtime Window | Best For |
|---|---|---|---|
| In-Place 2-Hop (Leapp 7→8→9) | Medium. Two inhibitor-remediation cycles, two reboots, two validation passes | 2 to 6 hours per host, split across two windows | Standard RPM workloads, low drift, VMs with good snapshots |
| Greenfield Parallel (new RHEL 9 + cutover) | High upfront. Rebuild via Ansible/Image Builder, data sync, app re-test | Minutes to 1 hour at DNS/load-balancer cutover | Heavy cruft, hardware refresh, Python 2 apps, regulated estates |
| Convert2RHEL then Leapp | Medium-high. Convert CentOS/Oracle Linux 7 first, then run both hops | Same as in-place, plus one conversion window | CentOS 7 estates that need a supported path |
| Stay on RHEL 7 ELS (defer) | Low now, rising later | None today | Short bridge only, with a funded exit date |
Scenario: the true cost of “just staying on ELS”
Take a mid-size estate of 200 RHEL 7 servers. RHEL 7 standard maintenance ended on 30 June 2024. ELS add-on coverage runs to 30 June 2028, but it covers only selected Critical and Important fixes for a defined package set. Newer TLS libraries, Python runtimes, and container tooling stay frozen.
Now the compliance math. If a PCI DSS or ISO/IEC 27001 auditor flags those hosts as outside mainstream support, each one becomes a documented exception. At 2 engineering hours per host per quarter for tracking, scanning, and sign-off, that is 1,600 hours a year defending old servers, before ELS fees. And every quarter you defer compresses the final cutover, because 2028 does not move.
The Two-Hop Upgrade Workflow
+------------------+ +-------------------------+ +--------------------+
| RHEL 7.9 Source | --> | Leapp Pre-Upgrade Check| --> | RHEL 8.10 Interim |
| (fully patched) | | leapp preupgrade | | validate + harden |
+------------------+ | fix inhibitors | +---------+----------+
+-------------------------+ |
v
+------------------+ +-------------------------+ +--------------------+
| RHEL 9 Target | <-- | Leapp Second Hop | <-- | Leapp Pre-Upgrade |
| SELinux enforce | | leapp upgrade (8 -> 9) | | Check (8.10 -> 9) |
| crypto: DEFAULT | | reboot + verify | | fix new inhibitors |
+------------------+ +-------------------------+ +--------------------+
Treat RHEL 8.10 as a real checkpoint: run your test suite there before the second hop.
The Ekfrazo 5-Stage RHEL Migration and Risk Checklist
The Ekfrazo checklist splits a red hat enterprise linux upgrade into five gated phases: inventory, two-hop execution, crypto transition, firewall modernization, and validation, each with its own exit criteria.
Phase 1: Pre-Upgrade Inventory and Deprecated Package Audit (Leapp Pre-Upgrade)
- Confirm entitlement with
subscription-manager statusand lock the host to RHEL 7.9 with all errata applied. - Register with
insights-clientand run the pre-upgrade advisor across the fleet to catch inhibitors at scale. - Run
leapp preupgradeand read/var/log/leapp/leapp-report.txt. Resolve every inhibitor and record answers in/var/log/leapp/answerfile. - Map RPM dependency trees (
repoquery --whatrequires) to flag EPEL, vendor, or hand-built RPMs with no RHEL 8 equivalent. - CentOS or Oracle Linux 7 hosts go through
convert2rhelfirst.
Phase 2: Two-Hop Upgrade Strategy (RHEL 7 → RHEL 8 → RHEL 9)
- Snapshot or back up (ReaR, VM snapshot, or storage clone) before each hop.
- Hop 1:
leapp upgradeto RHEL 8.10, reboot, validate services. - Hop 2: re-run
leapp preupgradeon 8.10 (new inhibitors appear here), then upgrade to a supported RHEL 9 minor listed in Red Hat’s current upgrade-path matrix. - Rebuild or replace Python 2.7 code. RHEL 9 ships Python 3.9 as the platform runtime, with newer 3.x streams available.
Phase 3: Cryptographic Transition (OpenSSL 1.0.2 to OpenSSL 3.0 Cipher Suites)
- RHEL 9 runs OpenSSL 3.0 under system-wide crypto policies.
DEFAULTdisables TLS 1.0/1.1 and SHA-1 signatures. - Inventory every certificate, keystore, and partner endpoint. Reissue RSA keys under 2048 bits and any SHA-1-signed certs.
- Use
update-crypto-policies --showand test againstDEFAULT. Only use a scoped subpolicy (for exampleDEFAULT:SHA1) as a time-boxed exception, neverLEGACYfleet-wide.
Phase 4: Network and Firewall Modernization (iptables to nftables)
- Export existing rules (
iptables-save) and translate withiptables-restore-translate. - Move policy into
firewalldzones (nftables backend) or nativenftrulesets managed in Git. - Re-test anything writing raw iptables rules (fail2ban, older Kubernetes agents, scripts).
- Convert
ifcfgnetwork scripts to NetworkManager keyfiles.
Phase 5: Post-Upgrade Validation, SELinux Enforcement, and Hardening
- Confirm
getenforcereturnsEnforcing. Leapp may relabel or set permissive during upgrade. - Remove leftover el7/el8 packages (
rpm -qa | grep -E 'el7|el8') and stale kernels. - Apply a CIS or DISA STIG profile with OpenSCAP, and re-run
insights-clientfor drift. - For broader controls, align with our Enterprise Linux infrastructure hardening practice.
Where Linux Migrations Fail: Hidden Kernel and Crypto Traps
Most failed RHEL upgrades trace back to four traps: non-kABI kernel modules, legacy TLS dependencies, hard-coded Python 2 paths, and firewall tooling that still assumes iptables.
- Kernel modules without kABI compliance. Storage, backup, and EDR agents often ship kmods built for kernel 3.10 that will not load on 4.18 or 5.14. Result: missing disks, failed boot, or a dark security console.
- Legacy TLS mismatches. The mainframe connector or partner endpoint that only speaks TLS 1.0 fails closed with handshake errors.
- Python 2 shebangs. Cron jobs with
#!/usr/bin/pythonstop running with no alert. Nobody notices until a report goes missing. - Silent firewall drift. Rules applied by scripts using
iptables -Amay load into the compat layer but not match whatfirewalldreports, creating gaps auditors find before you do.
For a wider view of these patterns, see our guide on Red Hat modernization risk management.
3 Questions Infrastructure Leads Must Ask Before Approving a RHEL Upgrade Plan
- Which third-party kernel modules and agents have vendor-certified builds for RHEL 8 and RHEL 9?
- Which external systems still negotiate TLS 1.0/1.1 or present SHA-1 certificates, and who owns fixing them?
- What is our tested rollback time per hop, and has anyone actually restored from it?
Qualification Matrix: In-Place Upgrade vs. Greenfield Migration
Choose in-place Leapp when hosts are clean, RPM-managed, and low on custom kernel code. Choose greenfield when drift, dead runtimes, or new hardware make a rebuild cheaper than remediation.
In-Place Upgrade (Leapp) If:
- All software comes from RHEL or vendor repos with RHEL 8 and 9 builds.
- Few or no custom kernel wrappers, out-of-tree drivers, or patched system libraries.
- The host is a VM with fast snapshot and restore.
Greenfield Migration If:
- Years of hand-edited configs and manual installs mean nobody trusts what is on the box.
- Core apps depend on Python 2.7, old Java builds, or libraries with no RHEL 9 package.
- A hardware refresh, cloud move, or datacenter exit is already planned.
How Ekfrazo Delivers Secure Enterprise Linux Modernization
Ekfrazo runs RHEL migrations as governed programs that connect platform upgrades to customer (CX), employee (EX), and operational (OX) outcomes, with ISO/IEC-aligned change control at every gate.
Migration waves are sequenced around customer-facing services, engineer tooling, and the SLAs you report on. We use Ansible for repeatable builds, Insights for fleet-wide inhibitor analysis, and evidence packs auditors accept. Learn more about our Red Hat consulting and migration services.
Ready to Retire RHEL 7 Without the Outage?
Get a fleet-level inhibitor report, kABI and crypto risk scoring, and a costed in-place vs. greenfield plan from Ekfrazo’s Red Hat architects.
Frequently Asked Questions
Can I upgrade directly from RHEL 7 to RHEL 9?
No. Leapp supports in-place upgrades only between adjacent major releases, so a RHEL 7 to 9 migration needs two hops (7.9 → 8.10 → 9.x) or a greenfield rebuild on RHEL 9.
When is RHEL 7 end of support?
RHEL 7 standard maintenance ended on 30 June 2024. Paid Extended Life Support continues until 30 June 2028 but covers only selected critical and important fixes, not new features or runtimes.
What is the best RHEL migration strategy for large estates?
Most large estates use a hybrid. Clean, RPM-managed VMs go through two-hop Leapp upgrades, while drift-heavy or Python 2 hosts are rebuilt on RHEL 9 with Ansible and cut over in parallel.
What breaks most often after moving to RHEL 9?
The usual failures are out-of-tree kernel modules, TLS 1.0/1.1 or SHA-1 dependencies blocked by OpenSSL 3.0 crypto policies, Python 2 scripts, and firewall scripts written for legacy iptables.
How long does a RHEL 7 to 9 migration take?
A single host takes 2 to 6 hours of upgrade time across two windows. A 200-server estate typically needs 3 to 6 months, including assessment, pilot waves, application testing, and phased rollout.