我在用重新查找作为我的主要引导加载程序。由于它可以直接加载内核映像,我可能甚至不需要 GRUB,但保留它以防万一感觉更安全。然而,让我恼火的是某些升级(尚未确定是升级到 grub、内核还是两者)会触发对我的 UEFI NVRAM 的更改,使 GRUB 成为默认引导加载程序。
我在各种帖子中看到--no-nvram
grub 安装程序有一个选项,这可能就是我想要的。所以我的主要问题是如何在升级时将该标志传递给 grub 安装程序?
Stack Exchange 上现有的几个答案 [1,2,3] 都指向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-amd64
grub-efi-amd64-signed
shim-signed
core.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-signed
而shim-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
参考
使用 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 软件 - 但根本不配置它或将其安装在引导扇区上
现在情况可能也有所不同,因为 grub 包已被重新设计,逻辑可能已改变