UEFIブートするFreeBSDでloader.efiやgptboot|gptzfsbootを更新する〜2022/11/01のFreeBSD Errata Noticeより〜

freebsd-update fetch installなどによりアップデートを行った後は、ほとんどの場合、再起動するぐらいで特に注意することがない事の多い近年だが、久し振りに注意が必要なものがあったので、記録がてら書いておく。


2022年11月01日に公表されたErrata Notices
FreeBSD-EN-22:27.loader
FreeBSD-EN-22:26.cam
FreeBSD-EN-22:25.tcp
FreeBSD-EN-22:24.zfs
FreeBSD-EN-22:23.vm
FreeBSD-EN-22:22.tzdata
FreeBSD-EN-22:21.zfs


このうち、FreeBSD-EN-22:27.loaderのものが注意が必要なのだが、今回はV. Solutionの Upgrade your system to a supported FreeBSD ... の文を読まないままrebootを行ってしまうとちょっとした対処が必要になる。(ここでは書かない)


引用ここから〜〜〜
V.   Solution

Upgrade your system to a supported FreeBSD stable or release / security
branch (releng) dated after the correction date.  The UEFI system partition will
need to be updated with the new loader.efi.

Perform one of the following:

1) To update your system via a binary patch:

Systems running a RELEASE version of FreeBSD on the amd64, i386, or
(on FreeBSD 13 and later) arm64 platforms can be updated via the
freebsd-update(8) utility:

# freebsd-update fetch
# freebsd-update install
〜〜〜引用ここまで
※2) To update your system via a source code patch: 以降は省略。


今回の場合は何が書いてあるかと言うと、「このアップグレードがサポートされているのはFreeBSD-stable、FreeBSD-Release、セキュリティブランチにあるものだけです。UEFIシステムパーティションを使っている場合、アップデート前に新しいloader.efiの更新が必要です。」(オレオレ訳なのでより正しい文言が必要な場合は原文をご確認ください)


UEFIパーティションのシステムだけはfreebsd-update fetchとfreebsd-update installで終わらないだけであり、その他の例えばMBR形式のシステムではいつもどおりのコマンドで問題ないのだろう。




じゃあ、UEFIシステムパーティションを使ってるのでloader.efiも更新しないといけないね、ということで、おそらく走るであろうコマンド。

# freebsd-update fetch install
〜省略〜

# mount -t msdosfs /dev/ada0p1 /mnt
# mv /mnt/efi/boot/loader.efi /mnt/efi/boot/loader.efi.old
# cp /boot/loader.efi /mnt/efi/boot/loader.efi
# umount /mnt
〜他にEFIパーティションを持つディスクがあればそちらも更新する〜
# reboot
freebsd-update fetch installコマンドの前にloader.efiを更新してもたぶん意味がない。

これは一例なので、手元のシステムではそういう作りになってないかも知れない。その場合はFreeBSD.efiとかbootx64.efiなどを探してみてください。(ただし、EFIローダなどにより複数OSのマルチブートを実現している場合は注意深く操作したほうが良いと思います)
EFIパーティションだけでなくfreebsd-bootパーティションを持っている場合は、ついでに以下のコマンドも走らせておくと幸せになるかも。
※ディスク全体がFreeBSDシステムで占められており、ada0p1がfreebsd-bootパーティションの場合
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
※他OSが共存するディスクでada0p1がfreebsd-bootパーティションの場合
# gpart bootcode -p /boot/gptzfsboot -i 1 ada0

-bと-pの位置は逆に指定しがちなので不安であればちゃんとman gpartコマンドのExamplesのGPTの項目を確認する。[n敗]



修正:2022/11/07 文章の軽微な修正
初版:2022/11/02

以下、参考サイト

FreeBSD Security Advisories
FreeBSD Errata Notices

コメント