summaryrefslogtreecommitdiffstats
path: root/builder/dnbd3-rootfs/scripts
diff options
context:
space:
mode:
authorjandob2016-01-21 15:29:05 +0100
committerjandob2016-01-21 15:29:05 +0100
commitad9d66426c3a00c81da5ab76ba6269948d6609d0 (patch)
treec22fe002d7f590fe957f6d3f12096733a8df0d90 /builder/dnbd3-rootfs/scripts
parentdebugging (diff)
downloadsystemd-init-ad9d66426c3a00c81da5ab76ba6269948d6609d0.tar.gz
systemd-init-ad9d66426c3a00c81da5ab76ba6269948d6609d0.tar.xz
systemd-init-ad9d66426c3a00c81da5ab76ba6269948d6609d0.zip
add xmount; refactor
Diffstat (limited to 'builder/dnbd3-rootfs/scripts')
-rw-r--r--builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh39
-rw-r--r--builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh25
-rw-r--r--builder/dnbd3-rootfs/scripts/device-add-write-layer.sh28
3 files changed, 92 insertions, 0 deletions
diff --git a/builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh b/builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh
new file mode 100644
index 00000000..ea3f2620
--- /dev/null
+++ b/builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+
+# region imports
+
+source "/usr/lib/rebash/core.sh"
+core.import exceptions
+exceptions.activate
+
+# endregion
+
+in_device="$1"
+nbd_device="$2" # TODO detect first free nbd device
+
+systemd-preserve-process-marker qemu-nbd --connect="$nbd_device" \
+ "$in_device" --read-only --persistent --nocache
+
+# TODO better way to wait for the device to be made?
+i=0
+while [ ! -b "$nbd_device" ]; do
+ [ $i -ge 20 ] && exit 1
+ if [ $UDEVVERSION -ge 143 ]; then
+ udevadm settle --exit-if-exists="$nbd_device"
+ else
+ sleep 0.1
+ fi
+ i=$(($i + 1))
+done
+
+# NBD doesn't emit uevents when it gets connected, so kick it
+# TODO get path from $nbd_device
+echo change > /sys/block/nbd0/uevent
+udevadm settle
+
+# region vim modline
+
+# vim: set tabstop=4 shiftwidth=4 expandtab:
+# vim: foldmethod=marker foldmarker=region,endregion:
+
+# endregion
diff --git a/builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh b/builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh
new file mode 100644
index 00000000..a5658e25
--- /dev/null
+++ b/builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+# region imports
+
+source "/usr/lib/rebash/core.sh"
+core.import exceptions
+exceptions.activate
+
+# endregion
+
+in_device="$1"
+
+mkdir /mnt
+systemd-preserve-process-marker xmount --in qemu $in_device --out raw /mnt
+loop_device="$(losetup -f)"
+losetup "$loop_device" /mnt/*.dd --partscan
+udevadm settle
+echo "$loop_device"
+
+# region vim modline
+
+# vim: set tabstop=4 shiftwidth=4 expandtab:
+# vim: foldmethod=marker foldmarker=region,endregion:
+
+# endregion
diff --git a/builder/dnbd3-rootfs/scripts/device-add-write-layer.sh b/builder/dnbd3-rootfs/scripts/device-add-write-layer.sh
new file mode 100644
index 00000000..67c14314
--- /dev/null
+++ b/builder/dnbd3-rootfs/scripts/device-add-write-layer.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+
+# region imports
+
+source "/usr/lib/rebash/core.sh"
+core.import exceptions
+exceptions.activate
+
+# endregion
+combined_device_name="$1"
+read_only_device="$2"
+writable_device="$3"
+persistent="$4" # P or N
+chunksize='1'
+
+partition_size="$(blockdev --getsz "$read_only_device")"
+writable_partition_name='root'
+modprobe dm_snapshot
+dmsetup create "$combined_device_name" --noudevsync --table \
+ "0 $partition_size snapshot $read_only_device $writable_device $persistent $chunksize"
+dmsetup mknodes --noudevsync "$combined_device_name"
+
+# region vim modline
+
+# vim: set tabstop=4 shiftwidth=4 expandtab:
+# vim: foldmethod=marker foldmarker=region,endregion:
+
+# endregion