如何让 grub-efi-amd64-signed 在更新时不自动覆盖 NVRAM

如何让 grub-efi-amd64-signed 在更新时不自动覆盖 NVRAM

我在用重新查找作为我的主要引导加载程序。由于它可以直接加载内核映像,我可能甚至不需要 GRUB,但保留它以防万一感觉更安全。然而,让我恼火的是某些升级(尚未确定是升级到 grub、内核还是两者)会触发对我的 UEFI NVRAM 的更改,使 GRUB 成为默认引导加载程序。

我在各种帖子中看到--no-nvramgrub 安装程序有一个选项,这可能就是我想要的。所以我的主要问题是如何在升级时将该标志传递给 grub 安装程序?

Stack Exchange 上现有的几个答案 [123] 都指向sudo dpkg-reconfigure grub-efi-amd64解决方案,因为它应该向我显示一个对话框,我可以在对话框中禁用该行为。不过,在焦点上对我来说不起作用:

$ sudo dpkg-reconfigure grub-efi-amd64
dpkg-query: package 'grub-efi-amd64' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files.
/usr/sbin/dpkg-reconfigure: grub-efi-amd64 is not installed

$ dpkg -l *grub*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                  Version                Architecture Description
+++-=====================-======================-============-===============================================================
un  grub                  <none>                 <none>       (no description available)
un  grub-cloud-amd64      <none>                 <none>       (no description available)
ii  grub-common           2.04-1ubuntu26         amd64        GRand Unified Bootloader (common files)
un  grub-coreboot         <none>                 <none>       (no description available)
un  grub-doc              <none>                 <none>       (no description available)
un  grub-efi              <none>                 <none>       (no description available)
un  grub-efi-amd64        <none>                 <none>       (no description available)
ii  grub-efi-amd64-bin    2.04-1ubuntu26         amd64        GRand Unified Bootloader, version 2 (EFI-AMD64 modules)
ii  grub-efi-amd64-signed 1.142.1+2.04-1ubuntu26 amd64        GRand Unified Bootloader, version 2 (EFI-AMD64 version, signed)
un  grub-efi-arm          <none>                 <none>       (no description available)
un  grub-efi-arm64        <none>                 <none>       (no description available)
un  grub-efi-arm64-signed <none>                 <none>       (no description available)
un  grub-efi-ia32         <none>                 <none>       (no description available)
un  grub-efi-ia64         <none>                 <none>       (no description available)
un  grub-emu              <none>                 <none>       (no description available)
ii  grub-gfxpayload-lists 0.7                    amd64        GRUB gfxpayload blacklist
un  grub-ieee1275         <none>                 <none>       (no description available)
un  grub-legacy           <none>                 <none>       (no description available)
un  grub-legacy-doc       <none>                 <none>       (no description available)
un  grub-linuxbios        <none>                 <none>       (no description available)
ii  grub-pc               2.04-1ubuntu26         amd64        GRand Unified Bootloader, version 2 (PC/BIOS version)
ii  grub-pc-bin           2.04-1ubuntu26         amd64        GRand Unified Bootloader, version 2 (PC/BIOS modules)
un  grub-uboot            <none>                 <none>       (no description available)
un  grub-xen              <none>                 <none>       (no description available)
un  grub-yeeloong         <none>                 <none>       (no description available)
un  grub2                 <none>                 <none>       (no description available)
ii  grub2-common          2.04-1ubuntu26         amd64        GRand Unified Bootloader (common files for version 2)

$ sudo dpkg-reconfigure grub-efi-amd64-signed
Installing grub to /boot/efi.
Installing for x86_64-efi platform.
Installation finished. No error reported.

因此,我的包的命名不同,最有可能的候选者只是做了我不想做的事情,而不问任何问题。

查看/var/lib/dpkg/info/grub-efi-amd64-signed.postinst我发现/usr/lib/grub/grub-multi-install --target=$target它调用了 ,而后者又包含一个调用_UBUNTU_ALTERNATIVE_ESPS="$RET" grub-install --efi-directory=$mntpoint "$@"。因此后者可以处理其他标志,但前者似乎没有提供任何钩子。

是否有任何可靠的方法(即可能在接下来的几次升级中也能起作用)来实现--no-nvram这一点,我可以通过其他方式实现该目标吗,或者我必须删除 GRUB 或接受它会时不时地弄乱我的启动菜单?

答案1

我从来没有用过重新查找所以我不知道我的建议可能产生的副作用,买者自慎,如果这会破坏你的系统,请不要怪我,等等。

查看我的 Ubuntu 20.04 服务器上的软件包,我相信您应该能够删除/boot/grub/x86_64-efi/core.efi。、和postinst的脚本都具有相同的逻辑。 如果文件存在,则运行。 否则,跳过该步骤。grub-efi-amd64grub-efi-amd64-signedshim-signedcore.efi/usr/lib/grub/grub-multi-install

脚本中的注释grub-efi-amd64.postinst确实表明core.efi缺少的文件应该告诉脚本跳过安装步骤

https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/postinst.in?h=focal#n742

# Check /boot/grub to see if we previously installed to an ESP. We don't
# want to trigger the install code just by installing the package,

只有grub-efi-amd64软件包有该--no-nvram选项的配置。 grub-efi-amd64-signedshim-signed没有。我不知道为什么,但它们有不同的源包,这可能解释了不同的选项。软件包grub-efi-amd64将此选项存储在德布康夫并在调用时使用它来生成命令行grub-multi-install。正如您所指出的,的脚本grub-multi-install似乎将其参数直接传递给grub-install。您可能能够修补postinst脚本或grub-multi-install添加--no-nvram参数,但这可能会导致未来更新时出现问题

这些是其他德布康夫使用的设置grub-multi-install。但是,我无法让它们跳过安装。如果设置了它们,它们可能会起作用安装 grub 包

echo grub-efi-amd64  grub-efi/install_devices_empty  boolean true | debconf-set-selections
echo grub-efi-amd64  grub-efi/install_devices        multiselect | debconf-set-selections

参考

https://unix.stackexchange.com/questions/565615/efi-boot-bootx64-efi-vs-efi-ubuntu-grubx64-efi-vs-boot-grub-x86-64-efi-grub-efi

使用 grub-install 时,它将首先使用 grub-mkimage 实用程序创建 GRUB 核心映像:在 UEFI 系统上,此文件将保存在 /boot/grub/x86_64-efi/grub.efi 和/或 .../core.efi 中,然后由 grub-install 复制到 EFI 系统分区并添加到 UEFI NVRAM 启动设置中。/boot/grub/x86_64-efi/*.efi 中的副本在启动过程中根本不会使用

现在情况可能有所不同,因为命令的输出/usr/lib/grub/grub-multi-install -vvv表明这些文件已生成但未复制到 ESP。用于启动的文件来自/usr/lib/shim/shimx64.efi.signed

从头安装时以非交互式方式安装 grub2

我想在映像上安装 grub2 软件 - 但根本不配置它或将其安装在引导扇区上

现在情况可能也有所不同,因为 grub 包已被重新设计,逻辑可能已改变

相关内容