From 3188a47fbacc4f5cd1ff3b39ef5d10f272f4f7d9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 23 Aug 2017 06:51:45 -0400 Subject: [PATCH 1/6] Bump version numbers on the example distro --- src/branding/default/branding.desc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/branding/default/branding.desc b/src/branding/default/branding.desc index ae47e1662..c2d868c82 100644 --- a/src/branding/default/branding.desc +++ b/src/branding/default/branding.desc @@ -15,10 +15,10 @@ welcomeExpandingLogo: true strings: productName: Generic GNU/Linux shortProductName: Generic - version: 1.0 LTS - shortVersion: 1.0 - versionedName: Generic GNU/Linux 1.0 LTS "Rusty Trombone" - shortVersionedName: Generic 1.0 + version: 2017.8 LTS + shortVersion: 2017.8 + versionedName: Generic GNU/Linux 2017.8 LTS "Soapy Sousaphone" + shortVersionedName: Generic 2017.8 bootloaderEntryName: Generic productUrl: http://calamares.io/ supportUrl: http://calamares.io/bugs/ From 106f18e074ff7e18073684f0bff2db0be241c17b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 23 Aug 2017 16:44:09 -0400 Subject: [PATCH 2/6] Log process output of failed commands FIXES #612 --- src/libcalamares/utils/CalamaresUtilsSystem.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.cpp b/src/libcalamares/utils/CalamaresUtilsSystem.cpp index 176771e36..c38d398e6 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.cpp +++ b/src/libcalamares/utils/CalamaresUtilsSystem.cpp @@ -195,8 +195,14 @@ System::targetEnvOutput( const QStringList& args, return -1; } - cLog() << "Finished. Exit code:" << process.exitCode(); - return process.exitCode(); + auto r = process.exitCode(); + cLog() << "Finished. Exit code:" << r; + if ( r != 0 ) + { + cLog() << "Target cmd" << args; + cLog() << "Target out" << output; + } + return r; } From 7e66499f368177b7982c909e42c71c1d1572e107 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 28 Aug 2017 05:36:21 -0400 Subject: [PATCH 3/6] Refactor check for EFI system. The TODO stands, to delegate this to KPMCore. --- src/modules/partition/core/PartUtils.cpp | 10 ++++++++-- src/modules/partition/core/PartUtils.h | 5 +++++ src/modules/partition/core/PartitionActions.cpp | 5 ++--- src/modules/partition/core/PartitionCoreModule.cpp | 4 ++-- src/modules/partition/gui/BootInfoWidget.cpp | 9 +++------ src/modules/partition/gui/ChoicePage.cpp | 6 +++--- src/modules/partition/gui/CreatePartitionDialog.cpp | 5 +++-- .../partition/gui/EditExistingPartitionDialog.cpp | 3 ++- src/modules/partition/gui/PartitionPage.cpp | 3 ++- src/modules/partition/gui/PartitionViewStep.cpp | 2 +- 10 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 6aeffa7fb..df230311a 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -151,7 +151,7 @@ canBeResized( PartitionCoreModule* core, const QString& partitionPath ) } -FstabEntryList +static FstabEntryList lookForFstabEntries( const QString& partitionPath ) { FstabEntryList fstabEntries; @@ -195,7 +195,7 @@ lookForFstabEntries( const QString& partitionPath ) } -QString +static QString findPartitionPathForMountPoint( const FstabEntryList& fstab, const QString& mountPoint ) { @@ -328,4 +328,10 @@ runOsprober( PartitionCoreModule* core ) return osproberEntries; } +bool +isEfiSystem() +{ + return QDir( "/sys/firmware/efi/efivars" ).exists(); +} + } // nmamespace PartUtils diff --git a/src/modules/partition/core/PartUtils.h b/src/modules/partition/core/PartUtils.h index 21d995965..c8d0714f0 100644 --- a/src/modules/partition/core/PartUtils.h +++ b/src/modules/partition/core/PartUtils.h @@ -62,6 +62,11 @@ bool canBeResized( PartitionCoreModule* core, const QString& partitionPath ); */ OsproberEntryList runOsprober( PartitionCoreModule* core ); +/** + * @brief Is this system EFI-enabled? Decides based on /sys/firmware/efi + */ +bool isEfiSystem(); + } #endif // PARTUTILS_H diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index dbb7e4000..14e7bf010 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -22,6 +22,7 @@ #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "core/PartitionCoreModule.h" +#include "core/PartUtils.h" #include "utils/CalamaresUtilsSystem.h" #include "JobQueue.h" @@ -118,9 +119,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - bool isEfi = false; - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) - isEfi = true; + bool isEfi = PartUtils::isEfiSystem(); QString defaultFsType = gs->value( "defaultFileSystemType" ).toString(); if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 26cc0f597..ac22b2b7a 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -167,7 +167,7 @@ PartitionCoreModule::doInit() //FIXME: this should be removed in favor of // proper KPM support for EFI - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) + if ( PartUtils::isEfiSystem() ) scanForEfiSystemPartitions(); } @@ -461,7 +461,7 @@ PartitionCoreModule::refresh() //FIXME: this should be removed in favor of // proper KPM support for EFI - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) + if ( PartUtils::isEfiSystem() ) scanForEfiSystemPartitions(); } diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp index 605144271..c24f28121 100644 --- a/src/modules/partition/gui/BootInfoWidget.cpp +++ b/src/modules/partition/gui/BootInfoWidget.cpp @@ -18,8 +18,9 @@ #include "BootInfoWidget.h" +#include "core/PartUtils.h" -#include +#include "utils/CalamaresUtilsGui.h" #include #include @@ -64,12 +65,8 @@ BootInfoWidget::BootInfoWidget( QWidget* parent ) "may also show up as BIOS if started in compatibility " "mode." ) ); - bool isEfi = false; - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) - isEfi = true; - QString bootToolTip; - if ( isEfi ) + if ( PartUtils::isEfiSystem() ) { m_bootLabel->setText( "EFI " ); bootToolTip = tr( "This system was started with an EFI " diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 16a4547fc..76c65a027 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -146,7 +146,7 @@ void ChoicePage::init( PartitionCoreModule* core ) { m_core = core; - m_isEfi = QDir( "/sys/firmware/efi/efivars" ).exists(); + m_isEfi = PartUtils::isEfiSystem(); setupChoices(); @@ -680,7 +680,7 @@ ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) m_core->revertDevice( selectedDevice() ); } - // if the partition is unallocated(free space), we don't replace it but create new one + // if the partition is unallocated(free space), we don't replace it but create new one // with the same first and last sector Partition* selectedPartition = static_cast< Partition* >( current.data( PartitionModel::PartitionPtrRole ) @@ -1311,7 +1311,7 @@ ChoicePage::setupActions() m_grp->setExclusive( true ); } - bool isEfi = QDir( "/sys/firmware/efi/efivars" ).exists(); + bool isEfi = PartUtils::isEfiSystem(); bool efiSystemPartitionFound = !m_core->efiSystemPartitions().isEmpty(); if ( isEfi && !efiSystemPartitionFound ) diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index 4cd22bf68..90cf92051 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -21,6 +21,7 @@ #include "core/ColorUtils.h" #include "core/PartitionInfo.h" +#include "core/PartUtils.h" #include "core/KPMHelpers.h" #include "gui/PartitionSizeController.h" @@ -66,12 +67,12 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par m_ui->encryptWidget->hide(); QStringList mountPoints = { "/", "/boot", "/home", "/opt", "/usr", "/var" }; - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) + if ( PartUtils::isEfiSystem() ) mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); mountPoints.removeDuplicates(); mountPoints.sort(); m_ui->mountPointComboBox->addItems( mountPoints ); - + if ( device->partitionTable()->type() == PartitionTable::msdos || device->partitionTable()->type() == PartitionTable::msdos_sectorbased ) initMbrPartitionTypeUi(); diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 1909e48e8..e213b8731 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -26,6 +26,7 @@ #include #include #include +#include "core/PartUtils.h" #include #include @@ -56,7 +57,7 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit m_ui->setupUi( this ); QStringList mountPoints = { "/", "/boot", "/home", "/opt", "/usr", "/var" }; - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) + if ( PartUtils::isEfiSystem() ) mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); mountPoints.removeDuplicates(); mountPoints.sort(); diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 1d807a939..5d541c4e2 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -25,6 +25,7 @@ #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" +#include "core/PartUtils.h" #include "core/KPMHelpers.h" #include "gui/CreatePartitionDialog.h" #include "gui/EditExistingPartitionDialog.h" @@ -59,7 +60,7 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) , m_core( core ) , m_isEfi( false ) { - m_isEfi = QDir( "/sys/firmware/efi/efivars" ).exists(); + m_isEfi = PartUtils::isEfiSystem(); m_ui->setupUi( this ); m_ui->partitionLabelsView->setVisible( diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index b7dd7724a..7f113ce88 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -386,7 +386,7 @@ PartitionViewStep::onLeave() if ( m_widget->currentWidget() == m_manualPartitionPage ) { - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) + if ( PartUtils::isEfiSystem() ) { QString espMountPoint = Calamares::JobQueue::instance()->globalStorage()-> value( "efiSystemPartition").toString(); From 7791c3cb198f45c3e98c59155bb6d0474b7be275 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 28 Aug 2017 04:40:31 -0400 Subject: [PATCH 4/6] DeviceInfo: refactor translation of DeviceInfoPage - For Boot and Device info widgets, add a retranslateUi() method, since the labels change not only in response to translation events but also UI events. FIXES #779 --- src/modules/partition/gui/BootInfoWidget.cpp | 7 +++ src/modules/partition/gui/BootInfoWidget.h | 3 ++ .../partition/gui/DeviceInfoWidget.cpp | 51 +++++++++++-------- src/modules/partition/gui/DeviceInfoWidget.h | 4 ++ 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp index c24f28121..cb89432b0 100644 --- a/src/modules/partition/gui/BootInfoWidget.cpp +++ b/src/modules/partition/gui/BootInfoWidget.cpp @@ -21,6 +21,7 @@ #include "core/PartUtils.h" #include "utils/CalamaresUtilsGui.h" +#include "utils/Retranslator.h" #include #include @@ -59,6 +60,12 @@ BootInfoWidget::BootInfoWidget( QWidget* parent ) m_bootIcon->setPalette( palette ); m_bootLabel->setPalette( palette ); + CALAMARES_RETRANSLATE( retranslateUi(); ) +} + +void +BootInfoWidget::retranslateUi() +{ m_bootIcon->setToolTip( tr( "The boot environment of this system.

