diff --git a/src/modules/locale/SetTimezoneJob.cpp b/src/modules/locale/SetTimezoneJob.cpp index 5ae908446..a4529f44d 100644 --- a/src/modules/locale/SetTimezoneJob.cpp +++ b/src/modules/locale/SetTimezoneJob.cpp @@ -45,6 +45,7 @@ SetTimezoneJob::prettyName() const Calamares::JobResult SetTimezoneJob::exec() { + QString localtimeSlink( "/etc/localtime" ); QString zoneinfoPath( "/usr/share/zoneinfo" ); zoneinfoPath.append( QDir::separator() + m_region ); zoneinfoPath.append( QDir::separator() + m_zone ); @@ -55,10 +56,15 @@ SetTimezoneJob::exec() return Calamares::JobResult::error( tr( "Cannot access selected timezone path." ), tr( "Bad path: %1" ).arg( zoneFile.absolutePath() ) ); + // Make sure /etc/localtime doesn't exist, otherwise symlinking will fail + CalamaresUtils::chrootCall( { "rm", + "-f", + localtimeSlink } ); + int ec = CalamaresUtils::chrootCall( { "ln", "-s", zoneinfoPath, - "/etc/localtime" } ); + localtimeSlink } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set timezone." ), tr( "Link creation failed, target: %1; link name: %2" ) diff --git a/src/modules/unpackfs/main.py b/src/modules/unpackfs/main.py index 0124ef4bb..91fcf350e 100644 --- a/src/modules/unpackfs/main.py +++ b/src/modules/unpackfs/main.py @@ -120,16 +120,17 @@ class UnpackOperation: self.mount_image(entry, imgmountdir) + fslist = "" + if entry.sourcefs == "squashfs": - sqfslist = subprocess.check_output(["unsquashfs", + fslist = subprocess.check_output(["unsquashfs", "-l", entry.source]) - entry.total = len(sqfslist.splitlines()) if entry.sourcefs == "ext4": fslist = subprocess.check_output(["find", imgmountdir, "-type", "f"]) - entry.total = len(fslist.splitlines()) + entry.total = len(fslist.splitlines()) self.report_progress() error_msg = self.unpack_image(entry, imgmountdir) @@ -176,6 +177,8 @@ def run(): # sourcefs: "squashfs" # destination: "" + PATH_PROCFS = '/proc/filesystems' + root_mount_point = globalstorage.value("rootMountPoint") if not root_mount_point: return ("No mount point for root partition in globalstorage", @@ -191,14 +194,31 @@ def run(): source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] - if sourcefs not in ["ext4", "squashfs"]: + + # Get supported filesystems + fs_is_supported = False + + if os.path.isfile(PATH_PROCFS) and os.access(PATH_PROCFS, os.R_OK): + procfile = open(PATH_PROCFS, 'r') + filesystems = procfile.read() + procfile.close + + filesystems = filesystems.replace("nodev", "") + filesystems = filesystems.replace("\t", "") + filesystems = filesystems.splitlines() + + # Check if the source filesystem is supported + for fs in filesystems: + if fs == sourcefs: + fs_is_supported = True + + if fs_is_supported == False: return "Bad filesystem", "sourcefs=\"{}\"".format(sourcefs) destination = os.path.abspath(root_mount_point + entry["destination"]) if not os.path.isfile(source): return ("Bad source", "source=\"{}\"".format(source)) - # Add test for supported filesystems if not os.path.isdir(destination): return ("Bad destination", "destination=\"{}\"".format(destination))