Upgrading a base package install from 15.0-RELEASE to 16-CURRENT
Sunday, 18 Jan 2026
I know, 15.0-RELEASE has been out now for over a month, and I’m easily bored. Obviously, it’s time to switch back to running 16-CURRENT with whatever random patches I am working on atm.
I’m hoping that this will encourage more people to get into using base system packages, as it really makes upgrades like this super duper easy.
This is the general procedure I have in mind:
- create an old boot environment, in case we want to roll back in future
- create a new boot environment, to install into
- mount it, and do the install
- do the upgrade of the base system packages inside this BE
- do the upgrade of ports tree packages
- outside the BE, update the (UEFI) boot loader for 16
- reboot & profit
# bectl create fifteen
# bectl create current
# bectl mount current /mnt
# cd /mnt
# mount -t devfs devfs dev
# mount -t tmpfs tmpfs tmp
# chroot .We’re now in the chroot! This mostly worked as expected, apart from the path for signature verification being different between versions.
The fingerprints setting used in /etc/pkg/FreeBSD.conf are
different between what’s required for a release, and current.
We need to install prior, what would be installed during a 16-CURRENT update, beforehand, or the signatures don’t work. Let’s fetch the config from git, and make sure we have no other external configurations lurking.
# fetch -o /etc/pkg/FreeBSD.conf https://cgit.freebsd.org/src/plain/usr.sbin/pkg/FreeBSD.conf.latest
# rm -f /usr/local/etc/pkg/repos/*
# echo 'FreeBSD-base: { enabled: yes }' | tee /usr/local/etc/pkg/repos/FreeBSD.conf
# pkg-static -o IGNORE_OSVERSION=yes -o ABI=FreeBSD:16:amd64 update
# pkg-static -o IGNORE_OSVERSION=yes -o ABI=FreeBSD:16:amd64 upgrade -r FreeBSD-base
# pkg-static -o IGNORE_OSVERSION=yes -o ABI=FreeBSD:16:amd64 upgrade -r FreeBSD-ports
# exitNow let’s do the boot loader. The 16-CURRENT boot loader should be capable of loading 15.0-RELEASE without issue, but I use rEFInd, a custom EFI boot loader that allows me to choose between different loaders on startup. You’ll likely need to use efibootmgr(8) to handle this.
# cp -av /mnt/boot/loader.efi /boot/efi/EFI/FreeBSD/current.efi
# bectl activate currentLet’s reboot… sadly, it just worked, so this post is delightfully short.
I, for one, welcome our new base system package overlords.