" "Older x86 systems only support BIOS.
" "Modern systems usually use EFI, but " diff --git a/src/modules/partition/gui/BootInfoWidget.h b/src/modules/partition/gui/BootInfoWidget.h index b8012b361..ac70a7b9a 100644 --- a/src/modules/partition/gui/BootInfoWidget.h +++ b/src/modules/partition/gui/BootInfoWidget.h @@ -30,6 +30,9 @@ class BootInfoWidget : public QWidget public: explicit BootInfoWidget( QWidget* parent = nullptr ); +public slots: + void retranslateUi(); + private: QLabel* m_bootIcon; QLabel* m_bootLabel; diff --git a/src/modules/partition/gui/DeviceInfoWidget.cpp b/src/modules/partition/gui/DeviceInfoWidget.cpp index dc4473521..1fadb9566 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.cpp +++ b/src/modules/partition/gui/DeviceInfoWidget.cpp @@ -19,9 +19,11 @@ #include "DeviceInfoWidget.h" -#include -#include -#include +#include "utils/CalamaresUtilsGui.h" +#include "utils/Logger.h" +#include "utils/Retranslator.h" +#include "JobQueue.h" +#include "GlobalStorage.h" #include #include @@ -44,9 +46,10 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) m_ptIcon->setMargin( 0 ); m_ptIcon->setFixedSize( iconSize ); - m_ptIcon->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, - CalamaresUtils::Original, - iconSize ) ); + m_ptIcon->setPixmap( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, + CalamaresUtils::Original, + iconSize ) ); QFontMetrics fm = QFontMetrics( QFont() ); m_ptLabel->setMinimumWidth( fm.boundingRect( "Amiga" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); @@ -60,28 +63,24 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) m_ptIcon->setPalette( palette ); m_ptLabel->setPalette( palette ); - m_ptIcon->setToolTip( tr( "The type of partition table on the " - "selected storage device.

