diff --git a/src/modules/fstab/main.py b/src/modules/fstab/main.py index 4a696f46b..c58e8eb11 100644 --- a/src/modules/fstab/main.py +++ b/src/modules/fstab/main.py @@ -218,7 +218,6 @@ class FstabGenerator(object): else: dct = self.generate_fstab_line_info(partition) - if dct: self.print_fstab_line(dct, file=fstab_file) @@ -233,19 +232,30 @@ class FstabGenerator(object): self.print_fstab_line(dct, file=fstab_file) def generate_fstab_line_info(self, partition): - """ Generates information for each fstab entry. """ + """ + Generates information (a dictionary of fstab-fields) + for the given @p partition. + """ + # Some "fs" names need special handling in /etc/fstab, so remap them. filesystem = partition["fs"].lower() + filesystem = FS_MAP.get(filesystem, filesystem) has_luks = "luksMapperName" in partition mount_point = partition["mountPoint"] disk_name = disk_name_for_partition(partition) is_ssd = disk_name in self.ssd_disks - filesystem = FS_MAP.get(filesystem, filesystem) + # Swap partitions are called "linuxswap" by parted. + # That "fs" is visible in GS, but that gets mapped + # to "swap", above, because that's the spelling needed in /etc/fstab if not mount_point and not filesystem == "swap": return None if not mount_point: mount_point = "swap" + if filesystem == "swap" and not partition.get("claimed", None): + libcalamares.utils.debug("Ignoring foreign swap {!s} {!s}".format(disk_name, partition.get("uuid", None))) + return None + options = self.get_mount_options(filesystem, mount_point) if is_ssd: diff --git a/src/modules/grubcfg/main.py b/src/modules/grubcfg/main.py index 5d9428eeb..0df255e75 100644 --- a/src/modules/grubcfg/main.py +++ b/src/modules/grubcfg/main.py @@ -80,6 +80,9 @@ def modify_grub_default(partitions, root_mount_point, distributor): if have_dracut: for partition in partitions: + if partition["fs"] == "linuxswap" and not partition.get("claimed", None): + # Skip foreign swap + continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] @@ -94,6 +97,9 @@ def modify_grub_default(partitions, root_mount_point, distributor): ] else: for partition in partitions: + if partition["fs"] == "linuxswap" and not partition.get("claimed", None): + # Skip foreign swap + continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index 7faf67863..38a52249f 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -224,10 +224,10 @@ public: */ QList< SummaryInfo > createSummaryInfo() const; - void dumpQueue() const; // debug output - const OsproberEntryList osproberEntries() const; // os-prober data structure, cached + void dumpQueue() const; // debug output + Q_SIGNALS: void hasRootMountPointChanged( bool value ); void isDirtyChanged( bool value ); diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index 12faaf969..c909ba913 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -100,14 +100,18 @@ mapForPartition( Partition* partition, const QString& uuid ) map[ "fs" ] = untranslatedFS( dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ); } map[ "uuid" ] = uuid; + map[ "claimed" ] = PartitionInfo::format( partition ); // If we formatted it, it's ours // Debugging for inside the loop in createPartitionList(), // so indent a bit Logger::CDebug deb; using TR = Logger::DebugRow< const char* const, const QString& >; deb << Logger::SubEntry << "mapping for" << partition->partitionPath() << partition->deviceNode() - << TR( "mtpoint:", PartitionInfo::mountPoint( partition ) ) << TR( "fs:", map[ "fs" ].toString() ) - << TR( "fsName", map[ "fsName" ].toString() ) << TR( "uuid", uuid ); + << TR( "mtpoint:", PartitionInfo::mountPoint( partition ) ) + << TR( "fs:", map[ "fs" ].toString() ) + << TR( "fsName", map[ "fsName" ].toString() ) + << TR( "uuid", uuid ) + << TR( "claimed", map[ "claimed" ].toString() ); if ( partition->roles().has( PartitionRole::Luks ) ) { @@ -213,6 +217,7 @@ FillGlobalStorageJob::exec() { Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); storage->insert( "partitions", createPartitionList() ); + cDebug() << "Saving partition information map to GlobalStorage[\"partitions\"]"; if ( !m_bootLoaderPath.isEmpty() ) { QVariant var = createBootLoaderMap(); @@ -236,7 +241,7 @@ FillGlobalStorageJob::createPartitionList() const { UuidForPartitionHash hash = findPartitionUuids( m_devices ); QVariantList lst; - cDebug() << "Writing to GlobalStorage[\"partitions\"]"; + cDebug() << "Building partition information map"; for ( auto device : m_devices ) { cDebug() << Logger::SubEntry << "partitions on" << device->deviceNode();