diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 88c947cb3..9699ac9c2 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -117,18 +117,20 @@ def create_loader(loader_path): def install_bootloader(boot_loader, fw_type): if fw_type == 'efi': install_path = libcalamares.globalstorage.value("rootMountPoint") + efi_directory = libcalamares.globalstorage.value("efiSystemPartition") + install_efi_directory = install_path + efi_directory uuid = get_uuid() distribution = get_bootloader_entry_name() file_name_sanitizer = str.maketrans(" /", "_-") conf_path = os.path.join( - install_path, "boot", "loader", "entries", "%s.conf" % distribution.translate(file_name_sanitizer)) + install_efi_directory, "loader", "entries", "%s.conf" % distribution.translate(file_name_sanitizer)) fallback_path = os.path.join( - install_path, "boot", "loader", "entries", "%s-fallback.conf" % distribution.translate(file_name_sanitizer)) + install_efi_directory, "loader", "entries", "%s-fallback.conf" % distribution.translate(file_name_sanitizer)) loader_path = os.path.join( - install_path, "boot", "loader", "loader.conf") + install_efi_directory, "loader", "loader.conf") partitions = libcalamares.globalstorage.value("partitions") for partition in partitions: - if partition["mountPoint"] == "/boot": + if partition["mountPoint"] == efi_directory: print(partition["device"]) boot_device = partition["device"] boot_p = boot_device[-1:] @@ -136,7 +138,7 @@ def install_bootloader(boot_loader, fw_type): print(device) subprocess.call(["sgdisk", "--typecode=%s:EF00" % boot_p, "%s" % device]) subprocess.call( - ["gummiboot", "--path=%s/boot" % install_path, "install"]) + ["gummiboot", "--path=%s" % install_efi_directory, "install"]) create_conf(uuid, conf_path) create_fallback(uuid, fallback_path) create_loader(loader_path) diff --git a/src/modules/grub/main.py b/src/modules/grub/main.py index 06c66e1d7..4853f0033 100644 --- a/src/modules/grub/main.py +++ b/src/modules/grub/main.py @@ -26,8 +26,8 @@ from libcalamares.utils import check_chroot_call def install_grub(boot_loader, fw_type): if fw_type == 'efi': - efi_directory = "/boot" - efi_directory_firmware = "/boot/EFI" + efi_directory = libcalamares.globalstorage.value("efiSystemPartition") + efi_directory_firmware = efi_directory + "/EFI" check_chroot_call(["mkdir", "-p", "{!s}".format(efi_directory)]) if "efiBootloaderId" in libcalamares.job.configuration: efi_bootloader_id = libcalamares.job.configuration["efiBootloaderId"] diff --git a/src/modules/partition/gui/EraseDiskPage.cpp b/src/modules/partition/gui/EraseDiskPage.cpp index 31c696aa3..2d0f83239 100644 --- a/src/modules/partition/gui/EraseDiskPage.cpp +++ b/src/modules/partition/gui/EraseDiskPage.cpp @@ -30,6 +30,8 @@ #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" +#include "GlobalStorage.h" +#include "JobQueue.h" #include #include @@ -160,7 +162,10 @@ EraseDiskPage::doAutopartition( Device* dev ) first_free_sector, lastSector ); - PartitionInfo::setMountPoint( efiPartition, "/boot" ); + PartitionInfo::setMountPoint( efiPartition, Calamares::JobQueue::instance() + ->globalStorage() + ->value( "efiSystemPartition" ) + .toString() ); PartitionInfo::setFormat( efiPartition, true ); m_core->createPartition( dev, efiPartition ); first_free_sector = lastSector + 1; diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index 26241b902..a5a449cc3 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -300,6 +300,25 @@ PartitionViewStep::onLeave() } +void +PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ + // Copy the efiSystemPartition setting to the global storage. It is needed not only in + // the EraseDiskPage, but also in the bootloader configuration modules (grub, bootloader). + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( configurationMap.contains( "efiSystemPartition" ) && + configurationMap.value( "efiSystemPartition" ).type() == QVariant::String && + !configurationMap.value( "efiSystemPartition" ).toString().isEmpty() ) + { + gs->insert( "efiSystemPartition", configurationMap.value( "efiSystemPartition" ).toString() ); + } + else + { + gs->insert( "efiSystemPartition", QStringLiteral( "/boot/efi" ) ); + } +} + + QList< Calamares::job_ptr > PartitionViewStep::jobs() const { diff --git a/src/modules/partition/gui/PartitionViewStep.h b/src/modules/partition/gui/PartitionViewStep.h index 38a06887b..31c9407ca 100644 --- a/src/modules/partition/gui/PartitionViewStep.h +++ b/src/modules/partition/gui/PartitionViewStep.h @@ -63,6 +63,8 @@ public: void onLeave() override; + void setConfigurationMap( const QVariantMap& configurationMap ) override; + QList< Calamares::job_ptr > jobs() const override; private: diff --git a/src/modules/partition/partition.conf b/src/modules/partition/partition.conf new file mode 100644 index 000000000..84da2bdd4 --- /dev/null +++ b/src/modules/partition/partition.conf @@ -0,0 +1,4 @@ +# This setting specifies the mount point of the EFI system partition. Some +# distributions (Fedora, Debian, etc.) use /boot/efi, others (KaOS, Manjaro, +# etc.) use just /boot. +efiSystemPartition: "/boot/efi"