Upgrading Ubuntu 24.04 to 26.04 LTS: what changes for your server
A companion to upgrading an Ubuntu server safely, which covers the general method.
Ubuntu 26.04 LTS came out in April 2026, and in late September 2026 Ubuntu began offering the upgrade to servers running 24.04 LTS, after the first point release, 26.04.1. If you run 24.04, you will probably see the upgrade offered soon, if you have not already.
This guide is about the specific changes between those two releases that matter on a VPS: new versions of PHP, Python, MySQL and OpenSSH, a new sudo, and a few removed tools that can break third-party software. It gives a checklist for before and after the upgrade. The good news first: there is no rush. Ubuntu 24.04 keeps its standard security updates into 2029, so you can upgrade when it suits you, or simply build your next server on 26.04.
2 GB and 4 GB VPS plans in stock, for a fresh 26.04 server alongside your old one
- 2 GB KVM VPS Special2 CPU · 2 GB RAM · 35 GB disk · 5 TB bandwidth · New York, Los Angeles, Chicago$35.99/yrabout $3.00/moView at RackNerd
- 4 GB KVM VPS Special3 CPU · 4 GB RAM · 60 GB disk · 7 TB bandwidth · New York, Los Angeles, Chicago$59.99/yrabout $5.00/moView at RackNerd
- Ryzen-2GB (Linux)2 CPU · 2 GB RAM · 20 GB disk · 2 TB bandwidth · New York, Chicago, Seattle$222.37/yrabout $18.53/moView at RackNerd
- KVM-2GB3 CPU · 2 GB RAM · 75 GB disk · 2 TB bandwidth · Los Angeles, Dallas, Chicago$247.08/yrabout $20.59/moView at RackNerd
In stock when this page loaded. See all 6 matching plans
What is in this guide
- A few words you will see
- Upgrade now, later, or rebuild?
- What changes, at a glance
- PHP 8.3 to 8.5
- Python 3.12 to 3.14
- MySQL 8.0 to 8.4
- A new sudo and new core tools
- Third-party repositories and apt-key
- OpenSSH changes
- Other changes worth knowing
- Checklist before you upgrade
- Running the upgrade
- Checklist after you upgrade
- Troubleshooting
- Limits
- When to step up
A few words you will see
| Term | What it means |
|---|---|
| LTS | Long-term support: a release that gets security updates for years. |
| Point release | An update to an LTS release, such as 26.04.1, that bundles fixes. |
| PHP-FPM pool | A group of PHP workers with its own settings, stored in a folder named after the PHP version. |
| Virtual environment | A private folder of Python packages for one app, tied to one Python version. |
| sudo-rs | A new version of the sudo command, written in the Rust language. |
| apt-key | An old tool for adding signing keys for extra package sources. Removed in 26.04. |
| cgroup | The Linux feature that limits resources for services and containers. Version 1 support is removed. |
Upgrade now, later, or rebuild?
| Option | Good for |
|---|---|
| Stay on 24.04 for now | Busy sites, shops before a sale season, and anyone without time to test. 24.04 is supported into 2029 |
| Upgrade in place | Simple servers, test boxes, and servers where you have a tested backup and a quiet window |
| Build a fresh 26.04 server and move across | Important sites, servers with many extra package sources, or anything old and cluttered |
For important sites, the fresh build is safest, because the old server keeps running until the new one is proven. RackNerd's control panel lets you reinstall or choose an operating system when you set up a server; check whether Ubuntu 26.04 is offered for your plan. Moving to a new VPS walks through the move. Check your exact support dates on Ubuntu's official release pages.
What changes, at a glance
Versions as published in Ubuntu's 26.04 release notes. The 24.04 versions are those it shipped with.
| Component | 24.04 | 26.04 | Why it matters |
|---|---|---|---|
| Kernel | 6.8 | 7.0 | Mostly invisible. Reboot after upgrading |
| PHP | 8.3 | 8.5 | Pool files, extensions and old code need checking |
| Python | 3.12 | 3.14 | Virtual environments must be rebuilt |
| MySQL | 8.0 | 8.4 LTS | Some old login methods are locked out |
| PostgreSQL | 16 | 18 | Major versions need a data upgrade step |
| OpenSSH | 9.6 | 10.2 | DSA keys removed |
| systemd | 255 | 259 | cgroup v1 support removed |
| sudo | Classic sudo | sudo-rs | Unusual sudoers setups may behave differently |
| Core tools such as ls | GNU coreutils | Rust coreutils, with GNU still available | Scripts relying on unusual options may need checking |
| APT | 2.7 | 3.1 | apt-key removed |
| Time sync | systemd-timesyncd | Chrony on new installs | Upgraded servers can keep the old one |
The release notes do not list everything, and MariaDB, nginx and Apache versions also move. After upgrading, apt policy PACKAGE shows the version you now have.
PHP 8.3 to 8.5
This is the change most likely to affect a website. The upgrade installs PHP 8.5, and the PHP 8.3 packages are usually offered for removal as obsolete.
- Check your app supports PHP 8.5 before upgrading. Update WordPress, its plugins and themes, or your app, to versions that list 8.5 support.
- Pool files live in a versioned folder. Custom pools in
/etc/php/8.3/fpm/pool.d/need copying to/etc/php/8.5/fpm/pool.d/. - Extensions are versioned too. Each
php8.3-package needs itsphp8.5-version, for examplephp8.5-mysql. Installing the unversioned names, such asphp-mysql, picks the current version. - Socket paths. If you followed this site's WordPress or cPanel guides, your pool uses a socket named after the site, such as
/run/php/mysite.sock, so the web server config does not need to change. If your site uses the default versioned socket, such as/run/php/php8.3-fpm.sock, update it. - Custom php.ini settings in
/etc/php/8.3/need copying across by hand.
Python 3.12 to 3.14
Python apps installed in virtual environments almost always break after this upgrade, because each environment is tied to the Python version that made it. The fix is quick: recreate the environment and reinstall the app's packages. For an app in /home/myapp/app, for example:
cd /home/myapp/app
python3 -m venv --clear venv
venv/bin/pip install -r requirements.txt
Run this as the app's user, then restart its service. Check that each package your app uses supports Python 3.14 first. Most well-maintained ones do. Django users get Django 5.2 from Ubuntu's own packages, but apps usually install their own Django in the virtual environment.
MySQL 8.0 to 8.4
This section is for MySQL, the mysql-server package. MariaDB, which this site's guides use, is a separate product and is not affected by this change.
MySQL 8.4 deprecates the old mysql_native_password login method, and accounts that still use it are locked out by default after the upgrade. Older apps often use it. Before upgrading, check in the MySQL shell, opened with sudo mysql:
SELECT user, host, plugin FROM mysql.user WHERE plugin = 'mysql_native_password';
For each account it lists, switch to the newer method, using the account's existing password, which you will find in the app's config file:
ALTER USER 'appuser'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'THE_SAME_PASSWORD';
Very old database libraries may not support the newer method. Test the app afterwards. Back up every database before the upgrade regardless, with mysqldump.
PostgreSQL users moving from 16 to 18 should follow Ubuntu's and PostgreSQL's own instructions for moving data between major versions. The old cluster usually keeps running until you upgrade it.
A new sudo and new core tools
- sudo-rs replaces the classic
sudo. It is built to behave the same for normal use, such as a user in thesudogroup running admin commands. If you have unusual rules in/etc/sudoersor/etc/sudoers.d/, test them after the upgrade. The original version is still available assudo.ws. - Rust coreutils replace many everyday commands such as
lsandcat. The GNU versions remain available with agnuprefix, such asgnuls, andcp,mvandrmstill come from GNU. Scripts using common options are unaffected. Test scripts that rely on unusual options.
Before upgrading, make sure you can reach the server through the console in the VPS control panel, in case a sudo problem locks you out of admin commands.
Third-party repositories and apt-key
The old apt-key command is removed in 26.04. Extra package sources that were added years ago with apt-key, rather than with a signed-by keyring, may stop working. During the upgrade, Ubuntu disables third-party sources anyway.
- Before upgrading, list your extra sources:
ls /etc/apt/sources.list.d/. - For each one, check the project's current install instructions supports 26.04. Docker, Node.js, database and control panel repositories each publish their own.
- After upgrading, add each source back using the project's current instructions, which use a signed-by keyring file.
- If an install script you rely on still calls
apt-key, it will fail on 26.04. Look for an updated version.
OpenSSH changes
- DSA keys are gone. The server no longer accepts DSA keys and does not create DSA host keys. If you still log in with an old
id_dsakey, create an Ed25519 key and add it before upgrading. See how to connect with SSH and set up SSH keys. - ~/.pam_environment is no longer read by the SSH server. If you set environment variables that way, move them to your shell's startup file.
- Your settings in
/etc/ssh/sshd_config.d/carry over. Check them after the upgrade withsudo sshd -T | grep -E "passwordauthentication|permitrootlogin".
4 GB VPS plans in stock, if you are rebuilding on a bigger server
- 4 GB KVM VPS Special3 CPU · 4 GB RAM · 60 GB disk · 7 TB bandwidth · New York, Los Angeles, Chicago$59.99/yrabout $5.00/moView at RackNerd
- Ryzen-4GB (Linux)2 CPU · 4 GB RAM · 30 GB disk · 3 TB bandwidth · New York, Chicago, Seattle$265.57/yrabout $22.13/moView at RackNerd
- KVM-4GB4 CPU · 4 GB RAM · 130 GB disk · 3 TB bandwidth · Los Angeles, Dallas, Chicago$295.08/yrabout $24.59/moView at RackNerd
In stock when this page loaded. See every plan
Other changes worth knowing
- cgroup v1 is gone. 24.04 already used cgroup v2 by default, so this only affects servers where it was switched back, usually for very old container software. Check with
stat -fc %T /sys/fs/cgroup:cgroup2fsmeans you are fine, whiletmpfsmeans the server still uses the old setup and you should find out why before upgrading. - Chrony keeps time on new installs. Upgraded servers can keep using systemd-timesyncd. Ubuntu's release notes describe how to switch if you want to.
- Dracut builds the boot image on new installs. The older tool is still supported.
- Dovecot, Squid, Samba and OpenLDAP have configuration changes. If you run them, read the release notes' sections on each before upgrading.
- System V init scripts still work in 26.04 but not after it. If a service of yours uses an old script in
/etc/init.d/, plan to replace it with a systemd service.
Checklist before you upgrade
| Check | How |
|---|---|
| Tested backup, off the server | See using a storage VPS for backups |
| Control panel console works | Log in to it once |
| App supports PHP 8.5 | App and plugin release notes |
| List of custom PHP pools and settings | ls /etc/php/8.3/fpm/pool.d/ |
| List of Python apps and their requirements files | Your notes, or systemctl list-units --type=service |
| MySQL accounts using the old login method | The query in the MySQL section |
| Extra package sources | ls /etc/apt/sources.list.d/ |
| No DSA keys in use | Check ~/.ssh/authorized_keys for lines starting ssh-dss |
| Running on cgroup v2 | stat -fc %T /sys/fs/cgroup |
| Free disk space | df -h /, with several GB free |
Running the upgrade
The full method, including running inside tmux and the questions you will be asked, is in upgrading an Ubuntu server safely. In short:
sudo apt update && sudo apt full-upgrade
sudo reboot
grep Prompt /etc/update-manager/release-upgrades
tmux new -s upgrade
sudo do-release-upgrade
The grep line should show Prompt=lts, which offers the next LTS release. If no release is offered, Ubuntu may still be rolling the upgrade out in stages. Waiting a few days is better than forcing it.
Checklist after you upgrade
- Confirm the release with
lsb_release -a, and look for failed services withsystemctl --failed. - Copy custom PHP pools and settings to the 8.5 folders, install the matching extensions, then run
sudo php-fpm8.5 -tandsudo systemctl restart php8.5-fpm. - Recreate Python virtual environments, then restart each app.
- Test each website and app, including logins, forms and uploads.
- Check databases start, and that apps can connect.
- Check
sudoworks for your user, and that SSH settings are as you set them. - Add back third-party package sources that support 26.04.
- Check scheduled jobs ran, the next day.
- Check automatic security updates are still on with
systemctl status unattended-upgrades.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Website shows a 503 error or raw PHP | PHP 8.3 pool removed and not recreated for 8.5 | Copy the pool file to /etc/php/8.5/fpm/pool.d/ and restart PHP 8.5 |
| PHP errors about missing functions or classes | A php8.5- extension is not installed | Install the matching extension and restart PHP |
| Python app will not start | Virtual environment built for Python 3.12 | Recreate it as shown in the Python section |
| App cannot log in to MySQL | Account still uses mysql_native_password | Switch it as shown in the MySQL section |
| apt errors about a missing key or source | A third-party source added with apt-key | Remove it and add it back with the project's current instructions |
| sudo refuses a rule that used to work | An unusual sudoers setting | Use the console to check the rule, or try sudo.ws |
| Old SSH key no longer accepted | DSA keys removed | Log in through the console and add an Ed25519 key |
| No upgrade offered | Prompt not set to lts, or the staged rollout has not reached you | Check the Prompt line and wait a few days |
Limits
- This guide summarises Ubuntu's published release notes and common server setups. Read the official notes for anything you run that is not covered here.
- No downgrade. Your backup is your only way back.
- Every server is different. Old or heavily customised servers are more likely to need extra work, and rebuilding is often quicker.
- It is your job on a VPS. A RackNerd VPS is unmanaged, so support can help with the server itself, not with your apps after an upgrade.
- Fair use applies. Unmetered does not mean unlimited, and RackNerd's acceptable use policy covers what you run.
When to step up
A release upgrade is a natural time to rebuild on a fresh, bigger server if the old one was short of memory. You get a clean 26.04 install, room to grow, and the old server as a safety net until the new one is proven. How to read VPS specs helps you choose the size.
6 GB and 8 GB VPS plans in stock, for a fresh start with room to grow
- 6 GB KVM VPS Special6 CPU · 6 GB RAM · 100 GB disk · 12 TB bandwidth · New York, Los Angeles, Chicago$89.99/yrabout $7.50/moView at RackNerd
- 8 GB KVM VPS Special7 CPU · 8 GB RAM · 150 GB disk · 20 TB bandwidth · New York, Los Angeles, Chicago$119.99/yrabout $10.00/moView at RackNerd
- KVM-6GB5 CPU · 6 GB RAM · 170 GB disk · 4 TB bandwidth · Los Angeles, Dallas, Chicago$268.59/yrabout $22.38/moView at RackNerd
- Ryzen-6GB (Linux)3 CPU · 6 GB RAM · 45 GB disk · 4 TB bandwidth · New York, Chicago, Seattle$297.97/yrabout $24.83/moView at RackNerd
In stock when this page loaded. See all 6 matching plans
To compare what is available now, start with the cheapest RackNerd VPS guide and check the sales page.