summaryrefslogtreecommitdiffstats
path: root/modules.d/conf-tgz/hooks/s3-fetch-config.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules.d/conf-tgz/hooks/s3-fetch-config.sh')
-rwxr-xr-xmodules.d/conf-tgz/hooks/s3-fetch-config.sh63
1 files changed, 63 insertions, 0 deletions
diff --git a/modules.d/conf-tgz/hooks/s3-fetch-config.sh b/modules.d/conf-tgz/hooks/s3-fetch-config.sh
new file mode 100755
index 00000000..021a4c06
--- /dev/null
+++ b/modules.d/conf-tgz/hooks/s3-fetch-config.sh
@@ -0,0 +1,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