summaryrefslogtreecommitdiffstats
path: root/builder
diff options
context:
space:
mode:
authortorben2015-12-10 11:35:21 +0100
committertorben2015-12-10 11:35:21 +0100
commita18c0ecedf733f4b186f3dc185b0d0b1a82f15b2 (patch)
tree9ba669d0fab9efdfc6c888a68132ddfcee0e178f /builder
parentAdd dmsetup dependency. (diff)
parentfix import bug (diff)
downloadsystemd-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-xbuilder/build-initramfs.sh5
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh63
-rwxr-xr-xbuilder/dnbd3-rootfs/module-setup.sh27
m---------builder/dnbd3-rootfs/scripts/rebash0
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