Upgrading FreeBSD With Pkgbase

Firstly, this is being written in late December, 2025. I suspect that the issue will go away soon. I'm putting this up in case it takes awhile to completely fix things.

As most FreeBSD users know by now, freebsd-update is being replaced by pkgbase, which will upgrade both packages and the base system. There's lots of places to get more information, but I'm sending anyone looking for more information to Vermaden's article about it. To use it to upgrade 14.x to 15 is not officially supported, but is surprisingly simple if you use pkgbasify, a lua script that will convert your 14.x system to be able to use pkgbase.

Judging from FreeBSD forums, a few things are giving people trouble. This is an effort to get the instructions in one place, though as mentioned above, I think it will be fixed soon.

This article combines information from the handbook and a lot of information I got from FreeBSD forums. I got a lot of it from user petan's post on FreeBSD forums. Hopefully, the handbook will be updated soon.

The handbook has a section on using it to update to 15.0 here, but there are a couple of things that have to, at time of writing this article, be updated. So, going through the steps, if your system is on ZFS, you make a boot environment, mount it, and install into that. If it works, you can make it the default. I am giving the steps from user petan's post, with some additions.

There is an issue with keys, mentioned in 15.0's release notes. There is more explanation there, but the main thing is that you have to get the most current pkg keys.

If you use the handbook's example where for fingerprints it just gives /usr/share/pkg, it will have problems because, at time of writing, the keys are wrong. To get the right keys, I use the source code which is pretty easy to get. Do this, either with source code or whatever method you want to use before trying to upgrade. I use gitup to get source code. So, if you don't have gitup, you can install it, or use whatever method you prefer to checkout the source code. In this example, though, I'm using gitup. You can probably just download the keys here but I like to have the source code anyway.

Edit /usr/local/etc/gitup.conf. Look for the stanza beginning with "release". At time of writing, it will say 13.2. Change the "branch" line so that it reads 15.0. Now you can just get the source code with
gitup release

Now as it says in the release notes run
cp -R /usr/src/share/keys/pkgbase-15 /usr/share/keys/pkgbase-15

All commands will have to be run as root or with root privilege, using doas or sudo. We're going to first edit /usr/local/etc/pkg/repos/FreeBSD-base.conf to get it ready to pull 15.0 release. We'll also change the fingerprints file to make sure we have a keys file that's up to date. We're going to pull in pkg bootstrap for FreeBSD-15, make a boot environment for it, mount the environment and use it to do our upgrade.

First let's get pkg-bootstrap for 15.0.
pkg add -f https://pkg.freebsd.org/FreeBSD:15:amd64/base_release_0/FreeBSD-pkg-bootstrap-15.0.pkg
You will get a message that there's a conflict and also a version mismatch. It will ask if you're sure you want to instill it. Choose y for yes.

Now edit /usr/local/etc/pkg/repos/FreeBSD.conf
FreeBSD-base: {
url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_0",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkgbase-15",
enabled: yes
}

Now if usinsg zfs
bectl create 15.0-RELEASE
mkdir /mnt/upgrade
bectl mount 15.0-RELEASE /mnt/upgrade

Now we update and upgrade.
env ABI=FreeBSD:15:amd64 pkg-static -c /mnt/upgrade update -r FreeBSD-base
env ABI=FreeBSD:15:amd64 pkg-static -c /mnt/upgrade upgrade -r FreeBSD-base

You may again be told there's a package mismatch and asked if you want to continue. Each time, choose yes.

Much of the rest is straight from the handbook. Confirm that the update was successful.

chroot /mnt/upgrade
freebsd-version -ku
exit

Hopefully it will say FreeBSD-15.0-RELEASE. Temporarily activate the boot environnment for 15 and reboot.
bectl activate -t 15.0-RELEASE
shutdown -r now

If all seems to be working on the reboot, you can now make the 15.0 boot environment permanent.
bectl activate 15.0-RELEASE

Using Pkgbase On UFS Systems

There's not too much difference in doing this on UFS, save that you don't have boot environments. Do the same copying of pkgbase-15 keys to /usr/share/keys/pkgbase-15, and edit the /usr/local/etc/pkg/repos/FreeBSD-base.conf as mentioned above so that it points to 15.0 and the pkgbase-15 keys file. Run the same pkg add -f for FreeBSD-15-pkg-bootstrap-15.0 pkg. When this is done you'll update the system with
env ABI=FreeBSD:15:amd64 pkg-static upgrade -r FreeBSD-base

You can then run freesbsd-version -ku to make sure it upgraded to 15.0 Now, when you reboot, it will automatically use the 15.0 system.

Thanks to the many people who posted on the forums, and especially to SirDice, a moderator there, who pointed me to the release notes that gave me the solution to the keys, user petan, who gave me the proper steps and user Erichans who helped me figure out what I was doing wrong.

Any mistakes are, of course, my own.