blob: 93df822cf750b4ec5a8e0d1db7fc98ada91e80a9 (
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
#!/bin/sh
# 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
#############################################################################
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH=/usr/lib64
mount -n -t tmpfs -o 'mode=755' run "/run"
# mount the important standard directories
[ ! -f /proc/cpuinfo ] && mount -n -t proc proc /proc
[ ! -d /sys/class ] && mount -n -t sysfs sysfs /sys
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
# read graphic and network adaptor configuration (without proprietary drivers yet)
# TODO: must ugly hack ever... needs to be improved when we add prop drivers
for DRM in /lib/modules/*/kernel/drivers/gpu/drm/*.ko /lib/modules/*/kernel/drivers/gpu/drm/*/*.ko; do
echo "Trying to load module $DRM"
insmod "$DRM"
done
# read kernel command line for debugging switch
DEBUG=0
read KCL < /proc/cmdline
export KCL
for opts in ${KCL}; do
case ${opts} in
debug*)
DEBUG=1 ;;
splash*)
SPLASH=1 ;;
ip=*)
# process IP info
ipinfo=${opts#ip=} ;;
nfs=*)
nfs=${opts#nfs=}
nfspath=${nfs#*:}
nfsserver=${nfs%:/*}
;;
BOOTIF=*)
macaddr="$( echo "$opts" | cut -b 11- | tr '-' ':' )" ;;
esac
done
echo "Mac address is '$macaddr'"
mdev -s &
if [ "x$SPLASH" == "x1" -a "x$DEBUG" != "x1" ]; then
# start plymouth
plymouthd && plymouth show-splash
fi
# still needed?
#echo "modprobe -qa usbhid hid-bright" >/etc/modprobe.base
#/bin/sh /etc/modprobe.base; mdev -s
# setup network
nwif="eth0"
# set up loopback networking
echo "Setting up loopback"
ip link set dev lo up 2>/dev/null
ip addr add 127.0.0.1/8 dev lo 2>/dev/null
echo "Setting up $nwif"
ip link set dev $nwif up 2>/dev/null || { echo "No link for $nwif, dropping to shell.."; setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'; }
# analyze ip information from the kernel command line and put parts
# of it into several variables
if [ -n "$ipinfo" ] ; then
getip () {
local val="$ipinfo:"; i=$(($1 - 1));
while [ $i -gt 0 ] ; do
val=${val#*:} ; i=$(($i - 1));
done;
echo $val|sed "s/:.*//"; }
clientip=$(getip 1)
serverip=$(getip 2)
gateway=$(getip 3)
subnet_mask=$(getip 4)
broadcast_address=$(ipcalc -s -b $clientip $subnet_mask|sed s/.*=//)
[ -z "$broadcast_address" ] && broadcast_address=255.255.255.255
# we might have an idea of the dns server via preboot
dns_srv=$(getip 5)
[ -n "$dns_srv" ] && echo nameserver $dns_srv >/etc/resolv.conf;
echo -e "# ip configuration written by $0 script:\nclientip=$clientip\n\
subnet_mask=$subnet_mask\ngateway=$gateway\nserverip=$serverip\n\
broadcast_address=$broadcast_address" >>/etc/initramfs-setup
# set static ip address
ip addr add $clientip/$(ipcalc -s -p $clientip $subnet_mask|sed s/.*=//) \
broadcast $broadcast_address dev $nwif 2>/dev/null
ip route add default via $gateway 2>/dev/null
else
noipyet="yes"
fi
# load local file systems - in kernel now! :-)
#modprobe aufs
#modprobe squashfs
mkdir -p /dev/shm/union /dev/shm/uniontmp /rorootfs
mount -n -t tmpfs none /dev/shm/uniontmp
if [ -n "$nfs" ] ; then
echo "Mounting stage 3.2 as NFS"
mount -t nfs -o ro,async,nolock ${nfsserver}:${nfspath} /rorootfs || { echo "Problem mounting NFS-Directory from ${nfsserver}:${nfspath}. Dropping to DEBUG shell."; DEBUG=1; }
else
echo "Mounting stage 3.2 as SquashFS"
mount -t squashfs /mnt/$(ls /mnt) /rorootfs || { echo "Problem mounting Squashfs. Dropping to DEBUG shell."; DEBUG=1; }
fi
if [ $DEBUG -ge 1 ]; then
echo "Starting debug shell, CTRL + D will start Stage 3.2."
setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
else
#Debug is not set so hide kernel debug output
echo "0" >/proc/sys/kernel/printk
fi
echo "Building aufs..."
mount -n -t aufs -o br:/dev/shm/uniontmp:/rorootfs=ro none /mnt
mkdir -p /mnt/uniontmp /mnt/tmp
mount -n --move /dev/shm/uniontmp /mnt/uniontmp
# create udev rule for nic we booted from
echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="'$macaddr'", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' > "/mnt/etc/udev/rules.d/70-net-boot-nic-name.rules"
for mnt in proc sys run ; do
umount -n $mnt
done
echo "Switching root...."
unset BOOT_IMAGE initrd
[ "x$SPLASH" == "x1" -a "x$DEBUG" != "x1" ] && plymouth update-root-fs --new-root-dir=/mnt
# new style of pivoting (switch_root or run-init)
exec /sbin/switch_root -c /dev/console /mnt /usr/lib/systemd/systemd
|