blob: 703af9745b78eda0c3a1f3bfe5056ae8c7426587 (
plain) (
tree)
|
|
#!/bin/ash
# Copyright (c) 2009 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org
#
# preboot script for user interaction with OpenSLX preloading environment for
# Linux stateless clients (fetched by Preboot init over the net)
# get configuration
. /etc/initramfs-setup
. ./preboot-scripts/dialog.functions
# bring the mac address into the standard format 01-<MAC>
client=$(echo 01-$macaddr|sed "s/:/-/g")
# check if already a configuration is available to decide if user interaction
# is required (path is to be fixed)
wget -q -O /tmp/have-user-config "$boot_uri/users.pl?user=${client}"
have_user_config=$(cat /tmp/have-user-config);
if [ "x1" == "x$have_user_config" ]; then
wget -q -O /tmp/oldconfig "$boot_uri/users.pl?user=${client}&action=read"
. /tmp/oldconfig
menu_oldconfig $oldconfig
else
menu_firststart
fi
rm result;
# Switch here for several boot TYPE=fastboot/directkiosk/cfgkiosk/slxconfig
# fastboot - no interaction use system from client config
# directkiosk - start the default slx system into kiosk (using vmchooser)
# cfgkiosk - offer the user changes to his kiosk system (GUI environment)
# slxconfig - offer the user set of configuration options, like setting a non-
# priviledged user, root password, standard gui, plugins to activate ...
# we expect to have a system selection dialog file in /preboot/bootmenu.dialog
while [ "x$(cat result)" = "x" ] ; do
dialog --file bootmenu.dialog 2>result
done
# source the system to boot configuration ($kernel, $initramfs, $append,
# $label)
sysname=$(cat result)
. ./$sysname
sysname=$(readlink $sysname)
# set basic post data information
postdata="system=${sysname}&preboot_id=${preboot_id}&client=${client}"
# ask for desired debug level in stage3 if debug!=0 in preboot
echo "0" >result
[ x$DEBUGLEVEL != x0 ] && dialog --no-cancel --menu "Choose Debug Level:" \
20 65 10 "0" "no debug output (splash)" \
"2" "standard debug output" \
"3" "debug output and shell" 2>result
# change debug level here if required (adjusted for the rest of the interactive
# part)
DEBUGLEVEL=$(cat result)
if [ x$DEBUGLEVEL != x0 ]; then
debug="debug=$DEBUGLEVEL"
else
debug=""
fi
# send information to configuration host via http
wget --post-data "$postdata" -O /tmp/cfg-error \
$boot_uri/cgi-bin/user_settings.pl
[ "x$DEBUGLEVEL" != x0 -a grep -qe "Error:" /tmp/cfg-error 2>/dev/null ] && \
dialog --msgbox "An error occured ..." # to be elaborated
# fetch kernel and initramfs of selected system
dialog --infobox "Loading kernel of ${sysname} ..." 3 65
wget -q -O /tmp/kernel $boot_uri/$kernel
dialog --infobox "Loading initial ramfs of ${sysname} ..." 3 65
wget -q -O /tmp/initramfs $boot_uri/$initramfs
# read primary IP configuration to pass it on (behaviour like IPAPPEND=1 of
# PXElinux)
. /tmp/ipstuff
[ "x$DEBUGLEVEL" != x0 ] && { clear; ash; }
# start the new kernel with initialramfs and composed cmdline
dialog --infobox "Booting OpenSLX client $label ..." 3 65
kexec -l /tmp/kernel --initrd=/tmp/initramfs \
--append="$append file=$boot_uri/${preboot_id}/client-config/${sysname}/${client}.tgz $quiet ip=$ip:$siaddr:$router:$subnet:$dnssrv $debug" 2>/dev/null
kexec -e >/dev/null 2>&1
|