diff options
Diffstat (limited to 'modules.d/conf-tgz/hooks/unpack-config-tgz.sh')
-rwxr-xr-x | modules.d/conf-tgz/hooks/unpack-config-tgz.sh | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/modules.d/conf-tgz/hooks/unpack-config-tgz.sh b/modules.d/conf-tgz/hooks/unpack-config-tgz.sh new file mode 100755 index 00000000..a0da0cd3 --- /dev/null +++ b/modules.d/conf-tgz/hooks/unpack-config-tgz.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# -*- coding: utf-8 -*- + +type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh + +# tarcopy <source_dir> <target_dir> +tarcopy() { + [ -d "$1" -a -d "$2" ] || return 1 + cd "$1" + local filelist="$(mktemp)" + find . \! -type d > "$filelist" + tar -c -p -T "$filelist" | tar -xp -C "$2" + rm -f -- "$filelist" + cd - &>/dev/null +} + +# this module unpacks the config.tgz +temporary_extract_directory="$(mktemp -d)" + if [[ -e "/etc/config.tgz" ]]; then + tar --extract --preserve-permissions \ + --file="/etc/config.tgz" \ + --directory="$temporary_extract_directory" + fi + warn "Failed to extract '/etc/config.tgz' to '$temporary_extract_directory'." + warn "$exceptions_last_traceback" +# extracted to temporary directory, now check for SLX_LOCAL_CONFIGURATION + +source "/etc/openslx" +if [[ -n "$SLX_LOCAL_CONFIGURATION" ]]; then + if [[ ! -d "${temporary_extract_directory}/openslx-configs/${SLX_LOCAL_CONFIGURATION}" ]]; then + warn "SLX_LOCAL_CONFIGURATION is set but no corresponding folder found in '/etc/config.tgz'. Ignoring..." + else + tarcopy "${temporary_extract_directory}/openslx-configs/${SLX_LOCAL_CONFIGURATION}" "${temporary_extract_directory}" + fi +fi + # purge openslx-configs/ + rm -rf "${temporary_extract_directory}/openslx-configs" + tarcopy "${temporary_extract_directory}" "$NEWROOT" + + + # TODO error handling |