我需要有关打包程序(流浪盒)构建(ER)配置/脚本的帮助,以便正确配置 UEFI 启动顺序

我需要有关打包程序(流浪盒)构建(ER)配置/脚本的帮助,以便正确配置 UEFI 启动顺序

设置

主持人

OS: Manjaro XFCE x86_64
Apps: packer (plugins: virtualbox-iso), 

客人

OS:                Arch Linux  
Hypervisor:        Virtualbox 
Architecture:      x64

我使用 Packer 构建了一个 Vagrant 盒子。

我的目标是让 VMbox 像 Docker 容器应用程序一样运行一个应用程序,但由于该应用程序需要使用分区,因此我无法使用 Docker 来避免一些风险。vagrant box 是一个自定义虚拟机。
这样,其他人就可以拥有与您自己相同的操作系统设置。

我已经为 Virtualbox 构建了一个,但还没有完全实现。
我希望 VM 能够现代化,所以我想使用 UEFI,但我还没有完全弄清楚
如何为 VM 构建它。

这就是为什么我遇到这个问题:

UEFI fails to load properly. BdsDxe: failed to load Boot0001 "UEFI VBOX Harddisk"

见下图: 在此输入图像描述

我注意到检查为我的盒子提供的启动顺序与 virtualbox 可以找到的内容不符,所以我想知道这是为什么。

我在 Virtualbox 中只有两个选项,第一个是硬盘启动,它找不到,第二个是启动某种网络启动?

我只是想进入 GRUB。
在此输入图像描述

在构建 vagrant box 的过程中,我打电话efibootmgr来看看我的磁盘应该给出什么作为它的引导顺序。

efibootmgr 的输出

SE_bastille-installer-box.virtualbox-iso.archlinux: ==> bootloader.sh: Check boots..
SE_bastille-installer-box.virtualbox-iso.archlinux: BootCurrent: 0001
SE_bastille-installer-box.virtualbox-iso.archlinux: Timeout: 0 seconds
SE_bastille-installer-box.virtualbox-iso.archlinux: BootOrder: 0005,0000,0002,0003,0004
SE_bastille-installer-box.virtualbox-iso.archlinux: Boot0000* UiApp   FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)
SE_bastille-installer-box.virtualbox-iso.archlinux: Boot0002* UEFI VBOX HARDDISK    PciRoot(0x0)/Pci(0xf,0x0)/SCSI(0,0){auto_created_boot_option}
SE_bastille-installer-box.virtualbox-iso.archlinux: Boot0003* UEFI PXEv4 (MAC:0800277E9510)   PciRoot(0x0)/Pci(0x3,0x0)/MAC(0800277e9510,1)/IPv4(0.0.0.00.0.0.0,0,0){auto_created_boot_option}
SE_bastille-installer-box.virtualbox-iso.archlinux: Boot0004  EFI Internal Shell   FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
SE_bastille-installer-box.virtualbox-iso.archlinux: Boot0005* GRUB   HD(1,GPT,1e8f8680-99c0-4c28-b83a-eb601805d4c4,0x800,0x96000)/File(\EFI\GRUB\grubx64.efi)

下面是构建引导加载程序的脚本。 脚本/bootloader.sh

#!/usr/bin/env bash

. /root/vars.sh

NAME_SH=bootloader.sh

# stop on errors
set -eu

echo "==> ${NAME_SH}: Installing grub packages.."
/usr/bin/arch-chroot ${ROOT_DIR} /usr/bin/pacman --noconfirm -S edk2-ovmf efibootmgr grub os-prober >/dev/null

echo "==> ${NAME_SH}: Pre-configure grub.."
/usr/bin/arch-chroot ${ROOT_DIR} sed -i 's/#GRUB_DISABLE_OS_PROBER/GRUB_DISABLE_OS_PROBER/' /etc/default/grub

echo "==> ${NAME_SH}: Installing grub.."
/usr/bin/arch-chroot ${ROOT_DIR} grub-install --target=x86_64-efi --efi-directory=${ESP_DIR} --bootloader-id=GRUB &>/dev/null
/usr/bin/arch-chroot ${ROOT_DIR} grub-mkconfig -o /boot/grub/grub.cfg &>/dev/null

echo "==> ${NAME_SH}: Check boots.."
if [[ $PACKER_BUILDER_TYPE == "virtualbox-iso" ]]; then
  /usr/bin/arch-chroot ${ROOT_DIR} efibootmgr --delete-bootnum --bootnum 1
fi
/usr/bin/arch-chroot ${ROOT_DIR} efibootmgr

EFI 文件可以在 shell 中找到,所以我至少做了一些正确的事情。 在此输入图像描述

我可以添加启动选项,以便它可以工作,但我希望盒子可以工作.. 好吧.. 开箱即用!

我的打包机构建文件 https://raw.githubusercontent.com/safenetwork-community/SE_bastille-installer-box/arch/bib-base/SE_bastille-installer-box.pkr.hcl

我究竟做错了什么?

答案1

显然这个问题很常见,以至于它出现在 Arch Linux wiki 故障排除页面上:https://wiki.archlinux.org/title/GRUB#Default/fallback_boot_path

脚本/bootloader.sh

...
echo "==> ${NAME_SH}: Installing grub.."
/usr/bin/arch-chroot ${ROOT_DIR} grub-install --target=x86_64-efi --efi-directory=${ESP_DIR} --bootloader-id=GRUB --removeable &>/dev/null
...

相关内容