Upgrading FreeBSD 12.2 to 13.0
Contents
Introduction
We assume root on ZFS.
Everything on this page needs to be done as root, unless specified, so su to root.
su -
Upgrade base system
We will do the upgrade offline, in a new BE, so first, create the BE and mount it.
bectl create 13.0-RELEASE bectl mount 13.0-RELEASE /mnt
Then run freebsd-update(8)
:
freebsd-update -b /mnt -d /mnt/var/db/freebsd-update -r 13.0-RELEASE upgrade freebsd-update -b /mnt -d /mnt/var/db/freebsd-update install freebsd-update -b /mnt -d /mnt/var/db/freebsd-update install freebsd-update -b /mnt -d /mnt/var/db/freebsd-update install
Yes, you really need to run it that many times.
Upgrade the bootloader
BIOS
First, determine your boot devices.
z800:aram$ zpool status zroot pool: zroot state: ONLINE scan: scrub repaired 0B in 00:01:46 with 0 errors on Mon Feb 5 17:48:15 2018 config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/zfs0 ONLINE 0 0 0 gpt/zfs1 ONLINE 0 0 0 errors: No known data errors
Look for the devices in the GEOM output.
z800:aram$ geom -t ... da0 PART da0p3 da0p3 DEV da0p3 LABEL gpt/zfs0 gpt/zfs0 DEV zfs::vdev ZFS::VDEV ... da2 PART da2p3 da2p3 DEV da2p3 LABEL gpt/zfs1 gpt/zfs1 DEV zfs::vdev ZFS::VDEV ...
In our case, we need to install the new bootloader on da0
and da2
.
gpart bootcode -b /mnt/boot/pmbr -p /mnt/boot/gptzfsboot -i 1 da0 gpart bootcode -b /mnt/boot/pmbr -p /mnt/boot/gptzfsboot -i 1 da2
EFI
TODO.
Upgrade the packages
It is unclear why we need devfs, but we need it:
mount -t devfs devfs /mnt/dev/ pkg -c /mnt update pkg -c /mnt upgrade unmount /mnt/dev/
Activate the new BE
bectl umount 13.0-RELEASE bectl activate 13.0-RELEASE
And reboot. If it doesn't work, you can revert to another BE in the bootloader.