[partition] Mark /boot or / as bootable

FIXES #1175
main
Adriaan de Groot 5 years ago
parent 0c6dd4e788
commit b08cb52d0a

@ -910,9 +910,23 @@ PartitionCoreModule::layoutApply( Device* dev,
bool isEfi = PartUtils::isEfiSystem();
QList< Partition* > partList = m_partLayout->execute( dev, firstSector, lastSector, luksPassphrase, parent, role );
foreach ( Partition* part, partList )
// Partition::mountPoint() tells us where it is mounted **now**, while
// PartitionInfo::mountPoint() says where it will be mounted in the target system.
// .. the latter is more interesting.
//
// If we have a separate /boot, mark that one as bootable, otherwise mark
// the root / as bootable.
//
// TODO: perhaps the partition that holds the bootloader?
const QString boot = QStringLiteral( "/boot" );
const QString root = QStringLiteral( "/" );
const auto is_boot = [&](Partition*p) -> bool {return PartitionInfo::mountPoint(p) == boot || p->mountPoint() == boot;};
const auto is_root = [&](Partition*p) -> bool {return PartitionInfo::mountPoint(p) == root || p->mountPoint() == root;};
const bool separate_boot_partition = std::find_if(partList.constBegin(), partList.constEnd(), is_boot) != partList.constEnd();
for( Partition* part : partList )
{
if ( part->mountPoint() == "/" )
if ( ( separate_boot_partition && is_boot(part)) || (!separate_boot_partition && is_root(part)))
{
createPartition(
dev, part, part->activeFlags() | ( isEfi ? KPM_PARTITION_FLAG( None ) : KPM_PARTITION_FLAG( Boot ) ) );

Loading…
Cancel
Save