summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2021-12-13 23:35:56 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2021-12-13 23:35:56 +0100
commit85793838bc917566d739b330255d11e941320b45 (patch)
tree2ca7370b0373bd5e27b679b94707560c604efa00 /modules
parentWork on netbooting raspberry pis. (diff)
downloadwebdav_server-85793838bc917566d739b330255d11e941320b45.tar.gz
webdav_server-85793838bc917566d739b330255d11e941320b45.tar.xz
Add losetup.
Diffstat (limited to 'modules')
-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
-rw-r--r--modules/losetup/manifests/init.pp24
4 files changed, 67 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
diff --git a/modules/losetup/manifests/init.pp b/modules/losetup/manifests/init.pp
new file mode 100644
index 0000000..8d7f8d8
--- /dev/null
+++ b/modules/losetup/manifests/init.pp
@@ -0,0 +1,24 @@
+class losetup {
+ file { '/etc/systemd/system/loop@.service':
+ ensure => file,
+ source => "puppet:///modules/${module_name}/loop@.service",
+ }
+
+ # ensure_resource ('file', { path => '/usr/libexec', ensure => directory })
+ file { '/usr/libexec':
+ ensure => directory,
+ }
+
+ file {
+ default:
+ ensure => file,
+ mode => '0555',
+ ;
+'/usr/libexec/setup-loop-device':
+ source => "puppet:///modules/${module_name}/setup-loop-device",
+ ;
+'/usr/libexec/dismantle-loop-device':
+ source => "puppet:///modules/${module_name}/dismantle-loop-device",
+ ;
+ }
+}