" - "The only way to change the partition table type is to " - "erase and recreate the partition table from scratch, " - "which destroys all data on the storage device.
" - "This installer will keep the current partition table " - "unless you explicitly choose otherwise.
" - "If unsure, on modern systems GPT is preferred." ) ); - - bool isEfi = false; - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) - isEfi = true; + CALAMARES_RETRANSLATE( retranslateUi(); ) } void DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type ) { - QString typeString = PartitionTable::tableTypeToName( type ).toUpper(); + m_tableType = type; + retranslateUi(); +} + +void +DeviceInfoWidget::retranslateUi() +{ + QString typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper(); // fix up if the name shouldn't be uppercase: - switch ( type ) + switch ( m_tableType ) { case PartitionTable::msdos: case PartitionTable::msdos_sectorbased: @@ -108,7 +107,7 @@ DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type ) "table." ) .arg( typeString ); - switch ( type ) + switch ( m_tableType ) { case PartitionTable::loop: toolTipString = tr( "This is a loop " @@ -146,5 +145,13 @@ DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type ) m_ptLabel->setText( typeString ); m_ptLabel->setToolTip( toolTipString ); -} + m_ptIcon->setToolTip( tr( "The type of partition table on the " + "selected storage device.

" + "The only way to change the partition table type is to " + "erase and recreate the partition table from scratch, " + "which destroys all data on the storage device.
" + "This installer will keep the current partition table " + "unless you explicitly choose otherwise.
" + "If unsure, on modern systems GPT is preferred." ) ); +} diff --git a/src/modules/partition/gui/DeviceInfoWidget.h b/src/modules/partition/gui/DeviceInfoWidget.h index ab67c102c..f8bd07ca3 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.h +++ b/src/modules/partition/gui/DeviceInfoWidget.h @@ -34,9 +34,13 @@ public: void setPartitionTableType( PartitionTable::TableType type ); +public slots: + void retranslateUi(); + private: QLabel* m_ptIcon; QLabel* m_ptLabel; + PartitionTable::TableType m_tableType; }; #endif // DEVICEINFOWIDGET_H From 85595b4e04e7b8b4d8dd956e29cdeb11b6be86a1 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 28 Aug 2017 05:54:04 -0400 Subject: [PATCH 5/6] #780: check for isMounted(), not for where-would-it-be-mounted --- src/modules/partition/core/DeviceList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/core/DeviceList.cpp b/src/modules/partition/core/DeviceList.cpp index 22d7e643f..0b89fd986 100644 --- a/src/modules/partition/core/DeviceList.cpp +++ b/src/modules/partition/core/DeviceList.cpp @@ -58,7 +58,7 @@ isMounted( Device* device ) cDebug() << "Checking for mounted partitions in" << device->deviceNode(); for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { - if ( ! ( *it )->mountPoint().isEmpty() ) + if ( ! ( *it )->isMounted() ) { cDebug() << " .." << ( *it )->partitionPath() << "is mounted on" << ( *it )->mountPoint(); return true; From c5abfd63715df205fc8b9fb46d450eab7ca1f863 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 28 Aug 2017 06:01:11 -0400 Subject: [PATCH 6/6] Having a mounted partition should not disqualify the entire device. FIXES #780 (should reopen #639 for double-checking) --- src/modules/partition/core/DeviceList.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/partition/core/DeviceList.cpp b/src/modules/partition/core/DeviceList.cpp index 0b89fd986..5bce4a0e3 100644 --- a/src/modules/partition/core/DeviceList.cpp +++ b/src/modules/partition/core/DeviceList.cpp @@ -52,8 +52,9 @@ hasRootPartition( Device* device ) return false; } +/* Unused */ static bool -isMounted( Device* device ) +hasMountedPartitions( Device* device ) { cDebug() << "Checking for mounted partitions in" << device->deviceNode(); for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) @@ -128,8 +129,7 @@ QList< Device* > getDevices( DeviceType which, qint64 minimumSize ) } else if ( writableOnly && ( hasRootPartition( *it ) || - isIso9660( *it ) || - isMounted( *it ) ) + isIso9660( *it ) ) ) { cDebug() << " .. Removing" << it;