diff options
Diffstat (limited to 'builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh')
-rwxr-xr-x | builder/modules.d/dnbd3-rootfs/scripts/container-unpack-qemu.sh | 35 |
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 |