summaryrefslogtreecommitdiffstats
path: root/modules.d/dnbd3-rootfs/hooks/fetch-config.sh
blob: 021a4c065d4e3d337a52d6a0c3301d4ee6ea6949 (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
#!/usr/bin/env bash
# -*- coding: utf-8 -*-
# region imports
type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh
# endregion

slx_server="$(getarg slxsrv=)"
slx_server_base="$(getarg slxbase=)"

# if no slxsrv was specified, use the server the kernel was
# downloaded from as fallback. Mostly for legacy PXE boot.
if [ -z "$slx_server" ]; then
	slx_server="$(getarg BOOT_IMAGE= | awk -F[/:] '{print $4}')"
fi
if [ -z "$slx_server" ]; then
	# use tftp server from ip parameter
	slx_server="$(getarg ip= | awk -F: '{print $2}' )"
fi
if [ -z "$slx_server" ]; then
	# we have a problem :/
	emergency_shell "Failed to determine SLX server to fetch config from."
fi

# build config_url
config_url="http://${slx_server#@}/${slx_server_base}/config"

# check if system's uuid was set
if [ -s "/run/system-uuid" ]; then
	uuid=$(cat "/run/system-uuid")
	if [ -n "$uuid" ]; then
		config_url="${config_url}?uuid=${uuid}"
	fi
fi

config_path="/etc/openslx.tmp"

echo "Downloading '$config_url'..."
slx-tools download_retry --slx-time 20 -sS "$config_url" > "$config_path"
return_code="$?"

if [ ! -s "$config_path" ] ; then
	emergency_shell "Downloading netboot configuration file from '$config_url' failed with: $return_code"
fi

if ! ash -n "$config_path"; then
	emergency_shell "Netboot configuration failed syntax check!"
fi

# remember kcl server and base
{
	echo "SLX_KCL_SERVERS='$slx_server'"
	echo "SLX_BASE_PATH='$slx_server_base'"
	echo "# Config fetched from $config_url"
	echo "CONFIG_DOWNLOAD_TIME=$(sed -r 's/^([0-9]+)\.([0-9]+).*$/\1\2/' /proc/uptime)"
	echo '#_RCONFIG_TAG'
} > /etc/openslx

# finally copy remote config into it
cat "$config_path" >> /etc/openslx

# slxsrv overrides SLX_DNBD3_SERVERS if prefixed with @
[ "${slx_server#@}" != "${slx_server}" ] && sed -i "s/^SLX_DNBD3_SERVERS=.*/SLX_DNBD3_SERVERS='${slx_server#@}'/" "/etc/openslx"
true