+sub prepare_systemd_boot_esp {
+ my ($espdev, $targetdir) = @_;
+
+ my $espuuid = find_dev_by_uuid($espdev);
+ my $espmp = "var/tmp/$espuuid";
+ mkdir "$targetdir/$espmp";
+
+ syscmd("mount -n $espdev -t vfat $targetdir/$espmp") == 0 ||
+ die "unable to mount ESP $espdev\n";
+
+ File::Path::make_path("$targetdir/$espmp/EFI/proxmox") ||
+ die "unable to create directory $targetdir/$espmp/EFI/proxmox\n";
+
+ syscmd("chroot $targetdir bootctl --no-variables --path /$espmp install") == 0 ||
+ die "unable to install systemd-boot loader\n";
+ write_config("timeout 3\ndefault proxmox-*\n",
+ "$targetdir/$espmp/loader/loader.conf");
+
+ syscmd("umount $targetdir/$espmp") == 0 ||
+ die "unable to umount ESP $targetdir/$espmp\n";
+
+}
+
+sub prepare_grub_efi_boot_esp {
+ my ($dev, $espdev, $targetdir) = @_;
+
+ syscmd("mount -n $espdev -t vfat $targetdir/boot/efi") == 0 ||
+ die "unable to mount $espdev\n";
+
+ my $rc = syscmd("chroot $targetdir /usr/sbin/grub-install --target x86_64-efi --no-floppy --bootloader-id='proxmox' $dev");
+ if ($rc != 0) {
+ if ($boot_type eq 'efi') {
+ die "unable to install the EFI boot loader on '$dev'\n";
+ } else {
+ warn "unable to install the EFI boot loader on '$dev', ignoring (not booted using UEFI)\n";
+ }
+ }
+ # also install fallback boot file (OVMF does not boot without)
+ mkdir("$targetdir/boot/efi/EFI/BOOT");
+ syscmd("cp $targetdir/boot/efi/EFI/proxmox/grubx64.efi $targetdir/boot/efi/EFI/BOOT/BOOTx64.EFI") == 0 ||
+ die "unable to copy efi boot loader\n";
+
+ syscmd("umount $targetdir/boot/efi") == 0 ||
+ die "unable to umount $targetdir/boot/efi\n";
+}