Re: Review D58990: freebsd-update: automatically update EFI and BIOS bootloaders on install
"Ronald Pagani Jr (ronald.pagani.jr)" <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.hackers |
|---|---|
| Message-ID | <CA+aKf4km9i9UkY-XK-2nOkrQ03fgN3Sp-w3veMKmfudHjKw4rw@mail.gmail.com> |
On Thu, Aug 20, 2026 at 12:37 AM Stefan Esser <[email protected]> wrote: > 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 > I've just pushed a kern.disks implementation following recent review comments, and I'm wondering if that works for you? https://github.com/RZA-SF/freebsd-patch-for-bug279829/blob/revision-2/src/efi_bootloader_update.sh Best, Ron