我使用重寻作为我的主引导加载程序。因为它可以直接加载内核映像,所以我甚至不需要太多的GRUB,但是保持它在周围,以防万一感觉更安全。然而,让我烦恼的是,某些升级(还没有确定是grub、内核还是两者兼而有之)将触发对我的UEFI的更改,使GRUB成为默认的引导加载程序。
我在不同的帖子中看到,grub安装程序有一个选项--no-nvram,这可能就是我想要的。因此,我这里的主要问题是如何在升级时将该标志传递给grub安装程序?
一些现有的Stack应答(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 (no description available)
un grub-cloud-amd64 (no description available)
ii grub-common 2.04-1ubuntu26 amd64 GRand Unified Bootloader (common files)
un grub-coreboot (no description available)
un grub-doc (no description available)
un grub-efi (no description available)
un grub-efi-amd64 (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 (no description available)
un grub-efi-arm64 (no description available)
un grub-efi-arm64-signed (no description available)
un grub-efi-ia32 (no description available)
un grub-efi-ia64 (no description available)
un grub-emu (no description available)
ii grub-gfxpayload-lists 0.7 amd64 GRUB gfxpayload blacklist
un grub-ieee1275 (no description available)
un grub-legacy (no description available)
un grub-legacy-doc (no description available)
un grub-linuxbios (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 (no description available)
un grub-xen (no description available)
un grub-yeeloong (no description available)
un grub2 (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,或者接受它会时不时地破坏我的启动菜单?
发布于 2020-08-07 22:44:34
我从来没有使用过重新发现,所以我不知道我的建议可能的副作用,请注意,不要怪我,如果这砖头你的系统,等等。
查看我的Ubuntu20.04服务器上的包,我相信您应该能够删除/boot/grub/x86_64-efi/core.efi。用于grub-efi-amd64、grub-efi-amd64-signed和shim-signed的D2脚本都共享相同的逻辑。如果存在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包将此选项存储在debconf中,并在调用grub-multi-install时使用它生成命令行。正如您注意到的,grub-multi-install脚本似乎直接将其参数传递给grub-install。您可能可以修补postinst脚本或grub-multi-install来添加--no-nvram参数,但这可能会导致将来更新期间出现问题。
这些是使用grub-multi-install的其他debconf设置。但是,我不能让他们跳过安装。如果在安装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.efi时,它将首先使用grub-mkimage实用程序创建GRUB核心映像:在UEFI系统上,该文件将保存在/ boot /grub/x86_64- EFI /grub.efi和/或./core.efi中,然后复制到EFI系统分区,并通过grub-install添加到UEFI NVRAM引导设置中。在引导过程中,/ boot /grub/x86_64-efi/*.efi中的副本将完全不使用。
现在情况可能不同了,就像命令/usr/lib/grub/grub-multi-install -vvv的输出对我说的那样,这些文件是生成的,但没有复制到ESP。用于引导的文件来自/usr/lib/shim/shimx64.efi.signed。
我想在映像上安装grub2软件,但根本不配置它或在引导扇区上安装它。
现在情况可能也不同了,因为grub包已经被重新加工,逻辑也可能发生了变化。
https://askubuntu.com/questions/1256398
复制相似问题