summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2019-09-03 14:03:41 +0200
committerJonathan Bauer2019-09-03 14:03:41 +0200
commitf5388ccef63fec84adefd49288e056ecb4e8b403 (patch)
treef6f5a3dbd3f5ae255a7a42edfed08cd90c5d7d2c
parentinitial support for different qcow handlers (diff)
downloadsystemd-init-f5388ccef63fec84adefd49288e056ecb4e8b403.tar.gz
systemd-init-f5388ccef63fec84adefd49288e056ecb4e8b403.tar.xz
systemd-init-f5388ccef63fec84adefd49288e056ecb4e8b403.zip
[dnbd3-rootfs] initial support for kqcow
-rwxr-xr-xbuilder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh31
1 files changed, 26 insertions, 5 deletions
diff --git a/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh b/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh
index cd1e90c1..619226f5 100755
--- a/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh
+++ b/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh
@@ -28,10 +28,24 @@ container_unpack_xmount() {
else
in_device="${out_path}/${_dnbd3_dev##*/}.dd"
fi
- local loop_device="$(losetup -f)"
- losetup "$loop_device" "$in_device" --partscan
+ local out_device="$(losetup -f)"
+ if ! losetup "$out_device" "$in_device" --partscan; then
+ logging.warn "Failed to attach '$in_device' to '$out_device'."
+ return
+ fi
+ udevadm settle
+ echo "$out_device"
+}
+
+container_unpack_losetup() {
+ local in_device="$1"
+ local out_device="$(losetup -f)"
+ if ! losetup -r -t QCOW "$out_device" "$in_device" --partscan; then
+ logging.warn "Failed to attach '$in_device' to '$out_device'."
+ return
+ fi
udevadm settle
- echo "$loop_device"
+ echo "$out_device"
}
# endregion
@@ -57,8 +71,15 @@ for host in ${SLX_DNBD3_SERVERS} FAIL; do
done
)
# endregion
-# region unpack dnbd3 image with xmount
-read_only_device="$(container_unpack_xmount "$_dnbd3_dev")"
+# region unpack dnbd3 image
+[ -z "$SLX_QCOW_HANDLER" ] && SLX_QCOW_HANDLER="xmount"
+if [ "$SLX_QCOW_HANDLER" = "xmount" ]; then
+ read_only_device="$(container_unpack_xmount "$_dnbd3_dev")"
+elif [ "$SLX_QCOW_HANDLER" = "kernel" ]; then
+ read_only_device="$(container_unpack_losetup "$_dnbd3_dev")"
+else
+ logging.warn "Unsupported QCOW handler: $SLX_QCOW_HANDLER"
+fi
# Fail fast if unpacking dnbd3 image failed.
[ -z "$read_only_device" ] && exit 1