summaryrefslogtreecommitdiffstats
path: root/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh
diff options
context:
space:
mode:
Diffstat (limited to 'builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh')
-rwxr-xr-xbuilder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh35
1 files changed, 35 insertions, 0 deletions
diff --git a/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh b/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh
new file mode 100755
index 00000000..53fd73dc
--- /dev/null
+++ b/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# -*- coding: utf-8 -*-
+# 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