[bootloader] fix issue when /EFI/Boot exists

This commit is contained in:
Philip 2017-03-20 07:53:51 +01:00
parent 7997265ce9
commit db931e15bd

View File

@ -25,6 +25,7 @@
# along with Calamares. If not, see <http://www.gnu.org/licenses/>.
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: