Field notes

Ubuntu 20.04 and RHEL 7 end of life: what to move to and how

Two of the most common Linux releases in production have passed the end of their standard support. RHEL 7 left maintenance in June 2024. Ubuntu 20.04 left standard support in May 2025. Both are still patched if you pay for it, and plenty of estates are doing exactly that while they decide what comes next.

This post sets out the dates as the vendors publish them, what extended support does and does not buy, which release to move each one to, and the two ways to get there.

The dates, from the vendors

Ubuntu 20.04 LTS, from Canonical's release cycle page:

Red Hat Enterprise Linux 7, from Red Hat's RHEL 7 end-of-maintenance page:

Vendors change these dates now and then, as Red Hat did with ELS, so check the vendor's page again before you commit a plan to them.

What extended support buys, and what it doesn't

ESM and ELS keep security fixes coming for the release you already run. That is worth a lot: it turns a hard deadline into a budget line, and it keeps you out of the audit finding for running an unpatched operating system.

It does not change anything else. You stay on the same kernel line, the same compilers and runtimes, and the same versions of PostgreSQL, Python and OpenSSL your applications were built against. New software increasingly needs newer libraries than the old release has. You pay per host for the time. And the date still arrives, only later, by which point the gap to a current release is wider.

Extended support is a good way to make room for a migration. It is a poor substitute for one.

Where to move Ubuntu 20.04

For most fleets the practical answer is 24.04. Nearly every package keeps its name between 20.04 and 24.04; the work is in the versions. PostgreSQL goes from 12 to 16 and MariaDB from 10.3 to 10.11, and their data directories have to be moved, not just reinstalled. The Ubuntu 20.04 to 24.04 guide covers what changes for that move.

Where to move RHEL 7

For most RHEL 7 estates, RHEL 9 is the target. You keep your subscriptions; only the hosts are new. The jump is big enough to plan for: ntp becomes chrony, authconfig becomes authselect, network.service is replaced by NetworkManager, Java 8 applications meet OpenJDK 17, and PostgreSQL goes from 9.2 to a current release. The RHEL 7 to RHEL 9 guide covers what changes for that move.

What usually decides the timeline

The operating system is rarely the slow part. Three things are:

Start these conversations first. The rebuild itself is the quick part.

How to get there: upgrade in place, or rebuild

In place. Both vendors upgrade one release at a time. On Ubuntu, do-release-upgrade moves from one LTS to the next, so 20.04 to 24.04 means going through 22.04 first: two upgrades, and two rounds of prompts about changed configuration files. On RHEL, Red Hat's Leapp tool upgrades RHEL 7.9 to RHEL 8.10, and then a second Leapp run takes the host to RHEL 9. Each run has its own pre-upgrade report and inhibitors to clear. Either way, the work happens on the production machine, and the way back is a restore from backup.

Rebuild. Read what the old server does, write that down as a plan, build a fresh server on the new release from the plan, check it against the old one, and switch traffic over. It is one step regardless of how many releases you are crossing. The old server is untouched, so it is your rollback, and the new server carries only what you decided to carry, not years of leftovers.

In place can be the quickest route for a plain host close to the vendor defaults. For servers with local changes, third-party repositories and software that nobody fully remembers, the rebuild is usually less work and much less risk. We wrote up what goes wrong with Leapp and ELevate on CentOS 7, and most of it applies to RHEL 7 too.

A plan for the estate

Where vrtmv fits

vrtmv does the reading, the planning and the checking for a rebuild. It reads the old server over SSH without an agent, or from a copy of its disk, and changes nothing on it. The Index translates its packages, services and settings to the target release, and the plan lists every change, with the decisions it will not guess at on a punch list for you. It generates an Ansible role (or Terraform) to build the new server. After the rebuild, vrtmv verify checks the new server against the plan, from its package database and the carried configuration paths, writes a parity report, and exits non-zero on any gap, so the cutover can wait on it.

It never uploads your data, and copying it is a step you start: vrtmv data plan writes the copy runbook, with a sha256 manifest of the source's files, and vrtmv run --copy copies the paths you name. It does not test your application; that stays in your runbook. Supported distributions and major versions are on the supported page, and your exact source and target are confirmed in scoping.

Get a free parity assessment. Run vrtmv with a free account on the one Linux server you would least like to move, and send us the parity report. Within 2 business days we go through it with you on a 30-minute call: what maps cleanly, the caveats and gaps, and what moving that class of server across your estate would take.

Get a free assessment Create a free account