diff --git a/src/libcalamares/utils/Runner.cpp b/src/libcalamares/utils/Runner.cpp index 632f32028..fe9052449 100644 --- a/src/libcalamares/utils/Runner.cpp +++ b/src/libcalamares/utils/Runner.cpp @@ -137,13 +137,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 4202639f3..de2556b91 100644 --- a/src/modules/mount/main.py +++ b/src/modules/mount/main.py @@ -235,7 +235,8 @@ def mount_partition(root_mount_point, partition, partitions, mount_options, moun # 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: @@ -278,13 +279,13 @@ def mount_partition(root_mount_point, partition, partitions, mount_options, moun 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 a58f3df83..b66576b09 100644 --- a/src/modules/welcome/checker/GeneralRequirements.cpp +++ b/src/modules/welcome/checker/GeneralRequirements.cpp @@ -431,10 +431,35 @@ 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;