blob: fbd7bdbfee50e5e1094693a7f21fbd09e741ef0a (
plain) (
tree)
|
|
#!/bin/ash
# Copyright (c) 2007 - 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
#
# Main script for cd-boot demo initial ramdisk - preloading environment for
# for running OpenSLX linux stateless clients version 4 for testing
#############################################################################
# compute prefix bit number from netmask
nm2pref () {
set $(IFS="."; echo $1)
local n=0
local i
for i in $1 $2 $3 $4 ; do
case $i in
0) break ;;
128) n=$(($n + 1)) ; break ;;
192) n=$(($n + 2)) ; break ;;
224) n=$(($n + 3)) ; break ;;
240) n=$(($n + 4)) ; break ;;
252) n=$(($n + 6)) ; break ;;
254) n=$(($n + 7)) ; break ;;
255) n=$(($n + 8)) ; continue ;;
esac
done
echo $n
}
#############################################################################
# device files get their own filesystem (to be move mounted later)
devdir="/dev"
mount -n -t tmpfs -o 'size=25%,mode=0755' initramfsdevs ${devdir}
# create basic device files an directories in dev (for most hardware related
# devices mdev should handle that)
for i in "/dev/mem c 1 1" "/dev/null c 1 3" "/dev/zero c 1 5" \
"/dev/urandom c 1 9" "/dev/kmsg c 1 11" "/dev/tty0 c 4 0" \
"/dev/tty1 c 4 1" "/dev/tty2 c 4 2" "/dev/tty3 c 4 3" \
"/dev/tty4 c 4 4" "/dev/tty5 c 4 5" "/dev/tty6 c 4 6" \
"/dev/tty7 c 4 7" "/dev/tty8 c 4 8" "/dev/tty9 c 4 9" \
"/dev/tty10 c 4 10" "/dev/tty c 5 0" "/dev/console c 5 1" \
"/dev/ptmx c 5 2" "/dev/psaux c 10 1" "/dev/agpgart c 10 175" \
"/dev/fb0 c 29 0" "/dev/bootsplash p" "/dev/xconsole p"; do
mknod $i
done
mkdir -p ${devdir}/pts ${devdir}/shm ${devdir}/.udevdb ${devdir}/.udev
# source functions file common for all distros, messages contains all error
# and info output (for some reason the error output is not produced properly
# - crash)
# initramfs-setup configuration (common settings for all clients using a
# certain InitRamFS generated by slxmkramfs/mkdxsinitrd)
[ -f /etc/initramfs-setup ] && . /etc/initramfs-setup 2>/dev/null
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin
export DEBUGLEVEL=0
export KERNEL="${ramfs_kernver}"
export NWMODULES="${ramfs_nicmods}"
# set a default LAN interface, might be modified for WLAN or on machines with
# more than one ethernet card built in
nwif="eth0"
# mount the important standard directories
[ ! -f /proc/cpuinfo ] && mount -n -t proc proc /proc
[ ! -d /sys/class ] && mount -n -t sysfs sysfs /sys
# keep quiet
#echo "0 0 0 0" >/proc/sys/kernel/printk
# fixme: shut down if script fails
trap "exec (sleep 30; echo o>/proc/sysrq-trigger)" \
SIGHUP SIGINT SIGPIPE SIGTERM
# if no kernel version is set, try to get it directly from /proc
if [ -z $KERNEL ] ; then
KERNEL=$(cat /proc/version)
KERNEL=${KERNEL#*version }
KERNEL=${KERNEL% (*) (*}
fi
# load network adaptor modules
for mod in ${NWMODULES}; do
modprobe ${MODPRV} $mod || echo "module $mod did not load for some reason"
usleep 10000
done
# read kernel commandline
read KCMDLINE < /proc/cmdline
export KCMDLINE
# read the system wide machine-setup and then the kernel commandline
for opts in $(sed "s/#.*//" /etc/initramfs-setup) ${KCMDLINE} ; do
case ${opts} in
debug)
DEBUGLEVEL=1;;
# ... or a specified debug level
esac
done
# at this point a timer should be started to ensure an automated reboot
# or halt of the machine if SLX init does not succeed (e.g. missing kernel
# module for the network adaptor)
if [ "${DEBUGLEVEL}" -gt 0 ] ; then
cat<<EOF > /bin/watchdog
#!/bin/ash
echo \$$ > /tmp/watchdogpid
[ ! -f /proc/version ] && mount -n -t proc proc /proc
sleep 120 2> /dev/null
echo "o" > /proc/sysrq-trigger
EOF
chmod u+x /bin/watchdog
watchdog &
fi
if [ -n "${essid}" ] ; then
# WLAN setup will most probably change the network interface name stored in
# nwif (to wlan0 or something like that)
:
else
# check here for the active ethernet link
ip link show dev eth1 >/dev/null 2>&1 && echo "more than one nw if found"
fi
# set up loopback networking and power up ethernet
ip link set dev lo up
ip addr add 127.0.0.1/8 dev lo
ip link set dev $nwif up || echo "noeth"
# start udhcpc here
mkdir -p /usr/share/udhcpc
echo -e '#!/bin/ash\nunset infomsg HOME IFS mask lease interface DEBUGLEVEL\n
set >/tmp/ipstuff' >/usr/share/udhcpc/default.script
chmod u+x /usr/share/udhcpc/default.script
[ -f /lib/modules/@@@KERNVER@@@/kernel/net/packet/af_packet.ko ] && \
modprobe -q af_packet
[ -n $vci ] && vci="-V $vci"
udhcpc -b -q $vci -s /usr/share/udhcpc/default.script -i $nwif #2>/dev/null
. /tmp/ipstuff || echo "no ip config"
ip addr add $ip/$(nm2pref $subnet) dev $nwif
ip route add default via $router
# at this point a little selection script could be downloaded, which lets the
# user choose what kind of SLX client he wants to get
# get kernel and initramfs
wget -c -O /tmp/kernel http://132.230.4.73/trac/kdefault
wget -c -O /tmp/iramfs http://132.230.4.73/trac/idefault
/bin/ash
# start the new kernel with initialramfs and cmdline
kexec -l /tmp/kernel --initrd=/tmp/iramfs --append="ip=$ip:$siaddr:$router:$subnet\
file=http://132.230.4.73/trac/default.tgz debug=3"
kexec -e
|