summaryrefslogtreecommitdiffstats
path: root/initramfs/cdboot/init
blob: 8a93d0520d00ba11acb0f5ddd1e2812aa7456504 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/sh
# Copyright (c) 2003 - 2006 - RZ Uni Freiburg
# Copyright (c) 2006, 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 new type of initial ramdisk for OpenSLX linux stateless
# clients version 4

#############################################################################
# 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="${slxconf_kernver}"
export NWMODULES="${slxconf_listnwmod}"

# 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} -lt 3 -o ${DEBUGLEVEL} = 8 ] ; then
  cat<<EOF > /bin/watchdog
#!/bin/ash
echo \$$ > /tmp/watchdogpid
[ ! -f /proc/version ] && mount -n -t proc proc /proc
. /etc/functions
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 && error "$init_2eif" nonfatal
fi

# set up loopback networking
[ $DEBUGLEVEL -eq 20 ] && echo "** starting ip config at $(sysup)"
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

[ -f /tmp/confviadhcp ] && . /tmp/confviadhcp
    [ -z "$clientip" -o -z "$subnet_mask" -o -z "$gateway" \
      -o -z "$broadcast_address" ] && error "$init_errdhcp"
    ip addr add $clientip/$(nm2pref $subnet_mask) broadcast $broadcast_address \
      dev $nwif
    ip route add default via $gateway

# start the new kernel with initialramfs and cmdline
#kexec