summaryrefslogtreecommitdiffstats
path: root/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
diff options
context:
space:
mode:
authortorben2015-11-20 18:25:39 +0100
committertorben2015-11-20 18:25:39 +0100
commitf2db0443f952be32b76493eb57ada00550e8add6 (patch)
tree2d579d160273e0c404e6ad8e8a9bff85f3bccdba /builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
parentAdding more resilient configuration server api. (diff)
downloadsystemd-init-f2db0443f952be32b76493eb57ada00550e8add6.tar.gz
systemd-init-f2db0443f952be32b76493eb57ada00550e8add6.tar.xz
systemd-init-f2db0443f952be32b76493eb57ada00550e8add6.zip
Improve slx config.
Diffstat (limited to 'builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh')
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh38
1 files changed, 24 insertions, 14 deletions
diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
index 4a5b57f3..233d4640 100755
--- a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
+++ b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
@@ -1,35 +1,45 @@
source "/usr/lib/utils.sh"
# Close previous connections to be able to run this script many times.
-dnbd3-client --device "$SLX_DNBD3_DEVICE" --close && \
-if ! systemd-preserve-process-marker dnbd3-client --host "$SLX_DNBD3_SERVERS" \
- --image "${SLX_SERVER_BASE}${SLX_DNBD3_IMAGE}" --device \
- "$SLX_DNBD3_DEVICE" --rid "$SLX_DNBD3_RID"
-then
- warn "Failed to connect $SLX_DNBD3_IMAGE from $SLX_DNBD3_SERVERS to $SLX_DNBD3_DEVICE"
+dnbd3-client --device "$SLX_DNBD3_DEVICE" --close
+local IFS_backup="$IFS"
+IFS=","
+local host
+for host in ${SLX_DNBD3_SERVERS}; do
+ info "Trying host \"$host\"."
+ systemd-preserve-process-marker dnbd3-client --host "$SLX_DNBD3_SERVERS" \
+ --image "${SLX_SERVER_BASE}${SLX_DNBD3_IMAGE}" --device \
+ "$SLX_DNBD3_DEVICE" --rid "$SLX_DNBD3_RID"
+ local return_code="$?"
+ [[ $return_code == 0 ]] && break
+ continue
+done
+IFS="$IFS_backup"
+if [[ $return_code != 0 ]]; then
+ warn "Failed to connect \"${SLX_SERVER_BASE}${SLX_DNBD3_IMAGE}\" from one of \"$SLX_DNBD3_SERVERS\" to \"$SLX_DNBD3_DEVICE\"."
emergency_shell -n "Error in $0"
return 1
fi
-local nbd_device='/dev/nbd0' && \
+local nbd_device='/dev/nbd0'
systemd-preserve-process-marker qemu-nbd --connect="$nbd_device" \
- "$SLX_DNBD3_DEVICE" --read-only && \
+ "$SLX_DNBD3_DEVICE" --read-only
local read_only_partition="$(utils_create_partition_via_offset "$nbd_device" \
- ${SLX_SYSTEM_PARTITION_LABEL})" && \
+ "$SLX_SYSTEM_PARTITION_LABEL")"
# Make read-only partition writable.
# TODO implement persistent available indicator.
local persistent="N" # 'P' for persistent storage, 'N' for not persistent
if true; then
- modprobe brd max_part=1 rd_size=524288 && \
+ modprobe brd max_part=1 rd_size=524288
local writable_device="/dev/ram0"
else
# Use next free loop device.
- local writable_device="$(losetup -f)" && \
- dd if=/dev/zero of=persistent_storage.img bs=1k count=1000 && \
+ local writable_device="$(losetup -f)"
+ dd if=/dev/zero of=persistent_storage.img bs=1k count=1000
losetup "$writable_device" persistent_storage.img
persistent="P"
fi
-local partition_size="$(blockdev --getsz "$read_only_partition")" && \
-local writable_partition_name="root" && \
+local partition_size="$(blockdev --getsz "$read_only_partition")"
+local writable_partition_name="root"
local chunksize="1"
modprobe dm_snapshot
dmsetup create "$writable_partition_name" --noudevsync --table \