From ca037af6ca91733e1cd5804be6e05db5bcf637b7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 30 Sep 2017 16:48:37 +0200 Subject: [PATCH 01/20] KPMCore: update required version to 3.2 - drop extra checks for blkid and atasmart, those are kpmcore's concern, not ours (and it might have other backends, anyway) --- src/modules/partition/CMakeLists.txt | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 1ea69c027..8509ec25d 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -8,20 +8,7 @@ find_package( KF5 REQUIRED CoreAddons ) # These are needed because KPMcore links publicly against ConfigCore, I18n, IconThemes, KIOCore and Service find_package( KF5 REQUIRED Config I18n IconThemes KIO Service ) -find_package( KPMcore 3.1.50 QUIET ) -if ( ${KPMcore_FOUND} ) - add_definitions(-DWITH_KPMCORE22) -endif() -find_package( KPMcore 3.0.3 REQUIRED ) -find_library( atasmart_LIB atasmart ) -find_library( blkid_LIB blkid ) -if( NOT atasmart_LIB ) - message( WARNING "atasmart library not found." ) -endif() -if( NOT blkid_LIB ) - message( WARNING "blkid library not found." ) -endif() - +find_package( KPMcore 3.2 REQUIRED ) include_directories( ${KPMCORE_INCLUDE_DIR} ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) From 96c3f7def35d338b9eb66eff02efdae27569291c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 30 Sep 2017 16:50:02 +0200 Subject: [PATCH 02/20] KPMCore: drop conditional code --- src/modules/partition/core/KPMHelpers.cpp | 6 ------ src/modules/partition/tests/PartitionJobTests.cpp | 2 -- 2 files changed, 8 deletions(-) diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index 6ed167eee..9f97d5e8c 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -116,9 +116,7 @@ createNewPartition( PartitionNode* parent, PartitionTable::Flags flags ) { FileSystem* fs = FileSystemFactory::create( fsType, firstSector, lastSector -#ifdef WITH_KPMCORE22 ,device.logicalSize() -#endif ); return new Partition( parent, @@ -153,9 +151,7 @@ createNewEncryptedPartition( PartitionNode* parent, FileSystemFactory::create( FileSystem::Luks, firstSector, lastSector -#ifdef WITH_KPMCORE22 ,device.logicalSize() -#endif ) ); if ( !fs ) { @@ -186,9 +182,7 @@ clonePartition( Device* device, Partition* partition ) partition->fileSystem().type(), partition->firstSector(), partition->lastSector() -#ifdef WITH_KPMCORE22 ,device->logicalSize() -#endif ); return new Partition( partition->parent(), *device, diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index 8702e0119..bd6962a85 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -219,9 +219,7 @@ PartitionJobTests::newCreatePartitionJob( Partition* freeSpacePartition, Partiti else lastSector = freeSpacePartition->lastSector(); FileSystem* fs = FileSystemFactory::create( type, firstSector, lastSector -#ifdef WITH_KPMCORE22 ,m_device->logicalSize() -#endif ); Partition* partition = new Partition( From ff2947060d59a069529fd37c81326b10930f4915 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 30 Sep 2017 17:04:35 +0200 Subject: [PATCH 03/20] KPMCore: use the translation system for filesystem names from KPMCore --- .../partition/jobs/FillGlobalStorageJob.cpp | 46 +------------------ 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index 443eb8b9e..1866ce96e 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -77,50 +77,6 @@ getLuksUuid( const QString& path ) return uuid; } -// TODO: this will be available from KPMCore soon -static const char* filesystem_labels[] = { - "unknown", - "extended", - - "ext2", - "ext3", - "ext4", - "linuxswap", - "fat16", - "fat32", - "ntfs", - "reiser", - "reiser4", - "xfs", - "jfs", - "hfs", - "hfsplus", - "ufs", - "unformatted", - "btrfs", - "hpfs", - "luks", - "ocfs2", - "zfs", - "exfat", - "nilfs2", - "lvm2 pv", - "f2fs", - "udf", - "iso9660", -}; - -Q_STATIC_ASSERT_X((sizeof(filesystem_labels) / sizeof(char *)) >= FileSystem::__lastType, "Mismatch in filesystem labels"); - -static QString -untranslatedTypeName(FileSystem::Type t) -{ - - Q_ASSERT( t >= 0 ); - Q_ASSERT( t <= FileSystem::__lastType ); - - return QLatin1String(filesystem_labels[t]); -} static QVariant mapForPartition( Partition* partition, const QString& uuid ) @@ -129,7 +85,7 @@ mapForPartition( Partition* partition, const QString& uuid ) map[ "device" ] = partition->partitionPath(); map[ "mountPoint" ] = PartitionInfo::mountPoint( partition ); map[ "fsName" ] = partition->fileSystem().name(); - map[ "fs" ] = untranslatedTypeName( partition->fileSystem().type() ); + map[ "fs" ] = partition->fileSystem().name( QStringLiteral("C") ); // Untranslated if ( partition->fileSystem().type() == FileSystem::Luks && dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ) map[ "fs" ] = dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS()->name(); From 9f05c236d8813837bda4b4e71cf6710c8bdc833b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 30 Sep 2017 16:27:07 +0100 Subject: [PATCH 04/20] KPMcore: Pass QStringList to fs->name() instead of QString. --- src/modules/partition/jobs/FillGlobalStorageJob.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index 1866ce96e..a3d709b5b 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -85,7 +85,7 @@ mapForPartition( Partition* partition, const QString& uuid ) map[ "device" ] = partition->partitionPath(); map[ "mountPoint" ] = PartitionInfo::mountPoint( partition ); map[ "fsName" ] = partition->fileSystem().name(); - map[ "fs" ] = partition->fileSystem().name( QStringLiteral("C") ); // Untranslated + map[ "fs" ] = partition->fileSystem().name( { QStringLiteral("C") } ); // Untranslated if ( partition->fileSystem().type() == FileSystem::Luks && dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ) map[ "fs" ] = dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS()->name(); From 68e940f0bf8049f9d8c763499da2fb67b7501a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 30 Sep 2017 17:08:38 +0100 Subject: [PATCH 05/20] Remove unnecessary KIO and KIconThemes dependencies. --- CMakeModules/IncludeKPMCore.cmake | 4 ++-- Dockerfile | 2 +- README.md | 4 ++-- src/modules/partition/CMakeLists.txt | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeModules/IncludeKPMCore.cmake b/CMakeModules/IncludeKPMCore.cmake index b06299d91..4b4b8b3f2 100644 --- a/CMakeModules/IncludeKPMCore.cmake +++ b/CMakeModules/IncludeKPMCore.cmake @@ -12,6 +12,6 @@ set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) include(KDEInstallDirs) include(GenerateExportHeader) find_package( KF5 REQUIRED CoreAddons ) -find_package( KF5 REQUIRED Config I18n IconThemes KIO Service ) +find_package( KF5 REQUIRED Config I18n Service WidgetsAddons ) -find_package( KPMcore 3.0.3 REQUIRED ) +find_package( KPMcore 3.2 REQUIRED ) diff --git a/Dockerfile b/Dockerfile index cd0e4f365..d6ca0926d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,2 +1,2 @@ FROM kdeneon/all -RUN sudo apt-get update && sudo apt-get -y install build-essential cmake extra-cmake-modules gettext kio-dev libatasmart-dev libboost-python-dev libkf5config-dev libkf5coreaddons-dev libkf5i18n-dev libkf5iconthemes-dev libkf5parts-dev libkf5service-dev libkf5solid-dev libkpmcore-dev libparted-dev libpolkit-qt5-1-dev libqt5svg5-dev libqt5webkit5-dev libyaml-cpp-dev os-prober pkg-config python3-dev qtbase5-dev qtdeclarative5-dev qttools5-dev qttools5-dev-tools +RUN sudo apt-get update && sudo apt-get -y install build-essential cmake extra-cmake-modules gettext libatasmart-dev libboost-python-dev libkf5config-dev libkf5coreaddons-dev libkf5i18n-dev libkf5parts-dev libkf5service-dev libkf5widgetsaddons-dev libkpmcore-dev libparted-dev libpolkit-qt5-1-dev libqt5svg5-dev libqt5webkit5-dev libyaml-cpp-dev os-prober pkg-config python3-dev qtbase5-dev qtdeclarative5-dev qttools5-dev qttools5-dev-tools diff --git a/README.md b/README.md index dcb5e3b67..2304c2d8e 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,8 @@ Modules: * UPower * partition: * extra-cmake-modules - * KF5: KCoreAddons, KConfig, KI18n, KIconThemes, KIO, KService - * KPMcore >= 3.0.3 + * KF5: KCoreAddons, KConfig, KI18n, KService, KWidgetsAddons + * KPMcore >= 3.2 * bootloader: * systemd-boot or GRUB * unpackfs: diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 8509ec25d..cc3680c62 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -5,8 +5,9 @@ include(KDEInstallDirs) include(GenerateExportHeader) find_package( KF5 REQUIRED CoreAddons ) -# These are needed because KPMcore links publicly against ConfigCore, I18n, IconThemes, KIOCore and Service -find_package( KF5 REQUIRED Config I18n IconThemes KIO Service ) +# These are needed because KPMcore links publicly against ConfigCore, I18n, WidgetsAddons and Service +find_package( Qt5 REQUIRED DBus ) +find_package( KF5 REQUIRED Config I18n WidgetsAddons Service ) find_package( KPMcore 3.2 REQUIRED ) From 3f739563ef83e410f70a6d9346e7bc9127e10379 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 4 Oct 2017 08:46:12 -0400 Subject: [PATCH 06/20] Drop KService requirements (it's still there in InteractiveTerminal) --- src/modules/partition/CMakeLists.txt | 5 +---- src/modules/partition/tests/CMakeLists.txt | 2 -- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index cc3680c62..8974fef9b 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -3,11 +3,8 @@ set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) include(KDEInstallDirs) include(GenerateExportHeader) -find_package( KF5 REQUIRED CoreAddons ) - -# These are needed because KPMcore links publicly against ConfigCore, I18n, WidgetsAddons and Service find_package( Qt5 REQUIRED DBus ) -find_package( KF5 REQUIRED Config I18n WidgetsAddons Service ) +find_package( KF5 REQUIRED Config CoreAddons I18n WidgetsAddons ) find_package( KPMcore 3.2 REQUIRED ) diff --git a/src/modules/partition/tests/CMakeLists.txt b/src/modules/partition/tests/CMakeLists.txt index 1917a226b..80f65091d 100644 --- a/src/modules/partition/tests/CMakeLists.txt +++ b/src/modules/partition/tests/CMakeLists.txt @@ -1,5 +1,4 @@ find_package( Qt5 COMPONENTS Gui Test REQUIRED ) -find_package( KF5 COMPONENTS Service REQUIRED ) include( ECMAddTests ) @@ -33,7 +32,6 @@ ecm_add_test( ${partitionjobtests_SRCS} kpmcore Qt5::Core Qt5::Test - KF5::Service ) set_target_properties( partitionjobtests PROPERTIES AUTOMOC TRUE ) From 4912d8a6c2e51311b69b6e51f998603aaff9d0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 7 Oct 2017 00:42:07 +0100 Subject: [PATCH 07/20] Fix create partition job to work with LVM devices. --- .../partition/gui/CreatePartitionDialog.cpp | 19 +++ .../partition/gui/CreatePartitionDialog.ui | 20 ++- .../partition/jobs/CreatePartitionJob.cpp | 120 +++++++++++------- 3 files changed, 105 insertions(+), 54 deletions(-) diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index 90cf92051..7d32b7d33 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -43,6 +43,8 @@ #include #include #include +#include +#include #include static QSet< FileSystem::Type > s_unmountableFS( @@ -66,6 +68,19 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par m_ui->encryptWidget->setText( tr( "En&crypt" ) ); m_ui->encryptWidget->hide(); + if (m_device->type() == Device::Disk_Device) { + m_ui->lvNameLabel->hide(); + m_ui->lvNameLineEdit->hide(); + } + if (m_device->type() == Device::LVM_Device) { + /* LVM logical volume name can consist of: letters numbers _ . - + + * It cannot start with underscore _ and must not be equal to . or .. or any entry in /dev/ + * QLineEdit accepts QValidator::Intermediate, so we just disable . at the beginning */ + QRegularExpression re(QStringLiteral(R"(^(?!_|\.)[\w\-.+]+)")); + QRegularExpressionValidator *validator = new QRegularExpressionValidator(re, this); + m_ui->lvNameLineEdit->setValidator(validator); + } + QStringList mountPoints = { "/", "/boot", "/home", "/opt", "/usr", "/var" }; if ( PartUtils::isEfiSystem() ) mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); @@ -227,6 +242,10 @@ CreatePartitionDialog::createPartition() ); } + if (m_device->type() == Device::LVM_Device) { + partition->setPartitionPath(m_device->deviceNode() + QStringLiteral("/") + m_ui->lvNameLineEdit->text().trimmed()); + } + PartitionInfo::setMountPoint( partition, m_ui->mountPointComboBox->currentText() ); PartitionInfo::setFormat( partition, true ); diff --git a/src/modules/partition/gui/CreatePartitionDialog.ui b/src/modules/partition/gui/CreatePartitionDialog.ui index ba457b29c..ac355c880 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.ui +++ b/src/modules/partition/gui/CreatePartitionDialog.ui @@ -146,6 +146,16 @@ + + + LVM LV name + + + + + + + &Mount Point: @@ -155,7 +165,7 @@ - + true @@ -165,21 +175,21 @@ - + - + Flags: - + true @@ -192,7 +202,7 @@ - + Qt::Vertical diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index aab032a87..562202e30 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -78,51 +79,81 @@ CreatePartitionJob::prettyStatusMessage() const Calamares::JobResult CreatePartitionJob::exec() { - int step = 0; - const qreal stepCount = 4; - + QString partitionPath; + FileSystem *fs; Report report( nullptr ); - QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); - progress( step++ / stepCount ); - CoreBackend* backend = CoreBackendManager::self()->backend(); - QScopedPointer backendDevice( backend->openDevice( m_device->deviceNode() ) ); - if ( !backendDevice.data() ) + if (m_device->type() == Device::Disk_Device) { + int step = 0; + const qreal stepCount = 4; + QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); + + progress( step++ / stepCount ); + CoreBackend* backend = CoreBackendManager::self()->backend(); + QScopedPointer backendDevice( backend->openDevice( m_device->deviceNode() ) ); + if ( !backendDevice.data() ) + { + return Calamares::JobResult::error( + message, + tr( "Could not open device '%1'." ).arg( m_device->deviceNode() ) + ); + } + + progress( step++ / stepCount ); + QScopedPointer backendPartitionTable( backendDevice->openPartitionTable() ); + if ( !backendPartitionTable.data() ) + { + return Calamares::JobResult::error( + message, + tr( "Could not open partition table." ) + ); + } + + progress( step++ / stepCount ); + partitionPath = backendPartitionTable->createPartition( report, *m_partition ); + if ( partitionPath.isEmpty() ) + { + return Calamares::JobResult::error( + message, + report.toText() + ); + } + m_partition->setPartitionPath( partitionPath ); + backendPartitionTable->commit(); + + progress( step++ / stepCount ); + fs = &m_partition->fileSystem(); + if ( fs->type() == FileSystem::Unformatted || fs->type() == FileSystem::Extended ) + return Calamares::JobResult::ok(); + + if ( !backendPartitionTable->setPartitionSystemType( report, *m_partition ) ) + { + return Calamares::JobResult::error( + tr( "The installer failed to update partition table on disk '%1'." ).arg( m_device->name() ), + report.toText() + ); + } + + backendPartitionTable->commit(); + } + else { - return Calamares::JobResult::error( - message, - tr( "Could not open device '%1'." ).arg( m_device->deviceNode() ) - ); + LvmDevice *dev = dynamic_cast(m_device); + m_partition->setState(Partition::StateNone); + + partitionPath = m_partition->partitionPath(); + QString lvname = partitionPath.right(partitionPath.length() - partitionPath.lastIndexOf(QStringLiteral("/")) - 1); + if ( !LvmDevice::createLV(report, *dev, *m_partition, lvname)) + { + return Calamares::JobResult::error( + tr( "The installer failed to create LVM logical volume %1." ).arg( lvname ), + report.toText() + ); + } + fs = &m_partition->fileSystem(); } - progress( step++ / stepCount ); - QScopedPointer backendPartitionTable( backendDevice->openPartitionTable() ); - if ( !backendPartitionTable.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open partition table." ) - ); - } - - progress( step++ / stepCount ); - QString partitionPath = backendPartitionTable->createPartition( report, *m_partition ); - if ( partitionPath.isEmpty() ) - { - return Calamares::JobResult::error( - message, - report.toText() - ); - } - m_partition->setPartitionPath( partitionPath ); - backendPartitionTable->commit(); - - progress( step++ / stepCount ); - FileSystem& fs = m_partition->fileSystem(); - if ( fs.type() == FileSystem::Unformatted || fs.type() == FileSystem::Extended ) - return Calamares::JobResult::ok(); - - if ( !fs.create( report, partitionPath ) ) + if ( !fs->create( report, partitionPath ) ) { return Calamares::JobResult::error( tr( "The installer failed to create file system on partition %1." ).arg( partitionPath ), @@ -130,15 +161,6 @@ CreatePartitionJob::exec() ); } - if ( !backendPartitionTable->setPartitionSystemType( report, *m_partition ) ) - { - return Calamares::JobResult::error( - tr( "The installer failed to update partition table on disk '%1'." ).arg( m_device->name() ), - report.toText() - ); - } - - backendPartitionTable->commit(); return Calamares::JobResult::ok(); } From 70573543f24c37807e4207d9d07a4154890ea141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 12 Oct 2017 18:54:43 +0100 Subject: [PATCH 08/20] Use KPMcore NewOperation to create partitions. --- .../partition/jobs/CreatePartitionJob.cpp | 87 ++----------------- 1 file changed, 7 insertions(+), 80 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index 562202e30..efefcae86 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include // Qt @@ -79,89 +80,15 @@ CreatePartitionJob::prettyStatusMessage() const Calamares::JobResult CreatePartitionJob::exec() { - QString partitionPath; - FileSystem *fs; Report report( nullptr ); + NewOperation op(*m_device, m_partition); + op.setStatus(Operation::StatusRunning); - if (m_device->type() == Device::Disk_Device) { - int step = 0; - const qreal stepCount = 4; - QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); + QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); + if (op.execute(report)) + return Calamares::JobResult::ok(); - progress( step++ / stepCount ); - CoreBackend* backend = CoreBackendManager::self()->backend(); - QScopedPointer backendDevice( backend->openDevice( m_device->deviceNode() ) ); - if ( !backendDevice.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open device '%1'." ).arg( m_device->deviceNode() ) - ); - } - - progress( step++ / stepCount ); - QScopedPointer backendPartitionTable( backendDevice->openPartitionTable() ); - if ( !backendPartitionTable.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open partition table." ) - ); - } - - progress( step++ / stepCount ); - partitionPath = backendPartitionTable->createPartition( report, *m_partition ); - if ( partitionPath.isEmpty() ) - { - return Calamares::JobResult::error( - message, - report.toText() - ); - } - m_partition->setPartitionPath( partitionPath ); - backendPartitionTable->commit(); - - progress( step++ / stepCount ); - fs = &m_partition->fileSystem(); - if ( fs->type() == FileSystem::Unformatted || fs->type() == FileSystem::Extended ) - return Calamares::JobResult::ok(); - - if ( !backendPartitionTable->setPartitionSystemType( report, *m_partition ) ) - { - return Calamares::JobResult::error( - tr( "The installer failed to update partition table on disk '%1'." ).arg( m_device->name() ), - report.toText() - ); - } - - backendPartitionTable->commit(); - } - else - { - LvmDevice *dev = dynamic_cast(m_device); - m_partition->setState(Partition::StateNone); - - partitionPath = m_partition->partitionPath(); - QString lvname = partitionPath.right(partitionPath.length() - partitionPath.lastIndexOf(QStringLiteral("/")) - 1); - if ( !LvmDevice::createLV(report, *dev, *m_partition, lvname)) - { - return Calamares::JobResult::error( - tr( "The installer failed to create LVM logical volume %1." ).arg( lvname ), - report.toText() - ); - } - fs = &m_partition->fileSystem(); - } - - if ( !fs->create( report, partitionPath ) ) - { - return Calamares::JobResult::error( - tr( "The installer failed to create file system on partition %1." ).arg( partitionPath ), - report.toText() - ); - } - - return Calamares::JobResult::ok(); + return Calamares::JobResult::error(message, report.toText()); } void From ceba157459f6515dac47f6fb27a2687624e1e735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 12 Oct 2017 18:59:11 +0100 Subject: [PATCH 09/20] Use KPMcore DeleteOperation to delete partitions. --- .../partition/jobs/DeletePartitionJob.cpp | 47 +++---------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index bceffd133..1bed8739f 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include DeletePartitionJob::DeletePartitionJob( Device* device, Partition* partition ) @@ -65,48 +66,14 @@ Calamares::JobResult DeletePartitionJob::exec() { Report report( nullptr ); + DeleteOperation op(*m_device, m_partition); + op.setStatus(Operation::StatusRunning); + QString message = tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ); + if (op.execute(report)) + return Calamares::JobResult::ok(); - if ( m_device->deviceNode() != m_partition->devicePath() ) - { - return Calamares::JobResult::error( - message, - tr( "Partition (%1) and device (%2) do not match." ) - .arg( m_partition->devicePath() ) - .arg( m_device->deviceNode() ) - ); - } - - CoreBackend* backend = CoreBackendManager::self()->backend(); - QScopedPointer backendDevice( backend->openDevice( m_device->deviceNode() ) ); - if ( !backendDevice.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open device %1." ).arg( m_device->deviceNode() ) - ); - } - - QScopedPointer backendPartitionTable( backendDevice->openPartitionTable() ); - if ( !backendPartitionTable.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open partition table." ) - ); - } - - bool ok = backendPartitionTable->deletePartition( report, *m_partition ); - if ( !ok ) - { - return Calamares::JobResult::error( - message, - report.toText() - ); - } - - backendPartitionTable->commit(); - return Calamares::JobResult::ok(); + return Calamares::JobResult::error(message, report.toText()); } void From 652ffaedd5a9259bc767e0080a41f8799212d6dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 11 Nov 2017 21:34:10 +0000 Subject: [PATCH 10/20] Remove unnecessary kpmcore includes. --- src/modules/partition/jobs/CreatePartitionJob.cpp | 5 ----- src/modules/partition/jobs/CreatePartitionTableJob.cpp | 1 - src/modules/partition/jobs/FormatPartitionJob.cpp | 1 - 3 files changed, 7 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index efefcae86..3b16df2fc 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -24,11 +24,6 @@ #include "utils/Units.h" // KPMcore -#include -#include -#include -#include -#include #include #include #include diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index e4430134f..5d2df6bc9 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index 162839ce7..bc13946c6 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include From 2a785bdf8954003ff502edfb3bfb25c0d831fb4e Mon Sep 17 00:00:00 2001 From: Chantara Tith Date: Mon, 5 Sep 2016 16:05:16 +0700 Subject: [PATCH 11/20] Disable newPartitionTableButton for LVM device. --- src/modules/partition/gui/PartitionPage.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 62e7a97a1..88b03ec72 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -119,7 +119,7 @@ PartitionPage::~PartitionPage() void PartitionPage::updateButtons() { - bool create = false, edit = false, del = false; + bool create = false, createTable = false, edit = false, del = false; QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( index.isValid() ) @@ -141,11 +141,18 @@ PartitionPage::updateButtons() edit = !isFree && !isExtended; del = !isFree; } + + if ( m_ui->deviceComboBox->currentIndex() >= 0 ) + { + QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); + if ( m_core->deviceModel()->deviceForIndex( deviceIndex )->type() != Device::LVM_Device ) + createTable = true; + } + m_ui->createButton->setEnabled( create ); m_ui->editButton->setEnabled( edit ); m_ui->deleteButton->setEnabled( del ); - - m_ui->newPartitionTableButton->setEnabled( m_ui->deviceComboBox->currentIndex() >= 0 ); + m_ui->newPartitionTableButton->setEnabled( createTable ); } void From a2e3af2b3db1bda40fa36fe833b0107907090c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 15 Dec 2017 11:37:02 +0000 Subject: [PATCH 12/20] Require KPMcore 3.3 --- src/modules/partition/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 61508c567..1ed986836 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -6,7 +6,7 @@ include(GenerateExportHeader) find_package( Qt5 REQUIRED DBus ) find_package( KF5 REQUIRED Config CoreAddons I18n WidgetsAddons ) -find_package( KPMcore 3.2 REQUIRED ) +find_package( KPMcore 3.3 REQUIRED ) include_directories( ${KPMCORE_INCLUDE_DIR} ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) From 7ce52ecda72c18194ba3449588358a788b5710e6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 22 Dec 2017 16:20:35 +0100 Subject: [PATCH 13/20] [partition] Rename slots, to avoid recursion --- src/modules/partition/jobs/PartitionJob.cpp | 2 +- src/modules/partition/jobs/PartitionJob.h | 2 +- src/modules/partition/jobs/ResizePartitionJob.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/partition/jobs/PartitionJob.cpp b/src/modules/partition/jobs/PartitionJob.cpp index 2de93ac47..02aa1d6d6 100644 --- a/src/modules/partition/jobs/PartitionJob.cpp +++ b/src/modules/partition/jobs/PartitionJob.cpp @@ -22,7 +22,7 @@ PartitionJob::PartitionJob( Partition* partition ) : m_partition( partition ) {} -void PartitionJob::progress(int percent) +void PartitionJob::iprogress(int percent) { if ( percent < 0 ) percent = 0; diff --git a/src/modules/partition/jobs/PartitionJob.h b/src/modules/partition/jobs/PartitionJob.h index cf773d60e..8cbd8d0c4 100644 --- a/src/modules/partition/jobs/PartitionJob.h +++ b/src/modules/partition/jobs/PartitionJob.h @@ -43,7 +43,7 @@ public slots: * KPMCore presents progress as an integer percent from 0 .. 100, * while Calamares uses a qreal from 0 .. 1.00 . */ - void progress( int percent ); + void iprogress( int percent ); protected: Partition* m_partition; diff --git a/src/modules/partition/jobs/ResizePartitionJob.cpp b/src/modules/partition/jobs/ResizePartitionJob.cpp index 340a19acd..3b7588ded 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.cpp +++ b/src/modules/partition/jobs/ResizePartitionJob.cpp @@ -80,7 +80,7 @@ ResizePartitionJob::exec() m_partition->setLastSector( m_oldLastSector ); ResizeOperation op(*m_device, *m_partition, m_newFirstSector, m_newLastSector); op.setStatus(Operation::StatusRunning); - connect(&op, &Operation::progress, this, &ResizePartitionJob::progress ); + connect(&op, &Operation::progress, this, &ResizePartitionJob::iprogress ); QString errorMessage = tr( "The installer failed to resize partition %1 on disk '%2'." ) .arg( m_partition->partitionPath() ) From 638117efa0f58cf37f12f9294b1b798a49c81713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 15 Dec 2017 12:37:55 +0000 Subject: [PATCH 14/20] Cleanup unnecessary kpmcore includes. --- .../partition/jobs/DeletePartitionJob.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index 1bed8739f..61743ed74 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -21,16 +21,12 @@ #include "jobs/DeletePartitionJob.h" // KPMcore -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include DeletePartitionJob::DeletePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) From 1b3ce39ffb93f6d355c5be9fd7ae44cc4ffff280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 19 Dec 2017 18:27:49 +0000 Subject: [PATCH 15/20] Convert FormatPartitionJob to KPMcore's CreateFileSystemOperation. --- .../partition/jobs/FormatPartitionJob.cpp | 76 +++---------------- 1 file changed, 12 insertions(+), 64 deletions(-) diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index bc13946c6..76b806390 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -22,15 +22,12 @@ #include "utils/Logger.h" // KPMcore -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include // Qt #include @@ -78,62 +75,13 @@ Calamares::JobResult FormatPartitionJob::exec() { Report report( nullptr ); // Root of the report tree, no parent - QString partitionPath = m_partition->partitionPath(); - QString message = tr( "The installer failed to format partition %1 on disk '%2'." ).arg( partitionPath, m_device->name() ); + CreateFileSystemOperation op(*m_device, *m_partition, m_partition->fileSystem().type()); + op.setStatus(Operation::StatusRunning); - CoreBackend* backend = CoreBackendManager::self()->backend(); - QScopedPointer backendDevice( backend->openDevice( m_device->deviceNode() ) ); - if ( !backendDevice.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open device '%1'." ).arg( m_device->deviceNode() ) - ); - } + QString message = tr( "The installer failed to format partition %1 on disk '%2'." ).arg( m_partition->partitionPath(), m_device->name() ); - QScopedPointer backendPartitionTable( backendDevice->openPartitionTable() ); - if ( !backendPartitionTable.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open partition table." ) - ); - } + if (op.execute(report)) + return Calamares::JobResult::ok(); - FileSystem& fs = m_partition->fileSystem(); - - bool ok = fs.create( report, partitionPath ); - int retries = 0; - const int MAX_RETRIES = 10; - while ( !ok ) - { - cDebug() << "Partition" << m_partition->partitionPath() - << "might not be ready yet, retrying (" << ++retries - << "/" << MAX_RETRIES << ") ..."; - QThread::sleep( 2 /*seconds*/ ); - ok = fs.create( report, partitionPath ); - - if ( retries == MAX_RETRIES ) - break; - } - - if ( !ok ) - { - return Calamares::JobResult::error( - tr( "The installer failed to create file system on partition %1." ) - .arg( partitionPath ), - report.toText() - ); - } - - if ( !backendPartitionTable->setPartitionSystemType( report, *m_partition ) ) - { - return Calamares::JobResult::error( - tr( "The installer failed to update partition table on disk '%1'." ).arg( m_device->name() ), - report.toText() - ); - } - - backendPartitionTable->commit(); - return Calamares::JobResult::ok(); + return Calamares::JobResult::error(message, report.toText()); } From 806b84973aa3b364370fba223270a0a03ade6367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 22 Dec 2017 12:42:28 +0000 Subject: [PATCH 16/20] Convert CreatePartitionTableJob to KPMcore operation. --- .../jobs/CreatePartitionTableJob.cpp | 46 ++++++------------- .../partition/jobs/FillGlobalStorageJob.cpp | 10 ++-- 2 files changed, 18 insertions(+), 38 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index 5d2df6bc9..e2f2ec7a9 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -23,15 +23,12 @@ #include "utils/Logger.h" // KPMcore -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include // Qt #include @@ -75,17 +72,7 @@ CreatePartitionTableJob::exec() Report report( nullptr ); QString message = tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ); - CoreBackend* backend = CoreBackendManager::self()->backend(); - QScopedPointer< CoreBackendDevice > backendDevice( backend->openDevice( m_device->deviceNode() ) ); - if ( !backendDevice.data() ) - { - return Calamares::JobResult::error( - message, - tr( "Could not open device %1." ).arg( m_device->deviceNode() ) - ); - } - - QScopedPointer< PartitionTable > table( createTable() ); + PartitionTable* table( createTable() ); cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted yet:\n" << table; @@ -103,20 +90,13 @@ CreatePartitionTableJob::exec() mount.waitForFinished(); cDebug() << "mount:\n" << mount.readAllStandardOutput(); - bool ok = backendDevice->createPartitionTable( report, *table ); - if ( !ok ) - { - return Calamares::JobResult::error( - message, - QString( "Text: %1\nCommand: %2\nOutput: %3\nStatus: %4" ) - .arg( report.toText() ) - .arg( report.command() ) - .arg( report.output() ) - .arg( report.status() ) - ); - } + CreatePartitionTableOperation op(*m_device, table); + op.setStatus(Operation::StatusRunning); - return Calamares::JobResult::ok(); + if (op.execute(report)) + return Calamares::JobResult::ok(); + + return Calamares::JobResult::error(message, report.toText()); } void diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index a3d709b5b..a6c93a2c4 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -28,11 +28,11 @@ #include "Branding.h" #include "utils/Logger.h" -// CalaPM -#include -#include -#include -#include +// KPMcore +#include +#include +#include +#include // Qt #include From 8f32aad3fa03f93728ccc79ba65564e22e48bc99 Mon Sep 17 00:00:00 2001 From: Philip Date: Mon, 25 Dec 2017 15:48:55 -0500 Subject: [PATCH 17/20] [partition] Rename slots, to avoid recursion - see also https://github.com/calamares/calamares/issues/880 - missed within https://github.com/calamares/calamares/commit/7ce52ecda72c18194ba3449588358a788b5710e6 --- src/modules/partition/jobs/SetPartitionFlagsJob.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp index ecc8b2142..bcf7c8692 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp @@ -135,7 +135,7 @@ SetPartFlagsJob::exec() Report report ( nullptr ); SetPartFlagsOperation op( *m_device, *partition(), m_flags ); op.setStatus( Operation::StatusRunning ); - connect( &op, &Operation::progress, this, &SetPartFlagsJob::progress ); + connect( &op, &Operation::progress, this, &SetPartFlagsJob::iprogress ); QString errorMessage = tr( "The installer failed to set flags on partition %1." ) .arg( m_partition->partitionPath() ); From 2027a5538e2e16f6d942c57154ed337de8ac4889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Dec 2017 12:26:40 +0000 Subject: [PATCH 18/20] Fix propagation of new partition table to global storage. --- src/modules/partition/jobs/CreatePartitionJob.cpp | 3 --- src/modules/partition/jobs/CreatePartitionTableJob.cpp | 3 +-- src/modules/partition/jobs/FormatPartitionJob.cpp | 4 ---- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index 3b16df2fc..4e91a00bf 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -32,9 +32,6 @@ #include #include -// Qt -#include - CreatePartitionJob::CreatePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index e2f2ec7a9..3937beb5d 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -31,7 +31,6 @@ #include // Qt -#include #include CreatePartitionTableJob::CreatePartitionTableJob( Device* device, PartitionTable::TableType type ) @@ -72,7 +71,7 @@ CreatePartitionTableJob::exec() Report report( nullptr ); QString message = tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ); - PartitionTable* table( createTable() ); + PartitionTable* table = m_device->partitionTable(); cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted yet:\n" << table; diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index 76b806390..5e68502bd 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -29,10 +29,6 @@ #include #include -// Qt -#include -#include - FormatPartitionJob::FormatPartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) From 5a8302469843b9cb98e82006700a9f78095a28e5 Mon Sep 17 00:00:00 2001 From: Philip Date: Sat, 30 Dec 2017 02:48:00 -0500 Subject: [PATCH 19/20] [initcpiocfg] add 'lvm2' hook as needed --- src/modules/initcpiocfg/main.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/modules/initcpiocfg/main.py b/src/modules/initcpiocfg/main.py index a18cd0c4f..f716cec5d 100644 --- a/src/modules/initcpiocfg/main.py +++ b/src/modules/initcpiocfg/main.py @@ -100,6 +100,7 @@ def modify_mkinitcpio_conf(partitions, root_mount_point): cpu = cpuinfo() swap_uuid = "" btrfs = "" + lvm2 = "" hooks = ["base", "udev", "autodetect", "modconf", "block", "keyboard", "keymap"] modules = [] @@ -122,6 +123,9 @@ def modify_mkinitcpio_conf(partitions, root_mount_point): if partition["fs"] == "btrfs": btrfs = "yes" + if partition["fs"] == "lvm2 pv": + lvm2 = "yes" + if partition["mountPoint"] == "/" and "luksMapperName" in partition: encrypt_hook = True @@ -137,6 +141,9 @@ def modify_mkinitcpio_conf(partitions, root_mount_point): ): files.append("/crypto_keyfile.bin") + if lvm2: + hooks.append("lvm2") + if swap_uuid != "": if encrypt_hook and openswap_hook: hooks.extend(["openswap"]) From be650d79869fe3cec10afd91608b5b5f1a379365 Mon Sep 17 00:00:00 2001 From: Philip Date: Sat, 30 Dec 2017 02:57:52 -0500 Subject: [PATCH 20/20] [initcpiocfg] search just for 'lvm2' in partition[fs] --- src/modules/initcpiocfg/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/initcpiocfg/main.py b/src/modules/initcpiocfg/main.py index f716cec5d..83736b5fe 100644 --- a/src/modules/initcpiocfg/main.py +++ b/src/modules/initcpiocfg/main.py @@ -123,7 +123,7 @@ def modify_mkinitcpio_conf(partitions, root_mount_point): if partition["fs"] == "btrfs": btrfs = "yes" - if partition["fs"] == "lvm2 pv": + if "lvm2" in partition["fs"]: lvm2 = "yes" if partition["mountPoint"] == "/" and "luksMapperName" in partition: