#!/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