summaryrefslogtreecommitdiffstats
path: root/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-xmount.sh
diff options
context:
space:
mode:
Diffstat (limited to 'builder/modules.d/dnbd3-rootfs/scripts/container-unpack-xmount.sh')
-rwxr-xr-xbuilder/modules.d/dnbd3-rootfs/scripts/container-unpack-xmount.sh34
1 files changed, 34 insertions, 0 deletions
diff --git a/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-xmount.sh b/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-xmount.sh
new file mode 100755
index 00000000..c7e1b45c
--- /dev/null
+++ b/builder/modules.d/dnbd3-rootfs/scripts/container-unpack-xmount.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+# -*- coding: utf-8 -*-
+# region imports
+source '/usr/lib/rebash/core.sh'
+core.import logging
+core.import utils
+core.import exceptions
+exceptions.activate
+# endregion
+logging.set_level info
+logging.set_commands_level info
+
+# NOTE: All output has to be forwarded to standard error because determined
+# device should be printed on standard output.
+in_device="$1"
+mkdir --parents /mnt/xmount
+loop_device="$(losetup --find)"
+if ! utils.dependency_check xmount; then
+ logging.warn "\"xmount\" not found, assuming raw image." 1>&2
+elif systemd-preserve-process-marker xmount --in qemu "$in_device" --out raw \
+ /mnt/xmount &>/dev/null
+then
+ in_device="/mnt/xmount/*.dd"
+else
+ logging.warn "\"xmount\" call failed, assuming raw image." 1>&2
+fi
+losetup "$loop_device" $in_device --partscan
+udevadm settle
+echo "$loop_device"
+
+# region vim modline
+# vim: set tabstop=4 shiftwidth=4 expandtab:
+# vim: foldmethod=marker foldmarker=region,endregion:
+# endregion