错误:在 BIOS 模式下安装 Ubuntu 21.04 时未找到符号“grub_register_command_lockdown”

Ake*_*keo 7 grub2 system-installation rufus 21.04

这是针对在 BIOS 模式(UEFI 模式应该没问题)下安装最近发布的 Ubuntu 21.04 时遇到此错误的人的先发制人报告(因为我将在下面发布解决方案)。

这样做时,如果您碰巧通过 Rufus 创建了媒体(或者您自己从官方 GRUB 2.04 版本安装了 GRUB 引导加载程序),您可能会发现收到以下消息:

error: symbol 'grub_register_command_lockdown' not found

Press any key to continue...
Run Code Online (Sandbox Code Playgroud)

按下一个键将使您返回到 GRUB 选择屏幕。

Ake*_*keo 15

[免责声明:我是 Rufus 的主要开发者]

简短的回答

  • 如果使用 Rufus,您需要下载 Rufus 3.14 或更高版本来创建您的媒体,您可以在此处下载。
  • 如果安装自己的 GRUB 引导加载程序,则需要在 GRUB 2.04 源代码之上应用此补丁,以便定义缺少的符号。

长答案

这个问题实际上源于两个问题,我担心,尽管我想粉饰它,但我别无选择,只能对我真的希望了解得更多的项目有所批评,正是为了避免这种情况。

  1. 因为 GRUB 项目目前似乎在及时发布版本方面存在问题,即使存在需要紧急发布的关键漏洞(例如UEFI BootHole,这是在接近一年前报道的,但仍然没有正式发布),像 Ubuntu 这样的发行版合乎逻辑地从 GRUB 中挑选补丁并将它们应用到最新的 GRUB 版本(版本 2.04)之上。 ,那是大约 2 年前推出的。所以第一个问题是,尽管人们在 GRUB 邮件列表上反复表达担忧,但缺乏正式的 GRUB 版本实际上在下游产生了重大问题,像 Ubuntu 这样的发行版必须真正应用和维护上百个补丁上一个 GRUB 版本,而不是简单地能够更新到像 GRUB 2.05-1 或 GRUB 2.05-2 这样的带外版本,其中 BootHole 或锁定漏洞已得到修复,

  2. 不幸的是,与其给他们的 GRUB 2.04 + 补丁一个版本名称,例如grub-2.04-ubuntu,这将允许像 Rufus 这样的实用程序检测到 Ubuntu 21.04 使用的 GRUB 版本不是 vanilla未修改的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 年前发布的软件之上应用大量补丁,并且其中一些补丁可能会破坏兼容性,您可能应该在您的版本控制的某处添加一个后缀,以便您更改的软件不会报告自己与香草版本相同。

  • 引人入胜,有教育意义,当然还有洞察力。然而,我不知道我应该如何公开尚未有稳定解决方案的特定漏洞...... (2认同)
  • 这并不完全正确。所有这些漏洞都有公共补丁,已发送到 GRUB 邮件列表并已集成到 GRUB 的开发版本中。但问题是,正如人们所预料的那样,大多数发行版都避免使用不稳定的开发树,所以他们从那里挑选补丁,验证它们,并将它们应用到上一个版本的顶部(因此**复制* * 应该是不必要的工作,如果 GRUB 有更频繁的发布)。漏洞本身不是问题。缺少修复它们的 GRUB 版本。 (2认同)