grub-install 不会使用正确的模块创建 EFI 二进制文件

grub-install 不会使用正确的模块创建 EFI 二进制文件

我正在尝试在 KDE Neon 系统上设置全盘加密(当然,遵循拱门维基指南 就此主题而言)。有关设置的一些相关信息:

  • 该系统有两个顶级卷:
    • EFI 系统分区,与 ESP 一样正常
    • 一个 LUKS2 卷,其中嵌套有 LVM,用于托管整个系统,包括/boot.
  • 该系统使用 GRUB 2.06,其中包括有限的 LUKS2 支持。 LUKS2 卷设置为与此版本的 GRUB 兼容。
  • 安全启动目前已禁用,但将来可能会启用。

按照这些指南,我有一个基本上按预期工作的系统:GRUB 询问驱动器密码,如果输入正确的密码,则完成其引导顺序并加载操作系统,该操作系统将引导到可用的图形会话。

我唯一的问题是运行时grub-install(无论是由用户手动运行,还是在apt安装 GRUB 更新时自动运行),我构建的支持此设置的 GRUB 手动 EFI 二进制文件被一个 EFI 二进制文件覆盖,该二进制文件执行以下操作:不支持此设置(具体来说,正如上面链接的后一篇 Arch Wiki 文章所提到的,它没有该luks2模块)。虽然我可以(并且确实)有一个脚本来重建和安装正确的 GRUB 二进制文件,但我希望grub-install第一次就正确构建这个二进制文件。是否有某种挂钩可以用来控制保存到 ESP 的 EFI 二进制文件?

答案1

使用dpkg-divert,您可以告诉包管理将包转移grub-install到非标准位置:

dpkg-divert --local --rename --add /usr/sbin/grub-install

这会移动grub-install/usr/sbin/grub-install.divert,并且每当包管理更新 GRUB 时,更新的文件都会被放置到更改的位置。这将允许您将包装器脚本放入/usr/sbin/grub-install.

假设您只需要使用grub-install自定义--modules=选项进行调用,则包装器脚本可能如下所示:

#!/bin/sh
/usr/sbin/grub-install.divert --modules=<your custom set of modules here> "$@"

您可能还想提交一份“愿望清单”优先级错误报告,以建议添加一个包配置设置,该设置允许将自定义选项(或您的情况所需的任何内容)注入到grub-install包更新时的自动化操作中。

如果认为这太复杂,则替代方案可能是使用包配置选项来禁用grub-install包更新时的自动运行。已经存在 debconf 选项grub2/force_efi_extra_removable(default=false) 和grub2/update_nvram(default=true),它们都修改automatic的行为grub-install,所以有一个先例。

相关内容