summaryrefslogblamecommitdiffstats
path: root/modules.d/dnbd3-rootfs/hooks/fetch-config.sh
blob: 021a4c065d4e3d337a52d6a0c3301d4ee6ea6949 (plain) (tree)
1
2
3
4
5
6
7
8
9
                   
                       
                
                                                                 
           
 

                                    
 


                                                           
                                                                    

                             

                                                          

                             

                                                                              

  


                                                             



                                      
                                                       


          
                              
 
                                   
                                                                         
                

                                 
                                                                                                             


                                
                                                                    
  
 
                              
 

                                               

                                                                                           
                            
                

                                    
                                  
 

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