From e67acdeaeafb3d87dd16cdf96c0e1619e365cf94 Mon Sep 17 00:00:00 2001 From: Joost Rijneveld Date: Thu, 9 Feb 2023 11:46:25 +0100 Subject: [PATCH] Add APFS support using apfs-fuse --- imagemounter/dependencies.py | 3 ++- imagemounter/filesystems.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/imagemounter/dependencies.py b/imagemounter/dependencies.py index c210d69..a54208c 100644 --- a/imagemounter/dependencies.py +++ b/imagemounter/dependencies.py @@ -262,6 +262,7 @@ def printable_status(self): mount_ntfs = FileSystemTypeDependency("ntfs", "ntfs-3g", "NTFS volumes") lvm = CommandDependency("lvm", "lvm2", "LVM volumes") vmfs_fuse = CommandDependency("vmfs-fuse", "vmfs-tools", "VMFS volumes") +apfs_fuse = CommandDependency("apfs-fuse", why="APFS volumes") mount_jffs2 = FileSystemTypeDependency("jffs2", "mtd-tools", "JFFS2 volumes") mount_squashfs = FileSystemTypeDependency("squashfs", "squashfs-tools", "SquashFS volumes") mdadm = CommandDependency("mdadm", "mdadm", "RAID volumes") @@ -284,7 +285,7 @@ def printable_status(self): mount_volumes = DependencySection(name="Mounting volumes", description="install when needed", - deps=[mount_xfs, mount_ntfs, lvm, vmfs_fuse, mount_jffs2, + deps=[mount_xfs, mount_ntfs, lvm, vmfs_fuse, apfs_fuse, mount_jffs2, mount_squashfs, mdadm, cryptsetup, bdemount, vshadowmount, photorec]) ALL_SECTIONS = [ diff --git a/imagemounter/filesystems.py b/imagemounter/filesystems.py index 97b5c85..c46aaae 100644 --- a/imagemounter/filesystems.py +++ b/imagemounter/filesystems.py @@ -424,6 +424,21 @@ def mount(self): raise +class ApfsFileSystem(LoopbackFileSystemMixin, MountFileSystem): + type = 'apfs' + + @dependencies.require(dependencies.apfs_fuse) + def mount(self): + self._make_mountpoint() + self._find_loopback() + try: + _util.check_call_(['apfs-fuse', self.loopback, self.mountpoint], stdout=subprocess.PIPE) + except Exception: + self._free_loopback() + self._clear_mountpoint() + raise + + class Jffs2FileSystem(MountFileSystem): type = 'jffs2'