diff options
Diffstat (limited to 'modules.d/conf-tgz/hooks/s3-fetch-config.sh')
-rwxr-xr-x | modules.d/conf-tgz/hooks/s3-fetch-config.sh | 63 |
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 |