summaryrefslogtreecommitdiffstats
path: root/remote/rootfs/rootfs-stage31/data/inc/activate_sysconfig
blob: ec98ff700dc13bb3872c8afe7f4a59656cfcc63e (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/ash

echo "Configuring stage 3.2 ..."

# first a few variables
CONFIG="${FUTURE_ROOT}/opt/openslx/config"

#########################################################################
#
# This function downloads the config containing environment variables
#
fetch_sysconfig() {
	[ -e "$CONFIG" ] && grep -E '^#_RCONFIG_TAG$' "$CONFIG" > /dev/null \
		&& echo "Config already fetched." && return 0

	download "${SLX_BASE_PATH}/config" "${CONFIG}-remote" || return 1

	echo "# Config fetched from $URL" >> "$CONFIG"
	echo "#_RCONFIG_TAG" >> "$CONFIG"
	cat "${CONFIG}-remote" >> "$CONFIG"
}
#########################################################################
#
# This function downloads the config.tgz and unpacks it to $TARGET_PATH <-- no it doesn't!
#
fetch_config_files() {
	[ -e "${CONFIG}.tgz" ] && echo "config.tgz already downloaded." && return 0

	download "${SLX_BASE_PATH}/config.tgz" "${CONFIG}.tgz"
}


#########################################################################
#
# This function updates the downloaded config with the IP information
# received from /inc/setup_network <-- plus 500 other things
update_sysconfig() {
	# sanity checks
	[ ! -e "${CONFIG}" ] && { echo "Cannot update. '$CONFIG' does not exist."; return 1; }

	# write IP and SLX_SERVER configuration to $CONFIG
cat >> "$CONFIG" <<HEREEND
# IP Config written in stage31
SLX_PXE_CLIENT_IP='$CLIENTIP'
SLX_PXE_SERVER_IP='$SERVERIP'
SLX_PXE_GATEWAY='$GATEWAY'
SLX_PXE_DNS='$DNS_SERVER'
SLX_PXE_MAC='$BRIDGEMAC'
HEREEND

	[ ! -e "${CONFIG}.tgz" ] && { echo "Cannot update. '$CONFIG' does not exist."; return 1; }

	# setup hardware clock
	. "${CONFIG}"
	if [ "x$SLX_BIOS_CLOCK" == "xlocal" ]; then
		hwclock -s -l
	elif [ "x$SLX_BIOS_CLOCK" == "xutc" ]; then
		hwclock -s -u
	fi

	local TEMP_EXTRACT_DIR="/tmp/config.tgz.tmp"
	# TODO perserve existing directories permissions (but overwrite the permissions of files!)
	mkdir -p "${TEMP_EXTRACT_DIR}"
	tar xf "${CONFIG}.tgz" -C "${TEMP_EXTRACT_DIR}" || { echo "Could not untar ${CONFIG}.tgz to ${TEMP_EXTRACT_DIR}"; return 1; }
	chown -R 0:0 "${TEMP_EXTRACT_DIR}" 2>/dev/null
	cd "${TEMP_EXTRACT_DIR}"
	# first we look for local config.tgz files, which we merge with the common
	# config.tgz files
	if [ -n "${SLX_LOCAL_CONFIG}" ]; then
		local MOD
		for MOD in ${SLX_LOCAL_CONFIG}; do
			local LOCAL_CONFIG_DIR="openslx-configs/${MOD}"
			if [ -d "${LOCAL_CONFIG_DIR}" ]; then
				tarcopy "${LOCAL_CONFIG_DIR}" "${TEMP_EXTRACT_DIR}"
				echo "Merged local configuration files for '${MOD}'"
			fi
		done
	fi
	# purge openslx-configs/*
	rm -rf -- "openslx-configs/"
	# now just tarcopy them to future root
	tarcopy "${TEMP_EXTRACT_DIR}" "${FUTURE_ROOT}"
	# cleanup the downloaded stuff
	cd /
	rm -rf -- "${TEMP_EXTRACT_DIR}"
	[ $DEBUG -eq 0 ] && rm -f -- "${CONFIG}.tgz"
	# Display branding logo if splash screen is shown
	[ "x${MUTED_OUTPUT}" = "x1" ] && [ -e "${FUTURE_ROOT}/etc/branding.ppm" ] && fbsplash -s "${FUTURE_ROOT}/etc/branding.ppm" &
	return 0
}


#########################################################################
#
# MAIN PART
#

fetch_sysconfig || drop_shell "Could not download remote config"
if ! ash -n "${CONFIG}-remote"; then
	echo -e "\n\tFATAL: Could not download configuration!"
	echo -e "\tAborting boot since the system would be in an unusable state."
	echo -en "\tRebooting in 60 seconds"
	timeout=60
	while [ $(( timeout-- )) -gt 0 ]; do
		echo -n "."
		sleep 1
	done
	echo b > /proc/sysrq-trigger
fi
. "${CONFIG}-remote" || drop_shell "Could not source remote config"
fetch_config_files || drop_shell "Could not download config.tgz"
update_sysconfig || drop_shell "Could not update sysconfig"
true