summaryrefslogtreecommitdiffstats
path: root/builder/modules.d/conf-tgz/hooks/unpack-config-tgz.sh
blob: a0da0cd32f60712492ac017854a00f446e2972b0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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