diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 89568bc6f..9546ca49f 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -25,6 +25,7 @@ # along with Calamares. If not, see . import os +import shutil import subprocess import libcalamares @@ -193,9 +194,11 @@ def install_grub(efi_directory, fw_type): """ if fw_type == "efi": print("Bootloader: grub (efi)") + install_path = libcalamares.globalstorage.value("rootMountPoint") + install_efi_directory = install_path + efi_directory - if not os.path.isdir(efi_directory): - check_target_env_call(["mkdir", "-p", "{!s}".format(efi_directory)]) + if not os.path.isdir(install_efi_directory): + os.mkdirs(install_efi_directory) if "efiBootloaderId" in libcalamares.job.configuration: efi_bootloader_id = libcalamares.job.configuration["efiBootloaderId"] @@ -220,24 +223,21 @@ def install_grub(efi_directory, fw_type): "--force"]) # VFAT is weird, see issue CAL-385 - efi_directory_firmware = os.path.join(efi_directory, "EFI") - if os.path.exists(efi_directory_firmware): - efi_directory_firmware = vfat_correct_case(efi_directory, "EFI") + install_efi_directory_firmware = vfat_correct_case(install_efi_directory, "EFI") + if not os.path.exists(install_efi_directory_firmware): + os.mkdirs(install_efi_directory_firmware) - efi_boot_directory = os.path.join(efi_directory_firmware, "boot") - if os.path.exists(efi_boot_directory): - efi_boot_directory = vfat_correct_case(efi_directory_firmware, "boot") - else: - check_target_env_call(["mkdir", "-p", efi_boot_directory]) + # there might be several values for the boot directory + # most usual they are boot, Boot, BOOT + + install_efi_boot_directory = vfat_correct_case(install_efi_directory_firmware, "boot") + if not os.path.exists(install_efi_boot_directory): + os.mkdirs(install_efi_boot_directory) # Workaround for some UEFI firmwares - efi_file_source = {"32": os.path.join(efi_directory_firmware, efi_bootloader_id, "grubia32.efi"), - "64": os.path.join(efi_directory_firmware, efi_bootloader_id, "grubx64.efi")} - efi_file_target = {"32": os.path.join(efi_boot_directory, "bootia32.efi"), - "64": os.path.join(efi_boot_directory, "bootx64.efi")} - check_target_env_call(["cp", - efi_file_source[efi_bitness], - efi_file_target[efi_bitness]]) + efi_file_source = {"32": os.path.join(install_efi_directory_firmware, efi_bootloader_id, "grubia32.efi"), + "64": os.path.join(install_efi_directory_firmware, efi_bootloader_id, "grubx64.efi")} + shutil.copy2(efi_file_source[efi_bitness], install_efi_boot_directory) else: print("Bootloader: grub (bios)") if libcalamares.globalstorage.value("bootLoader") is None: