diff options
author | Jonathan Bauer | 2019-07-24 11:45:44 +0200 |
---|---|---|
committer | Jonathan Bauer | 2019-07-24 11:45:44 +0200 |
commit | 9976b7469f43239a5e6a128f676c7ecd2e5686b3 (patch) | |
tree | aa519c12d23459f883ba5d614cf0f4614f7057be /builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh | |
parent | [slx-clock] remove deprecated file (diff) | |
download | systemd-init-9976b7469f43239a5e6a128f676c7ecd2e5686b3.tar.gz systemd-init-9976b7469f43239a5e6a128f676c7ecd2e5686b3.tar.xz systemd-init-9976b7469f43239a5e6a128f676c7ecd2e5686b3.zip |
[dnbd3-rootfs] various improvements
* use slx-tools to download the config
* use slx-network module instead of systemd-networkd
* remove container_unpack_xmount scripts and make it a function
* and more small things I can't think of ... :)
Diffstat (limited to 'builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh')
-rwxr-xr-x | builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh | 83 |
1 files changed, 49 insertions, 34 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 2d9e059c..ca572458 100755 --- a/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh +++ b/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh @@ -1,49 +1,64 @@ #!/usr/bin/env bash # region imports +type emergency_shell > /dev/null 2>&1 || source /lib/dracut-lib.sh +source /etc/openslx source '/usr/lib/rebash/core.sh' -core.import '/usr/lib/openslx/tools.sh' core.import exceptions -core.import utils core.import logging -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh # endregion + +# region globals/helper +logging.set_log_file "${SLX_LOG_FILE_PATH:-/var/log/openslx}" +# hardcode dnbd device path +declare -rg _dnbd3_dev="/dev/dnbd0" + +# all outputs are redirected to stderr, since this functions should +# only echo the path to the unpacked container to stdout. +container_unpack_xmount() { + local in_device="$1" + local out_path="/mnt/xmount" + mkdir -p "$out_path" + # check tools first + if ! hash xmount systemd-preserve-process-marker; then + logging.warn "Missing xmount deps, will try raw..." 1>&2 + elif ! systemd-preserve-process-marker xmount \ + --in qemu "$in_device" \ + --out raw "$out_path" &>/dev/null; then + logging.warn "xmount call failed, assuming raw image." 1>&2 + else + in_device="${out_path}/${_dnbd3_dev##*/}.dd" + fi + local loop_device="$(losetup -f)" + losetup "$loop_device" "$in_device" --partscan + udevadm settle + echo "$loop_device" +} +# endregion + exceptions.try { -source /etc/openslx -logging.set_commands_level debug -logging.set_level debug -[[ "$SLX_LOG_FILE_PATH" == "" ]] && SLX_LOG_FILE_PATH=/var/log/openslx -logging.set_log_file "$SLX_LOG_FILE_PATH" - # region connect dnbd3 image -IFS_backup="$IFS" +( IFS=", " -return_code=1 -for host in ${SLX_DNBD3_SERVERS}; do +for host in ${SLX_DNBD3_SERVERS} FAIL; do + if [ "$host" = "FAIL" ]; then + emergency_shell "Failed to connect '${SLX_DNBD3_IMAGE}' "\ + "${SLX_DNBD3_RID:+(revision: $SLX_DNBD3_RID)} " + "from one of '$SLX_DNBD3_SERVERS' to '$_dnbd3_dev'." + fi logging.info "Trying host \"$host\"." - if systemd-preserve-process-marker dnbd3-client --host "$host" --image \ - "${SLX_DNBD3_IMAGE}" --device "$SLX_DNBD3_DEVICE" \ - --rid "$SLX_DNBD3_RID"; then - return_code=0 + if systemd-preserve-process-marker dnbd3-client \ + --host "$host" \ + --image "${SLX_DNBD3_IMAGE}" \ + --device "$_dnbd3_dev" \ + ${SLX_DNBD3_RID=+--rid "$SLX_DNBD3_RID"}; then break fi done -IFS="$IFS_backup" - -if [[ $return_code != 0 ]]; then - logging.warn "Failed to connect \"${SLX_DNBD3_IMAGE}\" (revision" \ - "\"$SLX_DNBD3_RID\") from one of \"$SLX_DNBD3_SERVERS\" to" \ - "\"$SLX_DNBD3_DEVICE\"." - exit 1 -fi +) # endregion # region unpack dnbd3 image with xmount -if [ "$SLX_LOG_FILE_PATH" != "" ]; then - read_only_device="$(container-unpack-xmount "$SLX_DNBD3_DEVICE" \ - 2>>"$SLX_LOG_FILE_PATH")" -else - read_only_device="$(container-unpack-xmount "$SLX_DNBD3_DEVICE")" -fi +read_only_device="$(container_unpack_xmount "$_dnbd3_dev")" # Fail fast if unpacking dnbd3 image failed. [ -z "$read_only_device" ] && exit 1 @@ -56,7 +71,7 @@ if [ -z "$SLX_SYSTEM_PARTITION_PREPARATION_SCRIPT" ]; then read_only_partition="$read_only_device" true else - read_only_partition="$(get-partitions-by-id \ + read_only_partition="$(slx-tools dev_find_partitions \ "$read_only_device" "$SLX_SYSTEM_PARTITION_IDENTIFIER")" fi else @@ -69,11 +84,11 @@ if [[ ! $? || -z "$read_only_partition" ]]; then exit 1 fi logging.info "Using read-only partition: $read_only_partition" - # endregion -# region RW layer through slx-partitioner -dmsetup-slx-device $read_only_partition +# region add rw layer to dnbd3 image +# don't be fooled to think we are done, the next part is crucial +dmsetup-slx-device "$read_only_partition" # endregion } |