Re: Review D58990: freebsd-update: automatically update EFI and BIOS bootloaders on install

From: Stefan Esser <se_at_FreeBSD.org>
Date: Thu, 20 Aug 2026 07:37:40 UTC
Am 19.08.26 um 18:30 schrieb Ronald Pagani Jr (ronald.pagani.jr):
> I've submitted a patch to automatically update the EFI bootloader on the ESP 
> during freebsd-update install:
> 
> https://reviews.freebsd.org/D58990 <https://reviews.freebsd.org/D58990>
> 
> The problem: freebsd-update updates /boot/loader.efi on the root filesystem, 
> but the UEFI firmware boots from loader.efi on the EFI System Partition — a 
> separate FAT32 partition that freebsd-update never touches. After a major 
> version upgrade the ESP loader can be left several versions stale. Since 14.1 
> removed the lua_path==nil compatibility shim from core.lua, this mismatch 
> produces a hard boot failure. If the user also ran zpool upgrade, the system is 
> completely unbootable without external media.
> 
> The patch hooks efi_bootloader_update.sh into install_run() in freebsd- 
> update.sh. It auto-detects the ESP via gpart, fingerprints /EFI/BOOT/ 
> BOOTx64.efi before touching it (multi-OS safe), creates /EFI/FreeBSD/loader.efi 
> if absent, updates NVRAM, and handles BIOS GPT bootcode as well. Opt-out via 
> UpdateBootloader=no in freebsd-update.conf.
> 
> Tested on FreeBSD 14.0-RELEASE-p11 amd64 (UEFI, ZFS, NVMe). 197 unit/ 
> integration/error tests available at:
> 
> https://github.com/RZA-SF/freebsd-patch-for-bug279829 <https://github.com/RZA- 
> SF/freebsd-patch-for-bug279829>

I'm using a much simpler version that just covers my setup, and would
like to replace it by a more general version.

This fails for me in lines 231 to 236 since device names are expected,
but zpool status returns a diskid based path:

$ zpool status zroot
   pool: zroot
  state: ONLINE
config:

	NAME                          STATE     READ WRITE CKSUM
	zroot                         ONLINE       0     0     0
	  diskid/DISK-8ESKF03YZ0EAp2  ONLINE       0     0     0

errors: No known data errors

$ sh efi_bootloader_update.sh --dry-run
freebsd-update: [bootloader] INFO:  Boot method detected: UEFI
freebsd-update: [bootloader] WARN:  No boot disks found
freebsd-update: [bootloader] WARN:  Boot disk discovery failed
freebsd-update: [bootloader] WARN:  If using hardware RAID or an exotic 
topology, update the bootloader manually

My version uses "gpart show -p" to list boot partitions and to fetch
the corresponding device names:

$ gpart show -p | grep -w efi
         2048      522240  diskid/DISK-8ESKF03YZ0EAp1  efi  (255M)
         2048      522240  diskid/DISK-81S0A0K7FJDHp1  efi  (255M)
         2048      522240  diskid/DISK-81S0A0L1FJDHp1  efi  (255M)

> This is complementary to Warner Losh's D45890 (loader version-check warnings). 
> Feedback welcome.
Regards
STefan