diff --git a/CHANGES-3.2 b/CHANGES-3.2 index 0fec792df..b9ef260f6 100644 --- a/CHANGES-3.2 +++ b/CHANGES-3.2 @@ -7,16 +7,38 @@ contributors are listed. Note that Calamares does not have a historical changelog -- this log starts with version 3.2.0. The release notes on the website will have to do for older versions. -# 3.2.53 (unreleased) # +# 3.2.54 (unreleased) # This release contains contributions from (alphabetically by first name): - - No external contributors yet + - Nobody yet ## Core ## - - No core changes yet + - Nothing yet ## Modules ## - - No module changes yet + - Nothing yet + + +# 3.2.53 (2022-03-04) # + +This release contains contributions from (alphabetically by first name): + - Huang Jia Wen (new contributor! Welcome!) + +## Core ## + - Automount-manipulation (to switch off KDE Plasma automounting new devices) + now logs slightly more as it works. Defaults have changed in KDE Plasma + 5.24 and it turns out the automount-manipulation does not work well. + Distro's are encouraged to turn off automount in the live ISO (see #1885). + +## Modules ## + - *bootloader* now knows about loongarch64 and can install suitable EFI + files for this CPU type. (Thanks Huang Jia Wen) + - Progress reporting for `pacman` from the *packages* module has been switched + off. The progress reporting works under low load, but there are many reports + of it crashing (from XeroLinux and from Evan James, who has been debugging + the issue) during a regular installation with thousands of updates. This + will be revisited in the next release. + - The *umount* module was buggy and did not actually unmount anything. # 3.2.52 (2022-02-25) # diff --git a/CMakeLists.txt b/CMakeLists.txt index b7f09cdd0..b70c6bec6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,7 @@ # TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.53 + VERSION 3.2.54 LANGUAGES C CXX ) diff --git a/ci/umount.sh b/ci/umount.sh new file mode 100755 index 000000000..400b0e115 --- /dev/null +++ b/ci/umount.sh @@ -0,0 +1,17 @@ +#! /bin/sh +# +# This is an "unmount" script that tries to unmount whatever +# filesystems Calamares might have left mounted (e.g. because of +# a crash, or ^C'ing the installer, or ..). +# + +# Swap may have become enabled on the disks just used; assume +# we're in a live session where we don't want any. +sudo swapoff -a +# In Arch-based systems, there may be a gpg-agent started by +# pacman during installation, which lives in the chroot. Kill +# them all; again assume we're in a live session where it doesn't matter. +sudo pkill gpg-agent +# Unmount the filesystems in *reverse* order, since we need to ditch +# e.g. /run/udev before /run before the root filesystem. +sudo umount $( LC_ALL=C mount | awk '/calamares-root/{print $3}' | LC_ALL=C sort -r ) diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts index 49f8498f2..263444789 100644 --- a/lang/calamares_fi_FI.ts +++ b/lang/calamares_fi_FI.ts @@ -370,7 +370,7 @@ Linkki kopioitu leikepöydälle The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> - Asennus ohjelman %1 on tehtävä muutoksia levylle, jotta %2 voidaan asentaa.<br/><strong>Et voi kumota näitä muutoksia.</strong> + Asennusohjelman %1 on tehtävä muutoksia asemalle, jotta %2 voidaan asentaa.<br/><strong>Et voi kumota näitä muutoksia.</strong> @@ -597,7 +597,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - Tällä kiintolevyllä ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin kiintolevylle tehdään muutoksia. + Tällä massamuistilla ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistille tehdään muutoksia. @@ -605,7 +605,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - <strong>Tyhjennä levy</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitussa kiintolevyssä. + <strong>Tyhjennä asema</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitusta massamuistista. @@ -626,32 +626,32 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - Tässä kiintolevyssä on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin kiintolevyyn tehdään muutoksia. + Tässä massamuistissa on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistiin tehdään muutoksia. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - Tämä kiintolevy sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin kiintolevyyn tehdään muutoksia. + Tämä massamuisti sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - Tämä kiintolevy sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin kiintolevyyn tehdään muutoksia. + Tämä massamuisti sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> - Tällä kiintolevyllä on jo käyttöjärjestelmä, mutta osiotaulukko <strong>%1</strong> on erilainen kuin tarvittava <strong>%2</strong>.<br/> + Tällä massamuistilla on jo käyttöjärjestelmä, mutta osiotaulukko <strong>%1</strong> on erilainen kuin tarvittava <strong>%2</strong>.<br/> This storage device has one of its partitions <strong>mounted</strong>. - Tähän kiintolevyyn on <strong>kiinnitetty</strong> yksi osioista. + Tähän massamuistiin on <strong>liitetty</strong> yksi osioista. This storage device is a part of an <strong>inactive RAID</strong> device. - Tämä kiintolevy on osa <strong>passiivista RAID</strong> kokoonpanoa. + Tämä massamuisti on osa <strong>passiivista RAID</strong> kokoonpanoa. @@ -1130,7 +1130,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. The installer failed to create partition on disk '%1'. - Asennusohjelma epäonnistui osion luonnissa levylle '%1'. + Asennusohjelma epäonnistui osion luonnissa asemalle '%1'. @@ -1143,7 +1143,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. Creating a new partition table will delete all existing data on the disk. - Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot levyltä. + Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot asemalta. @@ -1306,7 +1306,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. - Asennusohjelma <strong>ei tunnista osiotaulukkoa</strong> valitussa kiintolevyssä.<br><br>Levyssä ei ole osiotaulukkoa, taulukko on vioittunut tai tuntematon.<br>Asennusohjelma voi tehdä uuden osiotaulukon, joko automaattisesti tai manuaalisesti. + Asennusohjelma <strong>ei tunnista osiotaulukkoa</strong> valitussa massamuistissa.<br><br>Laitteessa ei ole osiotaulukkoa, taulukko on vioittunut tai tuntematon.<br>Asennusohjelma voi tehdä uuden osiotaulukon, joko automaattisesti tai manuaalisesti. @@ -1321,7 +1321,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. The type of <strong>partition table</strong> on the selected storage device.<br><br>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.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. - Valitun kiintolevyn <strong>osiotaulukon</strong> tyyppi.<br><br>Ainoa tapa muuttaa osiotaulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki kiintolevyn sisältämät tiedot. <br>Asennusohjelma säilyttää nykyisen osiotaulukon, ellet nimenomaisesti valitse muuta.<br>Jos olet epävarma niin nykyaikaisissa järjestelmissä GPT on suositus. + Valitun massamuistin <strong>osiotaulukon</strong> tyyppi.<br><br>Ainoa tapa muuttaa osiotaulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki massamuistin sisältämät tiedot. <br>Asennusohjelma säilyttää nykyisen osiotaulukon, ellet nimenomaisesti valitse muuta.<br>Jos olet epävarma niin nykyaikaisissa järjestelmissä GPT on suositus. @@ -1612,7 +1612,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. The installer failed to format partition %1 on disk '%2'. - Levyn '%2' osion %1 alustus epäonnistui. + Aseman '%2' osion %1 alustus epäonnistui. @@ -2917,7 +2917,7 @@ hiiren vieritystä skaalaamiseen. has at least one disk device available. - on vähintään yksi levy käytettävissä. + on vähintään yksi asema käytettävissä. @@ -3348,7 +3348,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</ The installer failed to resize partition %1 on disk '%2'. - Asennusohjelma epäonnistui osion %1 koon muuttamisessa levyllä '%2'. + Asennusohjelma epäonnistui osion %1 koon muuttamisessa asemalla '%2'. @@ -3396,7 +3396,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</ Scanning storage devices... - Etsitään kiintolevyjä... + Etsitään massamuisteja... diff --git a/lang/calamares_ko.ts b/lang/calamares_ko.ts index 0b6ed9b17..34650f341 100644 --- a/lang/calamares_ko.ts +++ b/lang/calamares_ko.ts @@ -4080,7 +4080,7 @@ Output: No partitions are available for ZFS. - + ZFS에 사용할 수 있는 파티션이 없습니다. diff --git a/lang/python/ko/LC_MESSAGES/python.po b/lang/python/ko/LC_MESSAGES/python.po index 36bfaab7d..478615671 100644 --- a/lang/python/ko/LC_MESSAGES/python.po +++ b/lang/python/ko/LC_MESSAGES/python.po @@ -5,7 +5,7 @@ # # Translators: # Ji-Hyeon Gim , 2018 -# Jung Hee Lee , 2022 +# Junghee Lee , 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-02-17 15:52+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Jung Hee Lee , 2022\n" +"Last-Translator: Junghee Lee , 2022\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/src/libcalamares/partition/AutoMount.cpp b/src/libcalamares/partition/AutoMount.cpp index adc844816..3ac39b36a 100644 --- a/src/libcalamares/partition/AutoMount.cpp +++ b/src/libcalamares/partition/AutoMount.cpp @@ -21,9 +21,23 @@ namespace Partition struct AutoMountInfo { + bool hasSolid = false; bool wasSolidModuleAutoLoaded = false; }; +/** @section Solid + * + * KDE Solid automount management. + * + * Solid can be influenced through DBus calls to kded5. The following code + * handles Solid: if Solid exists (e.g. we're in a KDE Plasma desktop) + * then try to turn off automount that way. + */ + +/** @brief Boilerplate for a call to kded5 + * + * Returns a method-call message, ready for arguments and call(). + */ static inline QDBusMessage kdedCall( const QString& method ) { @@ -31,6 +45,31 @@ kdedCall( const QString& method ) QStringLiteral( "org.kde.kded5" ), QStringLiteral( "/kded" ), QStringLiteral( "org.kde.kded5" ), method ); } +/** @brief Log a response from call() + * + * Logs without a function header so it is simple to use from an existing + * logging-block. Assumes @p r is a reply or an error message. + * + * @internal + */ +static void +logDBusResponse( QDBusMessage&& r ) +{ + if ( r.type() == QDBusMessage::ReplyMessage ) + { + cDebug() << Logger::SubEntry << r.type() << "reply" << r.arguments(); + } + else + { + cDebug() << Logger::SubEntry << r.type() << "error" << r.errorMessage(); + } +} + +/** @brief Enables (or disables) automount for Solid + * + * If @p enable is @c true, enables automount. Otherwise, disables it. + * This throws some DBbus messages on the wire and forgets about them. + */ // This code comes, roughly, from the KCM for removable devices. static void enableSolidAutoMount( QDBusConnection& dbus, bool enable ) @@ -41,17 +80,24 @@ enableSolidAutoMount( QDBusConnection& dbus, bool enable ) { auto msg = kdedCall( QStringLiteral( "setModuleAutoloading" ) ); msg.setArguments( { moduleName, QVariant( enable ) } ); - dbus.call( msg, QDBus::NoBlock ); + logDBusResponse( dbus.call( msg, QDBus::Block ) ); } // Stop module { auto msg = kdedCall( enable ? QStringLiteral( "loadModule" ) : QStringLiteral( "unloadModule" ) ); msg.setArguments( { moduleName } ); - dbus.call( msg, QDBus::NoBlock ); + logDBusResponse( dbus.call( msg, QDBus::Block ) ); } } +/** @brief Check if Solid exists and has automount set + * + * Updates the @p info object with the discovered information. + * - if there is no Solid available on DBus, sets hasSolid to @c false + * - if there is Solid available on DBusm, sets *hasSolid* to @c true + * and places the queried value of automounting in *wasSolidModuleAutoLoaded*. + */ static void querySolidAutoMount( QDBusConnection& dbus, AutoMountInfo& info ) { @@ -73,26 +119,51 @@ querySolidAutoMount( QDBusConnection& dbus, AutoMountInfo& info ) result = v.toBool(); } } + if ( !result.has_value() ) + { + cDebug() << "No viable response from Solid" << r.path(); + } } + else + { + // It's an error message + cDebug() << "Solid not available:" << r.errorMessage(); + } + info.hasSolid = result.has_value(); info.wasSolidModuleAutoLoaded = result.has_value() ? result.value() : false; } std::shared_ptr< AutoMountInfo > automountDisable( bool disable ) { - auto u = std::make_shared< AutoMountInfo >(); + auto info = std::make_shared< AutoMountInfo >(); QDBusConnection dbus = QDBusConnection::sessionBus(); - querySolidAutoMount( dbus, *u ); - enableSolidAutoMount( dbus, !disable ); - return u; + + // KDE Plasma (Solid) handling + querySolidAutoMount( dbus, *info ); + if ( info->hasSolid ) + { + cDebug() << "Setting Solid automount to" << ( disable ? "disabled" : "enabled" ); + enableSolidAutoMount( dbus, !disable ); + } + + // TODO: other environments + return info; } void -automountRestore( const std::shared_ptr< AutoMountInfo >& t ) +automountRestore( const std::shared_ptr< AutoMountInfo >& info ) { QDBusConnection dbus = QDBusConnection::sessionBus(); - enableSolidAutoMount( dbus, t->wasSolidModuleAutoLoaded ); + + // KDE Plasma (Solid) handling + if ( info->hasSolid ) + { + enableSolidAutoMount( dbus, info->wasSolidModuleAutoLoaded ); + } + + // TODO: other environments } } // namespace Partition diff --git a/src/libcalamares/partition/Mount.cpp b/src/libcalamares/partition/Mount.cpp index 6bc3a7cd2..c22ba942b 100644 --- a/src/libcalamares/partition/Mount.cpp +++ b/src/libcalamares/partition/Mount.cpp @@ -128,26 +128,32 @@ QList< MtabInfo > MtabInfo::fromMtabFilteredByPrefix( const QString& mountPrefix, const QString& mtabPath ) { QFile f( mtabPath.isEmpty() ? "/etc/mtab" : mtabPath ); - if ( !f.open( QIODevice::ReadOnly ) ) + if ( !f.open( QIODevice::ReadOnly | QIODevice::Text ) ) { return {}; } - QTextStream in( &f ); QList< MtabInfo > l; - while ( !f.atEnd() ) + // After opening, atEnd() is already true (!?) so try reading at least once + do { - QStringList line = in.readLine().split( ' ', SplitSkipEmptyParts ); - if ( line.length() == 3 && !line[ 0 ].startsWith( '#' ) ) + QString line = f.readLine(); + if ( line.isEmpty() || line.startsWith( '#' ) ) { - // Lines have format: , so check + continue; + } + + QStringList parts = line.split( ' ', SplitSkipEmptyParts ); + if ( parts.length() >= 3 && !parts[ 0 ].startsWith( '#' ) ) + { + // Lines have format: ..., so check // the mountpoint field. Everything starts with an empty string. - if ( line[ 1 ].startsWith( mountPrefix ) ) + if ( parts[ 1 ].startsWith( mountPrefix ) ) { - l.append( { line[ 0 ], line[ 1 ] } ); + l.append( { parts[ 0 ], parts[ 1 ] } ); } } - } + } while ( !f.atEnd() ); return l; } diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index c7bc741de..fb8e19ac2 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -520,6 +520,8 @@ def get_grub_efi_parameters(): return ("i386-efi", "grubia32.efi", "bootia32.efi") elif efi_bitness == "64" and cpu_type == "aarch64": return ("arm64-efi", "grubaa64.efi", "bootaa64.efi") + elif efi_bitness == "64" and cpu_type == "loongarch64": + return ("loongarch64-efi", "grubloongarch64.efi", "bootloongarch64.efi") elif efi_bitness == "64": # If it's not ARM, must by AMD64 return ("x86_64-efi", "grubx64.efi", "bootx64.efi") diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index 59777cedb..e373a3443 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -424,7 +424,7 @@ class PMPacman(PackageManager): while pacman_count <= self.pacman_num_retries: pacman_count += 1 try: - if callback is True: + if False: # callback: libcalamares.utils.target_env_process_output(command, self.line_cb) else: libcalamares.utils.target_env_process_output(command) diff --git a/src/modules/partition/jobs/AutoMountManagementJob.cpp b/src/modules/partition/jobs/AutoMountManagementJob.cpp index 29b197933..71d3f32ff 100644 --- a/src/modules/partition/jobs/AutoMountManagementJob.cpp +++ b/src/modules/partition/jobs/AutoMountManagementJob.cpp @@ -25,17 +25,15 @@ AutoMountManagementJob::prettyName() const Calamares::JobResult AutoMountManagementJob::exec() { - cVerbose() << "this" << Logger::Pointer( this ) << "value" << Logger::Pointer( m_stored ) - << ( m_stored ? "restore" - : m_disable ? "disable" - : "enable" ); if ( m_stored ) { + cDebug() << "Restore automount settings"; CalamaresUtils::Partition::automountRestore( m_stored ); m_stored.reset(); } else { + cDebug() << "Set automount to" << ( m_disable ? "disable" : "enable" ); m_stored = CalamaresUtils::Partition::automountDisable( m_disable ); } return Calamares::JobResult::ok(); diff --git a/src/modules/umount/UmountJob.cpp b/src/modules/umount/UmountJob.cpp index b9d92fa87..99777d2d0 100644 --- a/src/modules/umount/UmountJob.cpp +++ b/src/modules/umount/UmountJob.cpp @@ -62,11 +62,13 @@ unmountTargetMounts( const QString& rootMountPoint ) auto targetMounts = MtabInfo::fromMtabFilteredByPrefix( targetMountPath ); std::sort( targetMounts.begin(), targetMounts.end(), MtabInfo::mountPointOrder ); + cDebug() << "Read" << targetMounts.count() << "entries from" << targetMountPath; for ( const auto& m : qAsConst( targetMounts ) ) { + // Returns the program's exit code, so 0 is success and non-0 + // (truthy) is a failure. if ( CalamaresUtils::Partition::unmount( m.mountPoint, { "-lv" } ) ) { - // Returns the program's exit code, so 0 is success return Calamares::JobResult::error( QCoreApplication::translate( UmountJob::staticMetaObject.className(), "Could not unmount target system." ),