[gparted/systemd-masking: 5/5] Exclude snap /dev/loop file system image mounts (#129)




commit 56fb026658476f59effb06cc68a25f21362e9208
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date:   Sun Jan 10 16:42:54 2021 +0000

    Exclude snap /dev/loop file system image mounts (#129)
    
    On Ubuntu the gparted shell wrapper still attempts to mask lots of
    non-block device based file systems.  Remove the --quiet option from the
    systemctl --runtime mask command to see:
        $ gparted
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d34\x2d1804-66.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core-10583.mount -> /dev/null.
        Created symlink /run/systemd/system/boot-efi.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gtk\x2dcommon\x2dthemes-1514.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core-10577.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core18-1944.mount -> /dev/null.
        Created symlink /run/systemd/system/run-user-1000-doc.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gtk\x2dcommon\x2dthemes-1506.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d28\x2d1804-128.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-snap\x2dstore-518.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d28\x2d1804-145.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core18-1932.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-snap\x2dstore-467.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d34\x2d1804-60.mount -> /dev/null.
        Created symlink /run/systemd/system/-.mount -> /dev/null.
        GParted 1.0.0
        configuration --enable-libparted-dmraid --enable-online-resize
        libparted 3.3
    
    The gparted shell wrapper is currently looking for non-masked Systemd
    mount units where the 'What' property starts "/dev/".  However Ubuntu
    also uses snap packages which are mounted file images via loop devices:
        $ grep '^/dev/' /proc/mounts | sort
        /dev/fuse /run/user/1000/doc fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
        /dev/loop0 /snap/core/10583 squashfs ro,nodev,relatime 0 0
        /dev/loop10 /snap/snap-store/518 squashfs ro,nodev,relatime 0 0
        /dev/loop11 /snap/snap-store/467 squashfs ro,nodev,relatime 0 0
        /dev/loop12 /snap/gtk-common-themes/1506 squashfs ro,nodev,relatime 0 0
        /dev/loop1 /snap/core/10577 squashfs ro,nodev,relatime 0 0
        /dev/loop3 /snap/core18/1944 squashfs ro,nodev,relatime 0 0
        /dev/loop4 /snap/core18/1932 squashfs ro,nodev,relatime 0 0
        /dev/loop5 /snap/gnome-3-34-1804/66 squashfs ro,nodev,relatime 0 0
        /dev/loop6 /snap/gnome-3-28-1804/128 squashfs ro,nodev,relatime 0 0
        /dev/loop7 /snap/gnome-3-34-1804/60 squashfs ro,nodev,relatime 0 0
        /dev/loop8 /snap/gnome-3-28-1804/145 squashfs ro,nodev,relatime 0 0
        /dev/loop9 /snap/gtk-common-themes/1514 squashfs ro,nodev,relatime 0 0
        /dev/sda1 /boot/efi vfat 
rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
        /dev/sda5 / ext4 rw,relatime,errors=remount-ro 0 0
    
    Fix by excluding:
    1. Device name "/dev/fuse" because it's a character not a block device
       and the mount point is associated with snap,
    2. Device names starting "/dev/loop" and where the mount point starts
       "/snap/" [1].  This is to allow for use of GParted with explicitly
       named loop devices.
    
    [1] The system /snap directory
        https://snapcraft.io/docs/system-snap-directory
    
    Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
                  anyway

 gparted.in | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/gparted.in b/gparted.in
index 4ddd7b90..89e616c0 100755
--- a/gparted.in
+++ b/gparted.in
@@ -144,16 +144,22 @@ done
 #  Use systemctl to prevent automount by masking currently unmasked mount points
 #
 if test "x$HAVE_SYSTEMCTL" = "xyes"; then
-       MOUNTLIST=`systemctl show --all --property=What,Id,LoadState '*.mount' | \
+       MOUNTLIST=`systemctl show --all --property=Where,What,Id,LoadState '*.mount' | \
        awk '
        function clear_properties() {
-               what = ""; id = ""; loadstate = ""
+               where = ""; what = ""; id = ""; loadstate = ""
        }
        function process_unit() {
-               if (substr(what,1,5) == "/dev/" && loadstate != "masked")
+               if (substr(what,1,5) == "/dev/"     &&
+                   loadstate        != "masked"    &&
+                   what             != "/dev/fuse" &&
+                   ! (substr(what,1,9) == "/dev/loop" && substr(where,1,6) == "/snap/"))
+               {
                        print id
+               }
                clear_properties()
        }
+       /^Where=/     { where     = substr($0,7) }
        /^What=/      { what      = substr($0,6) }
        /^Id=/        { id        = substr($0,4) }
        /^LoadState=/ { loadstate = substr($0,11) }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]