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
- 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.
- 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>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.
- 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.
- 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.
- 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.
- 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/>
- Tähän kiintolevyyn on <strong>kiinnitetty</strong> yksi osioista.
+ Tähän massamuistiin on <strong>liitetty</strong> yksi osioista.
- 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ä.
- 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ä.
- 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ä.
- 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ä.
- 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ä.
- Levyn '%2' osion %1 alustus epäonnistui.
+ Aseman '%2' osion %1 alustus epäonnistui.
@@ -2917,7 +2917,7 @@ hiiren vieritystä skaalaamiseen.
- 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ä.</
- 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ä.</
- 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:
-
+ 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." ),