summary refs log blame commit diff
path: root/pkgs/tools/misc/calamares/nonroot.patch
blob: 7843f45f284cec7bc3a6a4747aa6041211a10220 (plain) (tree)








































































































                                                                                                                               
diff --git a/src/libcalamares/utils/Runner.cpp b/src/libcalamares/utils/Runner.cpp
index c7146c2d7..e165d9a8f 100644
--- a/src/libcalamares/utils/Runner.cpp
+++ b/src/libcalamares/utils/Runner.cpp
@@ -140,13 +140,13 @@ Calamares::Utils::Runner::run()
     }
     if ( m_location == RunLocation::RunInTarget )
     {
-        process.setProgram( "chroot" );
-        process.setArguments( QStringList { workingDirectory.absolutePath() } << m_command );
+        process.setProgram( "pkexec" );
+        process.setArguments( QStringList { "chroot" } + QStringList { workingDirectory.absolutePath() } << m_command );
     }
     else
     {
-        process.setProgram( "env" );
-        process.setArguments( m_command );
+        process.setProgram( "pkexec" );
+        process.setArguments( QStringList { "env" } + m_command );
     }
 
     if ( m_output )
diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py
index a3318d1a0..5fbe202fd 100644
--- a/src/modules/mount/main.py
+++ b/src/modules/mount/main.py
@@ -152,7 +152,8 @@ def mount_partition(root_mount_point, partition, partitions):
 
     # Ensure that the created directory has the correct SELinux context on
     # SELinux-enabled systems.
-    os.makedirs(mount_point, exist_ok=True)
+    subprocess.check_call(["pkexec", "mkdir", "-p", mount_point])
+
     try:
         subprocess.call(['chcon', '--reference=' + raw_mount_point, mount_point])
     except FileNotFoundError as e:
@@ -193,13 +194,13 @@ def mount_partition(root_mount_point, partition, partitions):
         for s in btrfs_subvolumes:
             if not s["subvolume"]:
                 continue
-            os.makedirs(root_mount_point + os.path.dirname(s["subvolume"]), exist_ok=True)
-            subprocess.check_call(["btrfs", "subvolume", "create",
+            subprocess.check_call(["pkexec", "mkdir", "-p", root_mount_point + os.path.dirname(s["subvolume"])])
+            subprocess.check_call(["pkexec", "btrfs", "subvolume", "create",
                                    root_mount_point + s["subvolume"]])
             if s["mountPoint"] == "/":
                 # insert the root subvolume into global storage
                 libcalamares.globalstorage.insert("btrfsRootSubvolume", s["subvolume"])
-        subprocess.check_call(["umount", "-v", root_mount_point])
+        subprocess.check_call(["pkexec", "umount", "-v", root_mount_point])
 
         device = partition["device"]
 
diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp
index ca7219ca4..6ac682ba4 100644
--- a/src/modules/welcome/checker/GeneralRequirements.cpp
+++ b/src/modules/welcome/checker/GeneralRequirements.cpp
@@ -371,10 +371,34 @@ GeneralRequirements::checkEnoughStorage( qint64 requiredSpace )
     cWarning() << "GeneralRequirements is configured without libparted.";
     return false;
 #else
-    return check_big_enough( requiredSpace );
+    return big_enough( requiredSpace );
 #endif
 }
 
+bool
+GeneralRequirements::big_enough( qint64 requiredSpace )
+{
+    FILE *fpipe;
+    char command[128];
+    snprintf(command, sizeof(command), "lsblk --bytes -no SIZE,TYPE | grep disk | awk '$1 > %llu {print $1}'", requiredSpace);
+    char c = 0;
+
+    if (0 == (fpipe = (FILE*)popen(command, "r")))
+    {
+        cWarning() << "Failed to check storage size.";
+        return false;
+    }
+
+    while (fread(&c, sizeof c, 1, fpipe))
+    {
+        pclose(fpipe);
+        return true;
+    }
+
+    pclose(fpipe);
+
+    return false;
+}
 
 bool
 GeneralRequirements::checkEnoughRam( qint64 requiredRam )
diff --git a/src/modules/welcome/checker/GeneralRequirements.h b/src/modules/welcome/checker/GeneralRequirements.h
index b6646da11..ea27324fa 100644
--- a/src/modules/welcome/checker/GeneralRequirements.h
+++ b/src/modules/welcome/checker/GeneralRequirements.h
@@ -36,6 +36,7 @@ private:
     bool checkHasPower();
     bool checkHasInternet();
     bool checkIsRoot();
+    bool big_enough( qint64 requiredSpace );
 
     qreal m_requiredStorageGiB;
     qreal m_requiredRamGiB;