summaryrefslogtreecommitdiff
path: root/modules/losetup/files
diff options
context:
space:
mode:
Diffstat (limited to 'modules/losetup/files')
-rw-r--r--modules/losetup/files/dismantle-loop-device15
-rw-r--r--modules/losetup/files/loop@.service12
-rwxr-xr-xmodules/losetup/files/setup-loop-device16
3 files changed, 43 insertions, 0 deletions
diff --git a/modules/losetup/files/dismantle-loop-device b/modules/losetup/files/dismantle-loop-device
new file mode 100644
index 0000000..be3f3a0
--- /dev/null
+++ b/modules/losetup/files/dismantle-loop-device
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+target_file="$1"
+safe_name="$(systemd-escape "$target_file")"
+
+set +x
+
+loop_device=$(readlink "/dev/loop-by-name/${safe_name}")
+rm "/dev/loop-by-name/${safe_name}"
+
+for part in "/dev/loop-by-name/${safe_name}"-p*; do
+ rm "$part"
+done
+
+losetup -d $loop_device
diff --git a/modules/losetup/files/loop@.service b/modules/losetup/files/loop@.service
new file mode 100644
index 0000000..e9dc008
--- /dev/null
+++ b/modules/losetup/files/loop@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Loopback device for %I
+
+[Service]
+ExecStart=/usr/libexec/setup-loop-device "%I"
+ExecStop=/usr/libexec/dismantle-loop-device "%I"
+#ExecStopPost=rm /dev/loop-by-name/"%i"*
+#ExecStart=echo %I
+ExecStartPre=mkdir -p /dev/loop-by-name
+# Cant't have any dashes in filename, due to escaping rules
+# ExecStartPre=/bin/sh -c "grep -vq '-' <<< "%i""
+RemainAfterExit=yes
diff --git a/modules/losetup/files/setup-loop-device b/modules/losetup/files/setup-loop-device
new file mode 100755
index 0000000..4215273
--- /dev/null
+++ b/modules/losetup/files/setup-loop-device
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+target_file="$1"
+safe_name="$(systemd-escape "$target_file")"
+
+set +x
+
+loop_device=$(losetup --find --show "$target_file")
+
+ln -s $loop_device "/dev/loop-by-name/${safe_name}"
+
+for part in "${loop_device}"p*; do
+ last_two=${part:$[${#part}-2]}
+ ln -s $part \
+ "/dev/loop-by-name/${safe_name}-${last_two}"
+done