summaryrefslogtreecommitdiffstats
path: root/data/stage3.1/init
blob: 0db7597e8839f4e0122b7aabdf85f3fdc635310b (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
#!/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:/openslx/bin:/openslx/sbin

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


# read kernel command line for debugging switch
read KCL < /proc/cmdline
export KCL
for opts in ${KCL}; do
	case ${opts} in
		debug)
			DEBUG=1;;
		ip=*)
			# process IP info
			ipinfo=${opts#ip=};;
	esac
done


modprobe usbhid
modprobe pcnet32
nwif="eth0"

# set up loopback networking
[ $DEBUGLEVEL -eq 20 ] && echo "** starting ip config at $(sysup)"
ip link set dev lo up 2>/dev/null
ip addr add 127.0.0.1/8 dev lo 2>/dev/null
ip link set dev $nwif up  2>/dev/null || error "$init_noeth"

# 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

for MOD in aufs squashfs sunrpc lockd fscache auth_rpcgss nfs_acl nfs; do
	insmod /lib/modules/${MOD}.ko
done

mkdir -p /dev/shm/union /dev/shm/uniontmp /rorootfs
mount -n /mnt/openslx.sqfs /rorootfs
mount -n -t tmpfs none /dev/shm/uniontmp

mount -n -t aufs -o br:/dev/shm/uniontmp:/rorootfs=ro none /mnt
mkdir -p /mnt/uniontmp
mount -n --move /dev/shm/uniontmp /mnt/uniontmp




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'
fi

for mnt in proc sys run ; do
  umount -n $mnt
done

unset BOOT_IMAGE initrd
# new style of pivoting (switch_root or run-init)
exec /sbin/switch_root -c /dev/console /mnt /usr/lib/systemd/systemd