这是一份预先报告(因为我将在下面发布一个解决方案),适用于在 BIOS 模式下安装最近发布的 Ubuntu 21.04 时遇到此错误的人(UEFI 模式应该没问题)。
当这样做时,如果你碰巧通过 Rufus 创建了你的媒体(或者你从官方 GRUB 2.04 版本自己安装了 GRUB 引导加载程序),你可能会发现你收到以下消息:
error: symbol 'grub_register_command_lockdown' not found
Press any key to continue...
按下一个键就会返回到 GRUB 选择屏幕。
答案1
[免责声明:我是 Rufus 的主要开发人员]
简短回答:
- 如果使用 Rufus,您需要下载 Rufus 3.14 或更高版本来创建媒体,您可以下载这里。
- 如果安装自己的 GRUB 引导程序,则需要申请此补丁在 GRUB 2.04 源代码之上,这样就定义了缺失的符号。
长答案:
这个问题实际上源于两个问题,我担心,尽管我想粉饰它,但我别无选择,只能对我真正希望了解的项目提出一些批评,以避免这种情况。
因为 GRUB 项目目前似乎无法及时发布版本,即使存在需要紧急发布的严重漏洞(例如UEFI 启动孔,该问题早在一年前就已报告,但至今仍未正式发布),Ubuntu 等发行版理所当然地从 GRUB 中挑选补丁,并将它们应用到大约 2 年前发布的最新 GRUB 版本(2.04 版)之上。因此,第一个问题是,尽管人们在 GRUB 邮件列表中反复表达担忧,认为缺乏正式的 GRUB 版本实际上会在下游产生重大问题,Ubuntu 等发行版必须在最新 GRUB 版本之上应用和维护数百个补丁,而不是简单地更新到 GRUB 2.05-1 或 GRUB 2.05-2 等带外版本,以修复 BootHole 或锁定漏洞,但 GRUB 项目似乎仍然没有考虑到他们延迟发布任何内容的做法最终会损害依赖 GRUB 启动 Linux 安装媒体的用户。
不幸的是,他们没有给 GRUB 2.04 + 补丁起一个版本名,例如
grub-2.04-ubuntu
,这样 Rufus 这样的实用程序就可以检测到 Ubuntu 21.04 使用的 GRUB 版本不是原始版本未修改2.04 版本(实际上,它应该是唯一一个可以标记为 的版本grub-2.04
),因此会自动下载包含锁定修复的 GRUB 版本,Ubuntu 维护人员决定将其标记为风俗GRUB 2.04 版本 + 数百个补丁grub-2.04
。
所有这些的最终结果是,由于一些应用于 GRUB 的补丁实际上已经破坏了 Ubuntu 所标记的“GRUB 2.04”实际上不再与 vanilla GRUB 2.04 版本兼容,这意味着,当你需要将光学 GRUB 引导加载程序转换为磁盘引导加载程序时(因为,虽然 ISOHybrid 的 DD 映像在大多数情况下工作正常,但实际上存在对于首次使用的用户来说,最好不要使用 DD 映像来创建安装介质的情况),并依靠报告的 GRUB 版本来查找匹配的引导加载程序,事情可能会以惊人的方式出错。
希望 GRUB 维护人员最终能够意识到,不及时发布版本,尤其是当存在需要紧急修复的重大漏洞时,实际上会给下游带来问题。同样,我只能希望 Ubuntu 维护人员能够意识到,如果你在 2 年前发布的软件上应用大量补丁,而其中一些可能会破坏兼容性,那么你大概应该在您的版本控制中的某处添加一个后缀,以便您修改后的软件不会与原始版本报告相同。