FreeBSD

Upgrade FreeBSD 14 to FreeBSD 15 with freebsd-update

FreeBSD 15.0 brings significant improvements including quantum-resistant cryptography, OpenZFS 2.4, and the new pkgbase system. If you’re running FreeBSD 14.x, the built-in freebsd-update tool handles the entire major version upgrade with minimal downtime. This guide walks through the complete process, from backup to final verification.

Original content from computingforgeeks.com - post 83851

Upgrading FreeBSD 14 to FreeBSD 15 using freebsd-update is the traditional binary upgrade method, well suited for production servers where you want a straightforward path. The process involves fetching upgrade patches, installing the new kernel, rebooting, then upgrading userland and packages. The whole procedure takes roughly 30 to 60 minutes depending on your internet speed and disk I/O.

Last verified: March 2026 | Tested upgrade from FreeBSD 14.4-RELEASE to 15.0-RELEASE-p4

What’s New in FreeBSD 15

FreeBSD 15.0 is a major release with several notable changes. Here are the highlights worth knowing before you upgrade:

  • pkgbase: The base system can now be managed as packages, though this guide uses the traditional freebsd-update method.
  • OpenSSL 3.5 with quantum-resistant cryptography support (ML-KEM and ML-DSA algorithms).
  • OpenZFS 2.4 with performance improvements and new features.
  • OpenSSH 10 with updated defaults. The upgrade process automatically handles config merges like UseBlacklist being renamed to UseBlocklist.
  • ABI change from FreeBSD:14:amd64 to FreeBSD:15:amd64, which means all installed packages need rebuilding.

For the full list of changes, see the official FreeBSD 15.0 release announcement.

Prerequisites

Before starting the upgrade, confirm the following:

  • A running FreeBSD 14.x system (14.1 or later recommended, tested on 14.4-RELEASE).
  • Root access or a user with sudo privileges.
  • At least 2 GB of free disk space for the upgrade files.
  • Working network connectivity to reach update2.freebsd.org.
  • A full backup of your system. This is a major version upgrade and things can go wrong.

If you need a fresh install instead, check out how to install FreeBSD 15 on Proxmox / KVM.

Step 1: Back Up Your System

Never run a major OS upgrade without a backup. If your system uses ZFS (the default since FreeBSD 14), create a recursive snapshot of all pools:

zfs snapshot -r zroot@pre-upgrade-15

Verify the snapshot was created:

zfs list -t snapshot

If something goes wrong during the upgrade, you can roll back with zfs rollback -r zroot@pre-upgrade-15.

For UFS systems without ZFS, create a tar backup of critical directories:

tar czf /backup/pre-upgrade-backup.tar.gz /etc /usr/local/etc /var/db/pkg /root

Also make sure you have console access (IPMI, KVM, or Proxmox VNC) in case SSH breaks during the upgrade.

Step 2: Update Current System

Before jumping to FreeBSD 15, make sure your current FreeBSD 14.x installation is fully patched. This reduces the number of changes the upgrade tool needs to handle and avoids known issues that were already fixed.

Fetch and install any pending security patches:

freebsd-update fetch install

Then upgrade all installed packages to their latest versions on the current release:

pkg upgrade -y

Reboot if any kernel patches were applied:

reboot

After the reboot, confirm you’re on the latest 14.x patch level:

freebsd-version

You should see your current FreeBSD 14.x version confirmed:

14.4-RELEASE

Step 3: Fetch the Upgrade

Now start the actual upgrade. The freebsd-update tool will download all patches needed to move from 14.x to 15.0. Use PAGER=cat to prevent the tool from opening a pager for every file diff, which makes the process much smoother over SSH.

PAGER=cat freebsd-update -r 15.0-RELEASE upgrade

The tool starts by fetching metadata and inspecting your system:

Fetching metadata signature for 14.4-RELEASE from update2.freebsd.org... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic kernel/generic-dbg world/base world/base-dbg world/lib32 world/lib32-dbg

Does this look reasonable (y/n)? y

Answer y to confirm the detected components. The tool then downloads all required patches and files. This is the longest part of the process, typically taking 20 to 30 minutes:

Fetching 7885 patches
Fetching 6618 files
Attempting to automatically merge changes in files... done.

During the merge phase, freebsd-update shows any configuration file changes it needs to apply. One common merge you’ll see is the OpenSSH config update:

--- current version
+++ new version
-UseBlacklist yes
+UseBlocklist yes

Does this look reasonable (y/n)? y

Review the proposed changes and answer y if they look correct. When the fetch completes, you’ll see the final instruction:

To install the downloaded upgrades, run 'freebsd-update [options] install'.

Step 4: Install Kernel and Reboot

The upgrade is applied in stages. The first install run applies only kernel updates. This keeps the process safe because you get a chance to verify the new kernel boots correctly before touching userland.

freebsd-update install

The output confirms the kernel was installed and tells you to reboot:

Installing updates...
Kernel updates have been installed.  Please reboot and run
'freebsd-update [options] install' again to finish installing updates.

