summaryrefslogtreecommitdiffstats
path: root/modules.d/conf-tgz/hooks/unpack-config-tgz.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules.d/conf-tgz/hooks/unpack-config-tgz.sh')
-rwxr-xr-xmodules.d/conf-tgz/hooks/unpack-config-tgz.sh41
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