Estoy usando FreeBSD 14.4 con pkg-base y quiero actualizar a FreeBSD 15.1.
Ya que previamente había convertido la instalación de FreeBSD a pkg-base voy a seguir las instrucciones correspondientes del handbook para actualizar el sistema: Updating FreeBSD with packages.
Preparación
En la sección Preparations se indica cambiar el archivo
/usr/local/etc/pkg/repos/FreeBSD-base.conf para que se vea de la forma
siguiente:
FreeBSD-base: {
url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_0",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
Esto tiene varios problemas:
-
Modifica el repositorio del sistema actual, a diferencia de la sugerencia previa de usar como url
pkg+https://pkg.FreeBSD.org/${ABI}/base_release_${VERSION_MINOR}que funciona tanto para 14.4 como para 15.1 (ver VARIABLES en man pkg.conf). -
El uso de
base_release_0indica que se quiere pasar a FreeBSD 15.0, cuando en realidad quiero instalar 15.1 lo cual es posible según FreeBSD 15.1-RELEASE Upgrading Instructions.This document explains the procedure for upgrading existing 14.4-RELEASE or 15.0-RELEASE installations to 15.1-RELEASE
-
Otro problema que no aparece en el handbook ni en las instrucciónes de upgrade a 15.1, pero si aparece en los foros y en FreeBSD 15.0-RELEASE Release Notes es que ahora las keys deben estar en el directorio
/usr/share/keys/pkgbase-15y puede ser necesario copiarlas de forma manual.
Debido a estos problemas se va a posponer la modificación del archivo para realizarla solamente en el boot environment que será creado más adelante.
Creación del boot environment
Ya que estamos usando zfs se va a crear un nuevo boot environment utilizando bectl como se indica en el handbook y en las instrucciones de upgrade de 15.1.
Aquí hay una diferencia entre la sección Major Upgrade With ZFS del
handbook y la sección Upgrading with Base System Packages de la página de
Upgrading Instructions.
En la primera se crea un nuevo boot environment que se irá actualizando
mediante el uso de pkg con la opción -c que permite indicar un directorio
chroot donde se montará el boot environment creado y bectl para activar el boot
environtmen.
En la segunda se crea un nuevo boot environment que será utilizado como backup
en caso de que algo salga mal y se actualiza el boot environment actual.
De las dos alternativas voy a utilizar la indicada en la página de upgrading a 15.1 y crear un boot environment que funcione como backup:
# bectl create -r FreeBSD-14.4
Verificamos la creación:
# bectl list
BE Active Mountpoint Space Created
FreeBSD-14.4 - - 8K 2026-07-27 01:16
default NR / 13.3G 2025-08-26 22:51
Actualización del sistema
Ahora que fué creado el boot environment de backup modifico el archivo
/usr/local/etc/pkg/repos/FreeBSD-base.conf para que se vea de la forma
FreeBSD-base: {
url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_${VERSION_MINOR}",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkgbase-15",
enabled: yes
}
Una vez hecho esto actualizamos el sistema actual y luego hacemos el upgrade:
# pkg upgrade -r FreeBSD-base
# pkg -oABI=FreeBSD:15:amd64 -oOSVERSION=1501000 upgrade -r FreeBSD-base
pkg: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended
Updating FreeBSD-base repository catalogue...
pkg: Repository FreeBSD-base has a wrong packagesite, need to re-create database
Fetching meta.conf: 100% 179 B 0.2 kB/s 00:01
Fetching data: 100% 82 KiB 84.0 kB/s 00:01
pkg: cannot parse fingerprints: cannot open file <bsd.prog.mk>: No such file or directory
Processing entries: 100%
FreeBSD-base repository update completed. 509 packages processed.
FreeBSD-base is up to date.
Checking for upgrades (152 candidates): 100%
Processing candidates (152 candidates): 100%
The following 216 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
FreeBSD-atf: 15.1 [FreeBSD-base]
FreeBSD-atf-dev: 15.1 [FreeBSD-base]
FreeBSD-atf-lib: 15.1 [FreeBSD-base]
...
FreeBSD-zfs: 14.4p7 -> 15.1 [FreeBSD-base]
FreeBSD-zfs-dev: 14.4p7 -> 15.1p1 [FreeBSD-base]
FreeBSD-zoneinfo: 14.4p7 -> 15.1 [FreeBSD-base]
Number of packages to be installed: 65
Number of packages to be upgraded: 151
The process will require 87 MiB more space.
306 MiB to be downloaded.
Proceed with this action? [y/N]:y
...
[320/332] Extracting FreeBSD-zfs-15.1: 100%
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libavl.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libbe.so.1): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libicp.so.3): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libnvpair.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libspl.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libtpool.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libumem.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libuutil.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libzfs.so.4): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libzfs_core.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libzfsbootenv.so.1): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libzpool.so.2): No such file or directory
pkg: fstat() failed for(//root/usr/local/lib/compat/pkg/libzutil.so.2): No such file or directory
[321/332] Upgrading FreeBSD-zfs-dev from 14.4p7 to 15.1p1...
...
[331/332] Installing FreeBSD-set-base-15.1...
[332/332] Upgrading FreeBSD-tests-dbg from 14.4p7 to 15.1p1...
[332/332] Extracting FreeBSD-tests-dbg-15.1p1: 100%
==> Running trigger: mandoc.ucl
Generating apropos(1) database for /usr/share/man...
Generating apropos(1) database for /usr/share/openssl/man...
# pkg upgrade -r FreeBSD-ports-kmods
Por último revisamos si hubo fallas en la actualización de configuraciones:
# find /etc /usr/local/etc -name '*.pkgnew' -ls
y por suerte no hay ninguna de la que tengamos que preocuparnos.
Actualización del boot loader
Este paso solo se encuentra en la página de actualización a 15.1.
Ya que el sistema es UEFI:
# sysctl machdep.bootmethod
machdep.bootmethod: UEFI
se seguirán los pasos indicados en la sección Upgrading the UEFI Boot Loader.
En el sistema, la partición ESP ya se encuentra montada en /boot/efi.
Antes de reemplazar el boot loader respaldamos el existente:
# cp /boot/efi/EFI/freebsd/loader.efi /boot/efi/EFI/freebsd/loader.efi.bak-`date -I`
Ahora si, sustituyo el bootloader por el nuevo correspondiente a 15.1:
# cp /boot/loader.efi /boot/efi/EFI/freebsd/loader.efi
Y se reinicia el sistema.
Actualización de ports
Una vez que reinicia el sistema actualizamos pkg, el repositorio de paquetes y los ports:
# pkg bootstrap -f
# pkg update -f
# pkg upgrade -f
Notas sobre boot environment
En el proceso de entender mejor los boot environment di con el post ZFS Boot Environments Explained donde se explica el layout creado por el instalador, particularmente:
This is the first often misunderstood topic … probably because of not understanding the canmount=off ZFS property – you can read more about that in the zfsprops(7) man page.
So by default everything is included in ZFS BE – and if you want to EXCLUDE some parts of /usr or /var – you add needed ZFS datasets for these EXCLUDES.
De lo anterior, se puede confirmar que datasets se encuentran en el pool, si se montarán o no y cual es su punto de montaje.
# zfs list
# zfs get canmount
# zfs get mountpoint