summaryrefslogblamecommitdiffstats
path: root/core/rootfs/rootfs-stage31/data/inc/activate_sysconfig
blob: d79b98efeb6bb3731f0ed7bccf8819e00132c0bc (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                         
                     


                                                                             
                                                                                  








                                                                                          
                    

                                                                                   
                                                                       






                                                                         
                     











                                                                                              

                
 

                                                                                                                    
















                                                                                                                                     








                                                                                    



















                                                                                                                                    









                                                              
                            
                                                                  










                                                                                 
                                                                   














                                                                                       

    
#!/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_text_config() {
	[ -e "$CONFIG" ] && grep -E '^#_RCONFIG_TAG$' "$CONFIG" > /dev/null \
		&& echo "Config already fetched." && return 0

	download "${SLX_BASE_PATH}/config$UUID_URL" "${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_tgz() {
	[ -e "${CONFIG}.tgz" ] && echo "config.tgz already downloaded." && return 0

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


#########################################################################
#
# This function updates the downloaded config with the IP information
# received from /inc/setup_network <-- plus 500 other things
merge_text_config() {
	# 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
	return 0
}

install_config_tgz() {
	[ ! -e "${CONFIG}.tgz" ] && { echo "Cannot install config.tgz. '${CONFIG}.tgz' 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
#

# Determine machine uuid, save for later
get-uuid
if [ -e "/run/system-uuid" ]; then
	UUID=$(cat "/run/system-uuid")
	if [ -n "$UUID" ]; then
		UUID_URL="?uuid=$UUID"
	fi
	cp "/run/system-uuid" "${FUTURE_ROOT}/etc/system-uuid"
fi

# Set up /opt/openslx/config
fetch_text_config || 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"
merge_text_config || drop_shell "Could not update text based config"

# Fetch config.tgz if desired
if [ -z "$SLX_NO_CONFIG_TGZ" ]; then
	fetch_config_tgz || drop_shell "Could not download config.tgz"
	install_config_tgz || drop_shell "Could not extract config.tgz"
fi

# Change systemd target if desired
if [ -n "$SLX_SYSTEMD_TARGET" ]; then
	SLX_SYSTEMD_TARGET="${SLX_SYSTEMD_TARGET%.target}.target"
	mkdir -p "${FUTURE_ROOT}/etc/systemd/system"
	ln -sf "$SLX_SYSTEMD_TARGET" "${FUTURE_ROOT}/etc/systemd/system/default.target"
fi

true