summaryrefslogtreecommitdiffstats
path: root/remote/core/data/init
blob: 54044938d5d463da59fec1f7564a3d75f715b9cd (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
149
150
151
152
153
#!/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
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)

( hwinfo --gfxcard > /etc/hwinfo ) &
( hwinfo --netcard > /etc/netcard ) &

# 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=};;
		nfs=*)
      			nfs=${opts#nfs=}
      			nfspath=${nfs#*:}
      			nfsserver=${nfs%:/*}
    		;;
	esac
done

while ps | grep -v grep | grep -q "  hwinfo --gfxcard" ; do usleep 10 ; done

case $(cat /etc/hwinfo) in
	*i915*)
	 	modprobe -a i915 2>/dev/null
		;;
       *intel*|*Intel*)
	        modprobe -a i810 i830 i915 2>/dev/null
        	;;
       *nvidia*|*NVidia*|*nouveau*)
	        modprobe -q nouveau 2>/dev/null
        	;;
       *radeon*|*Radeon*)
	         modprobe -q radeon 2>/dev/null
        	;;
       *mga*|*matrox*|*Matrox*)
	        modprobe -q mga 2>/dev/null
	        ;;
       *VMWARE*)
                ;;
       *)
	        modprobe -qa r128 savage sis tdfx ttm via viafb
        	;;
esac
( modprobe -a drm fbcon; mdev -s ) &

# load required network and usb controller drivers, filter out wireless adaptors
while ps | grep -v grep | grep -q "  hwinfo --netcard" ; do usleep 10 ; done
nwcardlist="forcedeth|e1000e|e1000|e100|tg3|via-rhine|r8169|pcnet32"
echo "modprobe -qa usbhid hid-bright" >/etc/modprobe.base
grep modprobe /etc/netcard | grep -E "$nwcardlist" \
  | sed 's/.* Cmd: "//;s/"//;s/modprobe/modprobe -qb/' \
  | sort -u >>/etc/modprobe.base
# virtio hack
if [ $(grep -ic "virtio_pci" /etc/modprobe.base) -ge 1 ]; then
  echo "modprobe -q virtio_net" >>/etc/modprobe.base
fi
/bin/sh /etc/modprobe.base; mdev -s

# setup network
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 || { 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
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
	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
	mount -n /mnt/openslx.sqfs /rorootfs || { echo "Problem mounting Squashfs. Dropping to DEBUG shell."; DEBUG=1; }
fi
			
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

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