签名的 GRUB 启动 UEFI PXE Windows 10 PE,最终找不到 sbcpflighttoken.p7b 和朋友

签名的 GRUB 启动 UEFI PXE Windows 10 PE,最终找不到 sbcpflighttoken.p7b 和朋友

我正在尝试启动我使用 Windows ADK +“PE 插件”创建的 Windows 10 amd64 预启动环境 (PE) iso。我正尝试为此使用签名的启动垫片和签名的 GRUB。

首先,我使用 Debian 10.5.0 amd64 的东西(grub-common、grub-efi-amd64-bin、grub-efi-amd64-signed、shim-signed。):

在我的 /tftproot 中我有符号链接:

bootx64.efi -> /opt/efipkgs/debian/shim-signed/usr/lib/shim/shimx64.efi.signed
grubx64.efi -> /opt/efipkgs/debian/grub-efi-amd64-signed/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
grub/x86_64-efi -> /opt/efipkgs/debian/grub-efi-amd64-bin/usr/lib/grub/x86_64-efi
grub/fonts/ascii.pf2 -> /opt/efipkgs/debian/grub-common/usr/share/grub/ascii.pf2
grub/fonts/euro.pf2 -> /opt/efipkgs/debian/grub-common/usr/share/grub/euro.pf2
grub/fonts/unicode.pf2 -> /opt/efipkgs/debian/grub-common/usr/share/grub/unicode.pf2

我在主板 UEFI 设置中启用了安全启动。现在,当我启动时,我可以正常获得此 GRUB 菜单:

Grub 菜单

我有一个用于在 GPT 上启动本地磁盘 Windows 7/10 的菜单:

menuentry 'Windows 7/10 EFI bootloader on local GPT' {
 insmod part_gpt
 insmod fat
 insmod chain
 set root='(hd0,gpt1)'
 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

从本地磁盘启动 Windows 10(以非安全启动模式安装):

磁盘窗口启动正常

因此链式加载 efi 在某种程度上是有效的。

但是,如果我尝试启动此菜单项:

menuentry 'GRUP WINPE TEST' {
 chainloader /unpacked_isos/win10/winpe_win10_x64_2021-10-09/efi/boot/bootx64.efi
}

像这儿:

Grub 的 Winpe Debian

我收到以下错误“BlInitializeLibrary 失败 0xc0000001”:

BlInitializeLibrary 失败 0xc0000001

好的。接下来,为了好玩,我尝试了 Ubuntu 可信软件包。我从这里以它们为例:https://launchpad.net/ubuntu/trusty/amd64/shim-signed/1.6+0.4-0ubuntu4和这里:https://launchpad.net/ubuntu/trusty/amd64/grub-efi-amd64-signed/1.34+2.02~beta2-9

我创建了新的符号链接:

bootx64.efi -> /opt/efipkgs/ubuntu/shim-signed/usr/lib/shim/shim.efi.signed
grubx64.efi -> /opt/efipkgs/ubuntu/grub-efi-amd64-signed/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
grub/x86_64-efi -> /opt/efipkgs/ubuntu/grub-efi-amd64-bin/usr/lib/grub/x86_64-efi
grub/fonts/ascii.pf2 -> /opt/efipkgs/ubuntu/grub-common/usr/share/grub/ascii.pf2
grub/fonts/euro.pf2 -> /opt/efipkgs/ubuntu/grub-common/usr/share/grub/euro.pf2
grub/fonts/unicode.pf2 -> /opt/efipkgs/ubuntu/grub-common/usr/share/grub/unicode.pf2

瞧,奇迹发生了,我向前迈了一步:

Windows 启动管理器服务器 IP 无法找到 \Boot\BCD

因此屏幕上显示“Windows 启动管理器(服务器 IP:172.16.8.254)。并且它表示无法找到 \Boot\BCD

嗯,这还是可以修复的。让我们将启动目录链接到主层

ln -s unpacked_isos/win10/winpe_win10_x64_2021-10-09/boot boot

查看日志

Oct 10 17:22:20 gw dnsmasq-tftp[27274]: sent /tftproot/unpacked_isos/win10/winpe_win10_x64_2021-10-09/efi/boot/bootx64.efi to 172.16.8.197
Oct 10 17:22:20 gw dnsmasq-tftp[27274]: file /tftproot/Boot/BCD not found

某种大小写问题。让我们使用以下指令强制 dnsmasq tftp 服务器上的所有内容都小写:

tftp-lowercase

重新启动 dnsmasq 后再次尝试:

Windows 启动管理器服务器 ip 0xc0000225 意外错误

因此是不同的错误代码,这次是 0xc0000225 / 意外错误。

查看tftp日志:

Oct 10 17:30:42 gw dnsmasq-tftp[28488]: sent /tftproot/unpacked_isos/win10/winpe_win10_x64_2021-10-09/efi/boot/bootx64.efi to 172.16.8.197
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: error 0 TFTP Aborted received from 172.16.8.197
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: failed sending /tftproot/boot/bcd to 172.16.8.197
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: sent /tftproot/boot/bcd to 172.16.8.197
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/policies/sbcpflighttoken.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/securebootpolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/sipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/skusipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/winsipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/atpsipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/sipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/skusipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/winsipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/atpsipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/sipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/skusipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/winsipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/atpsipolicy.p7b not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/fonts/wgl4_boot.ttf not found
Oct 10 17:30:42 gw dnsmasq-tftp[28488]: file /tftproot/efi/microsoft/boot/fonts/wgl4_boot.ttf not found

如果我在主板 Uefi 设置中禁用安全启动,情况完全相同。

我的问题是:

  1. 为什么旧的 Ubuntu 14.04 grub 能够在安全启动中达到这么高的效果而 Debian 却不能?

  2. 丢失的 p7b 文件位于何处?或者它们是否完全可用,因为我已使用 Windows ADK 以自定义方式创建了 .iso?

旁注:我并且可能会找到一种方法来在 Uefi PXE 中启动至少不安全的映像(例如通过自编译的 ipxe 或 UEFI 的 GRUB4DOS,但我只是想知道这里发生了什么(:D)以及这是否可以用 Grub 等来完成。干杯。

相关内容