TL;DR:
- Canonical enabled upgrades from Ubuntu 24.04 LTS to 26.04.1 LTS on September 29, 2026. To upgrade Ubuntu 24.04 to 26.04, run
sudo do-release-upgradewith no-dflag. - Install every 24.04 update and reboot first. The upgrader refuses to start while updates are pending.
- Over SSH, the upgrader runs inside GNU screen and starts a spare SSH daemon on port 1022. Allow 1022/tcp in UFW first.
- Docker and PPA repositories are disabled during the upgrade. Point them at the
resolutesuite after the reboot. - Linux 6.8 moves to 7.0, PHP 8.3 to 8.5 and PostgreSQL 16 to 18. Existing PostgreSQL clusters stay on 16 until you run
pg_upgradecluster.
Applies to: Ubuntu 24.04 LTS to Ubuntu 26.04.1 LTS · ubuntu-release-upgrader 26.04.25 · checked October 2026
Ubuntu 26.04 LTS (Resolute Raccoon) is the Long Term Support release of Ubuntu that Canonical published on April 23, 2026, with security updates until April 2031. To upgrade Ubuntu 24.04 to 26.04 on a VPS, back up the server, install every 24.04 update, then run do-release-upgrade over SSH. This tutorial covers the checks before the upgrade, the port 1022 fallback, third-party repositories, and the PostgreSQL, PHP, Nginx and Docker checks after the reboot.
Is the Ubuntu 26.04 upgrade available yet?
Yes. Ubuntu offers an LTS-to-LTS upgrade only after the first point release, and Canonical held this one longer for fixes to rust-coreutils.
| Date | Event |
|---|---|
| April 23, 2026 | Ubuntu 26.04 LTS released |
| August 27, 2026 | Ubuntu 26.04.1 LTS point release |
| September 29, 2026 | Upgrades from 24.04 LTS to 26.04.1 LTS enabled |
The upgrader reads https://changelogs.ubuntu.com/meta-release-lts, which now lists 26.04.1 LTS as supported, so do-release-upgrade -d is no longer needed.
What changes on a server in Ubuntu 26.04
| Component | Ubuntu 24.04 LTS | Ubuntu 26.04 LTS |
|---|---|---|
| Linux kernel | 6.8 | 7.0 |
| OpenSSH | 9.6p1 | 10.2p1 (DSA removed) |
| sudo | sudo | sudo-rs (original sudo kept as sudo.ws) |
| Core utilities | GNU coreutils | rust-coreutils (cp, mv and rm still GNU) |
| systemd | 255 | 259 (cgroup v1 removed) |
| Python | 3.12 | 3.14 |
| PHP | 8.3 | 8.5 |
| PostgreSQL | 16 | 18 |
| MySQL | 8.0 | 8.4 |
| Nginx | 1.24 | 1.28 |
| Redis / Valkey | Redis 7.0 (universe) | Redis 8.0 (universe), Valkey 9.0 (main) |
The Ubuntu 26.04 summary for LTS users lists every change.
Upgrade Ubuntu 24.04 to 26.04 in place or deploy a fresh server?
| Upgrade in place | Fresh 26.04 server and migrate | |
|---|---|---|
| IP address | Stays the same | New IP, update DNS |
| Downtime | Service restarts and one reboot | Old server runs until you switch DNS |
| Configuration | Carried over | Rebuilt clean |
| Way back | Restore the backup | Keep the old server |
| Fits | Packages from the Ubuntu archive | Many PPAs, custom builds, years of changes |
Arct Cloud offers Ubuntu 26.04 LTS as a Linux VPS image, so you can build the new server next to the old one. The server migration guide covers copying data and switching DNS. The rest of this tutorial covers the in-place upgrade.
Prerequisites
- A VPS running Ubuntu 24.04 LTS with SSH access.
- A non-root user with sudo privileges and an SSH key. See How to Generate an SSH Key.
- A recent backup you can restore, plus a copy of your application data stored off the server. See VPS backups.
- A maintenance window. Services restart during the upgrade and the server reboots once.
Commands run as the sudo user. Replace values written in capitals, such as YOUR_IP, with your own.
Step 1: Back up the server and record its state
An in-place upgrade has no undo, and Ubuntu has no downgrade path. Confirm your backup, then save a copy of /etc and lists of installed packages and running services to compare against later:
sudo tar -czf /root/etc-24.04.tar.gz /etc
dpkg --get-selections > ~/packages-24.04.txt
systemctl list-units --type=service --state=running --no-legend --plain | awk '{print $1}' > ~/services-24.04.txt
The archive stays in /root, readable only by root. When you accept the removal of obsolete packages, the upgrader purges them with their configuration files, so this archive keeps your PHP 8.3 settings.
Step 2: Install all Ubuntu 24.04 updates
The upgrader refuses to start while 24.04 updates are pending. Ubuntu's server guide also installs phased updates, which roll out to a share of machines at a time:
sudo apt update
sudo apt dist-upgrade -o APT::Get::Always-Include-Phased-Updates=true
Check whether an update needs a reboot:
ls /run/reboot-required
If the file exists, reboot with sudo reboot and reconnect. If ls prints No such file or directory, continue.
Step 3: Check holds, disk space, and repositories
Held packages can stop the upgrader from calculating the upgrade. List them:
apt-mark showhold
If package names appear, release each one with sudo apt-mark unhold YOUR_PACKAGE. Then check free space:
df -h / /boot
The upgrader checks the space it needs on /, /usr, /var and /boot and stops before it installs anything if space is short. List your apt sources:
ls /etc/apt/sources.list.d/
The output looks similar to this:
docker.sources ondrej-ubuntu-php-noble.sources ubuntu.sources
Every file except ubuntu.sources and Ubuntu Pro's ubuntu-esm-*.sources files is a third-party source to re-enable in Step 7. Confirm that the server is offered 26.04:
do-release-upgrade -c
The output looks similar to this:
Checking for a new Ubuntu release
New release '26.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Step 4: Allow port 1022 for the fallback SSH daemon
Over SSH, the upgrader starts a second SSH daemon on port 1022 as a way back in if the main one fails. It does not open that port in your firewall. Check UFW:
sudo ufw status
If the status is active, allow port 1022 from your own address:
sudo ufw allow from YOUR_IP to any port 1022 proto tcp
Replace YOUR_IP with the public IP address of the computer you connect from. If your provider filters traffic before it reaches the server, open 1022/tcp there as well.
Step 5: Run do-release-upgrade to 26.04 over SSH
The upgrader restarts itself inside a GNU screen session when screen is installed. Ubuntu Server includes it; minimal images may not:
sudo apt install screen
Start the upgrade:
sudo do-release-upgrade
Because the session runs over SSH, the upgrader asks first:
Continue running under SSH?
This session appears to be running under ssh. It is not recommended
to perform a upgrade over ssh currently because in case of failure it
is harder to recover.
If you continue, an additional ssh daemon will be started at port
'1022'.
Do you want to continue?
Continue [yN]
Type y. A screen titled Starting additional sshd confirms the spare daemon on port 1022 and may suggest an iptables command. Skip that command if you allowed the port in Step 4, and press Enter. The upgrader then shows the package counts and download size. Press d to see the list, then y to start. If your SSH connection drops, reconnect and reattach:
ssh [email protected]
sudo screen -d -r ubuntu-release-upgrade-screen-window
Replace deploy and 203.0.113.10 with your user and server IP. If port 22 does not answer, connect with ssh -p 1022. Logs are in /var/log/dist-upgrade/.
Step 6: Answer the upgrade prompts
The upgrade stops for these questions:
- Modified configuration files. For files you edited, press
Dto view the difference, thenNto keep your version. For/etc/ssh/sshd_configthe prompt is a menu; choose keep the local version currently installed. - Upgrade PostgreSQL cluster 16/main to 18? Shown when the
postgresqlmetapackage is installed. Answer No. Step 8 migrates the cluster after the reboot. - Foreign Packages Installed. This lists packages from the disabled third-party sources. Continue if you plan to re-enable those repositories. With Ubuntu Pro attached, ESM Apps packages also appear here (Launchpad bug 2168979).
- Remove obsolete packages? Press
dto review the list. The upgrader never removes PostgreSQL server packages. - Restart required. Answer
y. The spare SSH daemon stops at the reboot.
Step 7: Re-enable Docker and other third-party repositories
The upgrader keeps third-party sources but marks them Enabled: no and leaves their suite on noble. List them:
grep -l "Enabled: no" /etc/apt/sources.list.d/*.sources
Docker Engine supports Ubuntu 26.04. Download Docker's signing key to the path its current source template uses:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Rewrite the Docker source with the template from Docker's documentation, which reads the new codename:
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
The upgrader converts older docker.list files into docker.sources, so this file replaces either one. For a PPA, check that its Launchpad page lists resolute packages, then open its file with sudo nano, delete Enabled: no and change Suites: noble to Suites: resolute. Save with Ctrl+O and exit with Ctrl+X. With Ubuntu Pro attached, run sudo pro refresh instead of editing the ESM files. Then update:
sudo apt update
sudo apt full-upgrade
Step 8: Upgrade the PostgreSQL cluster to version 18
PostgreSQL 18 does not create a cluster when one already exists, so your data still runs on PostgreSQL 16:
pg_lsclusters
The output looks similar to this:
Ver Cluster Port Status Owner Data directory Log file
16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
Stop the applications that write to the database. Install PostgreSQL 18, which the upgrade adds only when the postgresql metapackage is installed:
sudo apt install postgresql-18
Migrate the cluster to PostgreSQL 18:
sudo pg_upgradecluster 16 main
pg_upgradecluster copies the data with pg_dumpall into a new 18 cluster on port 5432, so it needs free space for a second copy. During the copy the 16 cluster refuses other connections. Afterwards it moves to another port, stops, and no longer starts at boot.
The 26.04 known issues list a PostgreSQL slowdown on Linux 7.0 when huge pages are off. The listed fix is to reserve huge pages on the server and set huge_pages = on, following the PostgreSQL huge pages documentation. After your applications pass their tests, remove the old cluster:
sudo pg_dropcluster 16 main
sudo apt purge postgresql-16
Step 9: Switch PHP sites to PHP 8.5
Ubuntu 26.04 has no php8.3-fpm package and no transitional package to PHP 8.5. A server that installed php8.3-fpm by name, without the php-fpm metapackage, has no PHP-FPM after the upgrade. Check that PHP-FPM 8.5 is installed and running:
systemctl status php8.5-fpm --no-pager
If the unit is not found, list the PHP 8.3 packages you had on 24.04:
grep '^php8.3-' ~/packages-24.04.txt
Install each one under its 8.5 name, for example:
sudo apt install php8.5-fpm php8.5-mysql php8.5-curl
To compare your old PHP settings, extract them from the Step 1 archive:
sudo tar -xzf /root/etc-24.04.tar.gz -C /root etc/php/8.3
sudo diff /root/etc/php/8.3/fpm/php.ini /etc/php/8.5/fpm/php.ini
Copy the settings you changed into /etc/php/8.5/fpm/, then apply them with sudo systemctl restart php8.5-fpm. Nginx sites still point at the PHP 8.3 socket. Find them:
grep -rln "php8.3-fpm.sock" /etc/nginx/
Point those files at the PHP 8.5 socket:
grep -rl "php8.3-fpm.sock" /etc/nginx/ | xargs -r sudo sed -i 's/php8.3-fpm.sock/php8.5-fpm.sock/g'
Test the configuration and reload Nginx:
sudo nginx -t
sudo systemctl reload nginx
Step 10: Verify the upgrade and close port 1022
Check the release and the running kernel:
lsb_release -d
uname -r
The output looks similar to this:
Description: Ubuntu 26.04.1 LTS
7.0.0-38-generic
Compare running services with the list from Step 1:
systemctl list-units --type=service --state=running --no-legend --plain | awk '{print $1}' > ~/services-26.04.txt
diff ~/services-24.04.txt ~/services-26.04.txt
Lines starting with < are services that stopped running. Check each with systemctl status. If you use Docker, confirm your containers are up:
sudo docker ps
If you followed Nginx, PostgreSQL, and Redis on Ubuntu 24.04, also run sudo nginx -t and redis-cli ping. If you added the UFW rule in Step 4, close the fallback port:
sudo ufw delete allow from YOUR_IP to any port 1022 proto tcp
If you opened 1022/tcp in a provider firewall in Step 4, remove that rule as well.
Troubleshoot common upgrade errors
| Symptom | Cause | Fix |
|---|---|---|
Please install all available updates for your release before upgrading. | 24.04 updates are pending | Run the Step 2 commands, then try again |
You have not rebooted after updating a package which requires a reboot. Please reboot before upgrading. | A kernel or libc update is waiting for a reboot | sudo reboot, reconnect, then run sudo do-release-upgrade again |
There is no development version of an LTS available. | The server could not download the release list | Check outbound HTTPS to changelogs.ubuntu.com, including proxies and content filters |
Could not calculate the upgrade | Held or third-party packages block the resolver | Unhold packages, remove the conflicting package, read /var/log/dist-upgrade/apt.log |
dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' | The upgrade process was killed | sudo dpkg --configure -a, then sudo apt -f install |
sudo prints a sudoers error after the reboot | sudo-rs, the new default sudo, does not support a line in your sudoers files | Fix the reported line with sudo.ws visudo.ws -f YOUR_FILE, or switch back with sudo.ws update-alternatives --set sudo /usr/bin/sudo.ws |
Allocation of JIT memory failed, PCRE JIT will be disabled | Apache sets MemoryDenyWriteExecute=yes, which breaks mod-php JIT | Switch to php-fpm, or run sudo systemctl edit apache2, add MemoryDenyWriteExecute=no under [Service], then sudo systemctl restart apache2 |
Plugin 'mysql_native_password' is not loaded | MySQL 8.4 disables the old authentication plugin | Run sudo mysql, then ALTER USER 'YOUR_APP_USER'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YOUR_NEW_PASSWORD'; and set the new password in the application |
FAQ
Is Ubuntu 26.04 LTS stable?
Yes. Ubuntu 26.04 LTS has received updates since April 2026, and the 26.04.1 point release in August 2026 rolled up those fixes. Canonical enabled upgrades from 24.04 on September 29, 2026. Read the known issues in the release notes before you upgrade a production server.
Is Ubuntu 26.04 safe?
Yes. Ubuntu 26.04 LTS receives security updates from Canonical until April 2031, and it replaces sudo with sudo-rs, written in Rust. Take a backup and run the Step 3 checks before you upgrade a production server.
Is it worth upgrading from Ubuntu 24.04 to 26.04?
Upgrade when you need newer packages such as PHP 8.5, PostgreSQL 18 or Linux 7.0, or support past 2029. Ubuntu 24.04 receives security updates until May 31, 2029, so a server that runs well can wait for a planned maintenance window.
Why does do-release-upgrade say there is no new release?
On 24.04 it usually means the server could not download the release list from changelogs.ubuntu.com, so check outbound HTTPS, proxies and content filters. Keep Prompt=lts in /etc/update-manager/release-upgrades. Since September 29, 2026 the upgrade needs no development flag.
Can I upgrade directly from Ubuntu 22.04 to 26.04?
No. Ubuntu supports upgrades between consecutive LTS releases only. Upgrade a 22.04 server to 24.04 first, reboot and check your services, then upgrade to 26.04.
Can I roll back from Ubuntu 26.04 to 24.04?
No. Ubuntu has no downgrade path after a release upgrade. To return to 24.04, restore the backup you made before the upgrade, or deploy a new 24.04 server and copy your data onto it.
Will my files and settings be kept after the upgrade?
Yes. Home directories, application data and configuration files you edited stay in place unless you accept the package maintainer's version at a prompt. Packages removed as obsolete are purged with their configuration files, so keep a copy of /etc.
Next steps
- How to Install Docker and Docker Compose on Ubuntu 24.04 and 26.04
- How to Set Up Nginx, PostgreSQL, and Redis on Ubuntu 24.04
- Ubuntu Server: How to upgrade your release
- Ubuntu 26.04 LTS release notes
Arct Cloud Linux images, including Ubuntu 26.04 LTS, deploy in under 30 seconds with root SSH on every plan. Compare plans.
This work is licensed under CC BY-NC-SA 4.0.