blob: b3681eee9e17f71073fc59acbc2e485aabdda007 (
plain) (
tree)
|
|
#!/bin/ash
# Copyright (c) 2012 - 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
#
# First script for initial ramfs for OpenSLX linux stateless clients
#############################################################################
# set PATH correctly
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# import common functions
. "/inc/functions"
# mount the important standard directories
[ ! -f /proc/cpuinfo ] && busybox mount -n -t proc proc /proc
bench_event "KERNEL" "Kernel initialized"
[ ! -d /sys/class ] && busybox mount -n -t sysfs sysfs /sys
busybox mount -n -t tmpfs -o 'mode=755' run "/run"
# preparations for mounting stage3.2
FUTURE_ROOT="/dev/shm/uniontmp"
mkdir -p "$FUTURE_ROOT" /rorootfs
busybox mount -n -t tmpfs -o 'mode=755' none "$FUTURE_ROOT"
mkdir -p "$FUTURE_ROOT/opt/openslx"
# let kernel know that mdev is to be used for hotplug
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
# read kernel command line for debugging switch
DEBUG=0
SPLASH=0
read KCL < "/proc/cmdline"
for opts in ${KCL}; do
case "${opts}" in
debug=*)
DEBUG=${opts#debug=} ;;
ip=*)
# process IP info
IPINFO=${opts#ip=} ;;
nfs=*)
NFS=${opts#nfs=}
NFSPATH=${NFS#*:}
NFSSERVER=${NFS%:/*}
;;
BOOTIF=*)
MAC="$( echo "$opts" | cut -b 11- | tr '-' ':' | tr '[A-Z]' '[a-z]' )" ;; # make mac lowercase for udev (see setup_network)
splash*)
[ -e "/etc/splash.ppm" ] && SPLASH=1
esac
done
. "/inc/drm.functions"
if [ "$SPLASH" -eq 1 ]; then
if setup_gfx; then
echo "1 1 0 1" > /proc/sys/kernel/printk
exec 4>&1 5>&2 > /dev/null 2>&1
MUTED_OUTPUT=1
echo -e "\033[?25l"
setsid fbsplash -x -c -s /etc/splash.ppm &
fi
else
setup_gfx
fi
# discover devices
mdev -s
bench_event "MDEV" "mdev done"
# suppress kernel output if neither DEBUG nor SPLASH is set
if [ $SPLASH -eq 0 ]; then
[ $DEBUG -ge 1 ] && echo "4 4 1 7" > /proc/sys/kernel/printk || echo "1 1 0 1" >/proc/sys/kernel/printk
fi
[ $DEBUG -ge 4 ] && drop_shell "Requested Debug Shell: before network."
. "/inc/setup_network" || . "/inc/setup_network_retry" || drop_shell "Error setting up network"
bench_event "NETWORK" "Network up and running"
[ $DEBUG -ge 3 ] && drop_shell "Requested Debug Shell: after network/before configuring."
. "/inc/activate_sysconfig" || drop_shell "Could not source /inc/activate_sysconfig"
bench_event "CONFIG" "Downloaded config"
# From here on, we have all the vars from /opt/openslx/config
[ $DEBUG -ge 2 ] && drop_shell "Requested Debug Shell: after configuration/before stage32."
. "/inc/setup_stage32" || drop_shell "Problem setting up stage3.2"
bench_event "STAGE32" "Downloaded stage 3.2"
# copy files needed for stage3.2 to FUTURE_ROOT
echo "Copying busybox etc. to stage32..."
tar -cp "/bin" "/sbin" "/usr/bin" "/usr/sbin" "/inc/functions" | tar -xp -C "${FUTURE_ROOT}/opt/openslx/"
# set the SLX_ROOT_PASS if given in config
if [ ! -z "$SLX_ROOT_PASS" ]; then
sed -i "s#^root:[^:]*:#root:$SLX_ROOT_PASS:#" "${FUTURE_ROOT}/etc/shadow"
fi
# one last debug shell if activated
[ $DEBUG -ge 1 ] && drop_shell "Requested Debug Shell: before switch_root."
# need /proc for this ;)
bench_event "PRESWITCH" "Switching to stage 3.2"
# unmount filesystems
for mnt in proc sys run ; do
busybox umount -f -l "/$mnt" 2>/dev/null
done
echo "Switching root...."
echo "$bench_result" > "${FUTURE_ROOT}/opt/openslx/.benchmark"
# Prepare environment (HOME is needed as a hack for nss_ldap with ssl and no caching)
unset BOOT_IMAGE initrd KCL ip slxbase slxsrv IPINFO vga ip MAC BOOTIF DEBUG OLDPWD MUTED_OUTPUT
export HOME=/
export init="/usr/lib/systemd/systemd"
export recovery=
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/usr/sbin:/opt/openslx/usr/bin:/opt/openslx/sbin:/opt/openslx/bin"
exec /sbin/switch_root -c /dev/console /mnt /usr/lib/systemd/systemd
|