diff options
| author | torben | 2015-12-10 11:35:21 +0100 |
|---|---|---|
| committer | torben | 2015-12-10 11:35:21 +0100 |
| commit | a18c0ecedf733f4b186f3dc185b0d0b1a82f15b2 (patch) | |
| tree | 9ba669d0fab9efdfc6c888a68132ddfcee0e178f /builder | |
| parent | Add dmsetup dependency. (diff) | |
| parent | fix import bug (diff) | |
| download | systemd-init-a18c0ecedf733f4b186f3dc185b0d0b1a82f15b2.tar.gz systemd-init-a18c0ecedf733f4b186f3dc185b0d0b1a82f15b2.tar.xz systemd-init-a18c0ecedf733f4b186f3dc185b0d0b1a82f15b2.zip | |
Merge branch 'master' of git.openslx.org:openslx-ng/systemd-init
Diffstat (limited to 'builder')
| -rwxr-xr-x | builder/build-initramfs.sh | 5 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh | 63 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/module-setup.sh | 27 | ||||
| m--------- | builder/dnbd3-rootfs/scripts/rebash | 0 |
4 files changed, 64 insertions, 31 deletions
diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh index b4e58d40..754f8829 100755 --- a/builder/build-initramfs.sh +++ b/builder/build-initramfs.sh @@ -72,11 +72,10 @@ fi set +o errexit source "$(dirname "${BASH_SOURCE[0]}")/dnbd3-rootfs/scripts/rebash/core.sh" -core.import logging -core.import utils core.import exceptions - exceptions.activate +core.import logging +core.import utils logging.set_commands_log_level debug logging.set_log_level critical 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 38817dea..fc99226d 100755 --- a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh +++ b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh @@ -1,9 +1,12 @@ +# region imports source "/usr/lib/rebash/core.sh" core.import utils core.import logging logging.set_commands_log_level debug logging.set_log_level debug +# endregion +# region connect dnbd3 # Close previous connections to be able to run this script many times. dnbd3-client --device "$SLX_DNBD3_DEVICE" --close local IFS_backup="$IFS" @@ -19,29 +22,47 @@ for host in ${SLX_DNBD3_SERVERS}; do 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\"." + 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' -systemd-preserve-process-marker qemu-nbd --connect="$nbd_device" \ - "$SLX_DNBD3_DEVICE" --read-only +# endregion + +# region detect read-only partition +local read_only_device="$SLX_DNBD3_DEVICE" +if ! qemu-img info --output json "$read_only_device" | grep '"format": "raw"' +then + read_only_device='/dev/nbd0' + systemd-preserve-process-marker qemu-nbd --connect="$read_only_device" \ + "$SLX_DNBD3_DEVICE" --read-only -# TODO make nicer :) -touch $nbd_device -udevadm settle + # wait for partitions TODO make nicer :) + touch $read_only_device + udevadm settle +fi -local read_only_partition=$(utils.find_block_device \ - "$SLX_SYSTEM_PARTITION_IDENTIFIER") -if [ -z "$read_only_partition" ]; then - warn no partition found on device "$nbd_device" +local read_only_partition +if ! read_only_partition=$(utils.find_block_device \ + "$SLX_SYSTEM_PARTITION_IDENTIFIER" "$read_only_device"); then + logging.warn "Failed to find unique device with identifier" \ + "'${SLX_SYSTEM_PARTITION_IDENTIFIER}'; matched devices:" \ + "'${read_only_partition}'" emergency_shell fi -# Make read-only partition writable. -## detect partition for persistent storage -local persistent_device="$(utils.find_block_device \ - "$SLX_WRITABLE_DEVICE_IDENTIFIER")" +# endregion + +# region detect writable partition +local persistent_device +if ! persistent_device=$(utils.find_block_device \ + "$SLX_WRITABLE_DEVICE_IDENTIFIER"); then + logging.warn "Failed to find unique device with identifier" \ + "'${SLX_WRITABLE_DEVICE_IDENTIFIER}'; matched devices:" \ + "'${persistent_device}'" +fi + # TODO move somewhere else #local tmp_device="$(utils.find_block_device \ #'$SLX_TMP_PARTITION_IDENTIFIER')" @@ -73,11 +94,23 @@ fi #losetup "$writable_device" persistent_storage.img #persistent='P' +# endregion + +# region combine devices with device mapper local partition_size="$(blockdev --getsz "$read_only_partition")" local writable_partition_name='root' +logging.info "Using read-only device: $read_only_partition" logging.info "Using writable device $writable_device, persistency: $persistent" local chunksize='1' modprobe dm_snapshot dmsetup create "$writable_partition_name" --noudevsync --table \ "0 $partition_size snapshot $read_only_partition $writable_device $persistent $chunksize" dmsetup mknodes --noudevsync "$writable_partition_name" +# enregion + +# region vim modline + +# vim: set tabstop=4 shiftwidth=4 expandtab: +# vim: foldmethod=marker foldmarker=region,endregion: + +# endregion diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh index 64452cfe..c5ae766a 100755 --- a/builder/dnbd3-rootfs/module-setup.sh +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -1,9 +1,19 @@ #!/bin/bash +source $(dirname ${BASH_SOURCE[0]})/scripts/rebash/core.sh +core.import exceptions +exceptions.activate +core.import $(dirname ${BASH_SOURCE[0]})/scripts/build-functions.sh +core.import logging +# TODO set log level via dracut logging options +logging.set_log_level 'info' +logging.set_commands_log_level 'info' +core.import utils +exceptions.deactivate + clean() { # NOTE: This method is currently triggered manually and not supported by # dracut itself. - core_import "$moddir/scripts/build-functions.sh" if [[ -f "$moddir/binaries/nbd/nbd.ko" ]]; then utils_clean_nbd "$moddir/binaries/nbd/" @@ -19,17 +29,8 @@ clean() { } check() { - source "$moddir/scripts/rebash/core.sh" - # TODO migrate from "core_import" to "core.import" when rebash is fixed. - core_import exceptions - - core_import "$moddir/scripts/build-functions.sh" - - # TODO set log level via dracut logging options - logging_set_log_level 'info' - logging_set_commands_log_level 'info' - exceptions_activate + exceptions.activate if [[ ! -f "$moddir/binaries/nbd/nbd.ko" ]]; then utils_compile_nbd "$moddir/binaries/nbd/" @@ -59,7 +60,7 @@ check() { ln --symbolic --force /bin/sh /usr/bin/sh fi - exceptions_deactivate + exceptions.deactivate return 0 } @@ -154,7 +155,7 @@ install() { mount fdisk mkfs.xfs env busybox ps agetty \ insmod qemu-nbd blockdev partx dmsetup sed cut awk tr insmod qemu-nbd \ blockdev partx dmsetup cat cut awk losetup dd mkfs.ext4 grep \ - basename dirname + basename dirname sort # Production: # inst_multiple insmod qemu-nbd blockdev partx dmsetup cat cut awk tr \ # losetup dd mkfs.ext4 grep diff --git a/builder/dnbd3-rootfs/scripts/rebash b/builder/dnbd3-rootfs/scripts/rebash -Subproject 2ce3b6b99b5cee0540138cf124e509abf065095 +Subproject 30c6afbc5afc8ce83ee91f1249e29086d49ce4e |
