Debian 11 Live 映像上的 GRUB 安装无法获取“覆盖”的规范路径

Debian 11 Live 映像上的 GRUB 安装无法获取“覆盖”的规范路径

我们正在构建一个基于 Debian 的产品。为了简化在工厂中构建这些的过程,我正在尝试构建一个用于安装主操作系统的实时磁盘。我们有一款旧产品使用此过程,但基于 Debian 7。我使用的是 Debian 11。我的 Debian 11 恢复过程和映像基于 Debian 7。两者都使用live-build. Debian 11 系统从主线存储库以及我的存储库中提取操作系统,bullseye以获取承载我们位的一个软件包。这是一个多步骤的过程,我们运行live-build构建操作系统的操作系统,将其压缩到一个squashfs中,然后使用一个脚本围绕它构建一个实时操作系统,该脚本执行诸如对驱动进行分区、将squashfs文件解压到适当的分区等操作。严重不起作用,请应用 GRUB。

构建的一部分执行以下操作:

install -d /boot/seed
grub-mkimage -Ox86_64-efi -o /boot/seed/BOOTX64.EFI -p '(hd0,1)/EFI/BOOT/grub' \
    part_gpt part_msdos fat
grub-mkimage -Oi386-pc -o /boot/seed/mbr-core.img -p '(hd0,msdos1)/biosgrub' \
    part_msdos fat biosdisk
grub-mkimage -Oi386-pc -o /boot/seed/gpt-core.img -p '(hd0,gpt1)/biosgrub' \
    part_gpt fat biosdisk
cp -a /usr/lib/grub/i386-pc/boot.img /boot/seed/boot.img
cp -a /usr/lib/grub/i386-pc/modinfo.sh /boot/seed/modinfo.sh
grub-editenv /boot/seed/grubenv create

这些文件最终会出现在实时操作系统中,并在尝试安装 GRUB 之前被复制到 ESP 分区。这些文件和所有各种 GRUB 模块都会在安装脚本的中途复制。

稍后在脚本中,我们调用grub-install.

grub-install \
    --directory /mnt/biosgrub \
    --boot-image boot.img \
    --core-image core_img \
    /dev/sda

这里的问题是,较新的版本grub-install不再支持core-image,并且boot-image像 Debian 7 的版本一样进行切换,因此会立即失败。我取出了boot-imagecore-image开关,现在失败了:

grub-install: error: failed to get canonical path of `overlay'.

是的,确实有一个左反引号和一个右单引号overlay

我尝试删除 GRUB 步骤,让它解开所有内容,然后启动到运行 Manjaro 的图形实时磁盘(已经放置)以尝试获取有关 GRUB 情况的更多信息。在那里运行grub-install也会以同样的方式失败。

从谷歌搜索中,我了解到这是因为grub-install认为目标设备正在使用overlayfs并且无法弄清楚要使用哪个实际设备,但我不太确定从这里去哪里,也不确定要问什么问题。我很乐意提供更多详细信息,尽管由于专有软件原因必须对某些内容进行编辑。

如果重要的话,在系统外手动安装创建的操作系统分区表明一切都在正确的位置,我们的代码就位,并且如果有引导加载程序,可能会运行良好。

ETA:我在这里取得了一些进展,将未压缩的操作系统安装到实时磁盘中的一个目录中,安装/proc, /sys, 和/dev到该目录中,将我的 EFI 分区安装到其中,然后chrooting 到其中。然后运行grub-install /dev/sda但是启动时grub仍然丢失。

答案1

收到关于这个问题的大量流量的通知后,我想我应该发布我们最终通过使用debos构建的图像和闪光器图像解决了这个问题,而不是尝试使用我在问题中描述的过程。

德博斯:https://github.com/go-debos/debos

相关内容