Reboot the system to load the new FreeBSD 15 kernel:

reboot

After the system comes back up, verify that you’re running the FreeBSD 15 kernel:

uname -r

The kernel version should now show FreeBSD 15:

15.0-RELEASE-p4

At this point, the kernel is on FreeBSD 15 but the userland is still on 14.x. You can confirm this split state by checking freebsd-version:

freebsd-version

This still reports the old version because userland hasn’t been upgraded yet:

14.4-RELEASE

That’s expected. The next step fixes it.

Step 5: Install Userland

With the new kernel running, it’s safe to upgrade the rest of the system. Run freebsd-update install again to apply userland updates:

freebsd-update install

This stage updates all base system binaries, libraries, and configuration files. It also restarts services that need it:

Restarting sshd after upgrade...
Completing this upgrade requires removing old shared object files.
Please upgrade or rebuild all installed 3rd party software and then run
'freebsd-update [options] install' again.

Note that sshd gets restarted automatically. If you’re connected over SSH, your session should survive this, but have console access ready just in case. Don’t run the final freebsd-update install yet because you need to upgrade packages first.

Step 6: Upgrade Packages

The ABI (Application Binary Interface) changed from FreeBSD:14:amd64 to FreeBSD:15:amd64, which means every installed package needs to be rebuilt against the new system libraries. The pkg tool handles this automatically.

Run the package upgrade:

pkg upgrade -y

The first thing you’ll notice is that pkg itself gets reinstalled for the new ABI:

pkg-2.5.1 [FreeBSD-ports] (ABI changed: 'FreeBSD:14:amd64' -> 'FreeBSD:15:amd64')

After pkg reinstalls itself, it downloads and installs new versions of all your packages compiled for FreeBSD 15. This can take a while depending on how many packages you have installed. For a general overview of FreeBSD package management, see this FreeBSD and OpenBSD package and service management guide.

Step 7: Final Cleanup

With all packages rebuilt for FreeBSD 15, run freebsd-update install one last time to remove old shared libraries that are no longer needed:

freebsd-update install

The cleanup completes quickly:

Installing updates... done.

Now verify the upgrade was successful. Check the full kernel version string:

uname -a

You should see FreeBSD 15.0 across the board:

FreeBSD freebsd 15.0-RELEASE-p4 FreeBSD 15.0-RELEASE-p4 GENERIC amd64

Confirm the userland version now matches:

freebsd-version

Both kernel and userland should report the same version:

15.0-RELEASE-p4

Check the package manager version to confirm it’s running the FreeBSD 15 build:

pkg -v

The version should reflect the updated package:

2.5.1

Your FreeBSD system is now fully upgraded to 15.0.

Troubleshooting

Here are common issues you might run into during the upgrade and how to fix them.

Not enough disk space

The upgrade downloads thousands of patches and files. If you see errors about insufficient space, freebsd-update stores its working files in /var/db/freebsd-update. Make sure you have at least 2 GB free on the root partition. Clean up old upgrade files if needed:

rm -rf /var/db/freebsd-update/*

Then retry the upgrade from the fetch step.

Merge conflicts

If freebsd-update cannot automatically merge a configuration file, it opens the diff in your pager and asks you to resolve it manually. Using PAGER=cat as shown earlier prevents this from blocking the process. If you do hit a conflict, compare your custom changes against the new defaults and keep your modifications where they still apply.

TTY required errors

Running freebsd-update in a non-interactive shell (cron, scripts) can fail with TTY-related errors. Always run the upgrade interactively. If you must automate it, use env PAGER=cat and pipe yes to handle the prompts, but review the output carefully afterward.

Packages fail to install after ABI change

If pkg upgrade fails because the repository hasn’t been updated for FreeBSD 15 yet, force a repository catalog refresh:

pkg update -f

Then retry pkg upgrade -y. In rare cases where packages are badly broken, you may need to reinstall them:

pkg install -f packagename

System won’t boot after kernel install

If the new kernel fails to boot, use the FreeBSD boot loader menu to select the previous kernel. At the boot prompt, choose “Escape to loader prompt” and type:

unload
set currdev=zfs:zroot/ROOT/default:
load /boot/kernel.old/kernel
boot

This boots the old kernel so you can investigate. If you took a ZFS snapshot before the upgrade, you can roll back entirely with zfs rollback -r zroot@pre-upgrade-15.

Conclusion

Upgrading from FreeBSD 14.x to 15.0 using freebsd-update is a well-tested, reliable process that FreeBSD has refined over many releases. The key is following the three-stage install sequence: kernel first, reboot, userland second, packages third, then final cleanup. Always take a ZFS snapshot before starting so you have an easy rollback path if anything goes wrong.

Related Articles

FreeBSD How To Install PHP 7.2 on FreeBSD 12 Databases Install MariaDB 11.4 on FreeBSD 15 FreeBSD Configure Hostname and Static IP Address on FreeBSD 15 / 14 Monitoring Linux & FreeBSD Resource Monitoring with bpytop

Leave a Comment

Press ESC to close