我们正在开发一种基于Debian的产品。为了简化工厂中的构建,我正在尝试构建一个可以安装主操作系统的活动磁盘。我们有一个旧的产品使用这个过程,但是基于Debian 7。我使用Debian 11。我的Debian 11恢复过程和图像的Debian 7之一。两者都使用live-build。Debian11系统将操作系统从主线bullseye repos中提取出来,再加上我对承载我们比特的一个包的回购。这是一个多步骤的过程,我们运行live-build来构建操作系统的OS,将其压缩到一个squashfs中,然后围绕它构建一个活动的OS,该脚本可以将驱动的、取消压缩的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-image和core-image交换机,现在它失败了:
grub-install: error: failed to get canonical path of `overlay'.是的,在overlay上确实有一个开场的单引号和结束单引号。
我尝试删除GRUB步骤,让它打开所有的东西,然后引导到一个运行Manjaro (如果它躺着的话)的图形化的活动磁盘,试图获得更多关于GRUB情况的信息。在那里运行grub-install也会以同样的方式失败。
通过谷歌搜索,我了解到这是因为grub-install认为目标设备使用的是一个覆盖层,无法确定实际使用哪种设备,但我不太确定从哪里开始,也不确定该问什么问题。我很高兴提供更多的细节,虽然有些事情将不得不修改,因为专有软件的原因。
如果重要的话,手动挂载创建的OS分区离开系统会显示一切都在正确的位置,我们的代码已经到位,如果有引导程序,我们的代码可能会运行良好。
ETA:我在这里取得了一些进展,将未压缩的操作系统安装到活动磁盘中的目录中,将/proc、/sys和/dev安装到该目录,将我的EFI分区安装到该目录中,并将chrooting安装到该目录中。然后运行grub-install /dev/sda,但grub在启动时仍然缺失。
发布于 2022-12-21 19:28:17
在收到关于这个问题的大量流量的通知后,我想我会发帖说,我们最终通过使用debos构建的映像和闪光图像来解决这个问题,而不是尝试使用我在问题中描述的过程。
https://unix.stackexchange.com/questions/683405
复制相似问题