設定
所有者
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用に1つ作成しましたが、まだ完全に実装されていません。 VMを近代化したいので、UEFIを使用したいのですが、VM用に構築する方法が
わかりません。
これが私がこの問題を経験している理由です:
UEFI fails to load properly. BdsDxe: failed to load Boot0001 "UEFI VBOX Harddisk"
私のボックスに提供されている起動順序を確認することがvirtualboxで見つけることができるものと一致しないことがわかったので、その理由は疑問に思いました。
Virtualboxには2つのオプションしかありません。 1つ目は見つからないハードディスクの起動で、2つ目はネットワークの種類の種類を有効にすることです。
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ファイルはシェルにあるため、少なくとも正しい操作を実行しています。
動作するようにブートオプションを追加することができますが、ボックスが動作するようにしたいのですが。
マイパッケージビルドファイル 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
...