summaryrefslogtreecommitdiffstats
path: root/remote/rootfs/rootfs-stage31/data/init
blob: 4b3a800bebafafb9ec55ca13326f159dc2e42c04 (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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/bin/ash
# Copyright (c) 2013, 2014 - bwLehrpool Projekt
# 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
#############################################################################

# set PATH correctly
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

# import common functions
. "/inc/functions"

# mount the important standard directories
[ ! -f /proc/cpuinfo ] && busybox mount -n -t proc proc /proc
bench_event "KERNEL" "Kernel initialized"
[ ! -d /sys/class ] && busybox mount -n -t sysfs sysfs /sys

# NOTE: busybox mount is only available through the busybox binary,
# the link had to be dropped, to prevent bugs in the stage32.
busybox mount -n -t devtmpfs -o 'rw,relatime,nosuid,noexec,mode=0755' initramfsdevs /dev
busybox mount -n -t tmpfs -o 'mode=755' run "/run"

# preparations for mounting stage3.2
FUTURE_ROOT="/dev/shm/uniontmp"
mkdir -p "$FUTURE_ROOT" /rorootfs
busybox mount -n -t tmpfs -o 'mode=755' none "$FUTURE_ROOT"
mkdir -p "$FUTURE_ROOT/opt/openslx"


# Get all variables we care about from the KCL
. /inc/parse_kcl

# NOTE: this is only relevant when using the distro's kernel
# load kernel modules as given in /etc/modules
modprobe -a -b $(cat /etc/modules) 2>/dev/null

# Load drm gfx drivers, if successful, check if splash screen should be shown, and do so
. "/inc/drm.functions"
if [ "$SPLASH" -eq 1 ]; then
	if setup_gfx; then
		echo "1 1 0 1" > /proc/sys/kernel/printk
		exec 4>&1 5>&2 > /dev/null 2>&1
		MUTED_OUTPUT=1
		clear
		echo -e "\033[?25l" >&4
		if [ -e "/etc/splash.ppm.gz" ]; then
			fbsplash -x -b -s "/etc/splash.ppm.gz" &
		elif [ -e "/etc/splash.ppm" ]; then
			fbsplash -x -b -s "/etc/splash.ppm" &
		else
			echo "Splash screen requested, but not found in initramfs..." >&4
		fi
	fi
else
	setup_gfx
fi

# suppress kernel output if DEBUG is set and no splash screen is requested
if [ $SPLASH -eq 0 ]; then
	[ $DEBUG -ge 1 ] && echo "4 4 1 7" > /proc/sys/kernel/printk || echo "1 1 0 1" >/proc/sys/kernel/printk
fi

[ $DEBUG -ge 4 ] && drop_shell "Requested Debug Shell: before network."

. "/inc/setup_network" || . "/inc/setup_network_retry" || drop_shell "Error setting up network"
bench_event "NETWORK" "Network up and running"

[ $DEBUG -ge 3 ] && drop_shell "Requested Debug Shell: after network/before configuring."

. "/inc/activate_sysconfig" || drop_shell "Could not source /inc/activate_sysconfig"
bench_event "CONFIG" "Downloaded config"
# From here on, we have all the vars from /opt/openslx/config

# Sync time via NTP
. "/inc/ntp_sync"

[ $DEBUG -ge 2 ] && drop_shell "Requested Debug Shell: after configuration/before stage32."

. "/inc/setup_stage32" || drop_shell "Problem setting up stage3.2"
bench_event "STAGE32" "Downloaded stage 3.2"

# copy files needed for stage3.2 to FUTURE_ROOT
echo "Copying busybox etc. to stage32..."
tar -cp /bin/* /sbin/* | tar -xp -C "${FUTURE_ROOT}/opt/openslx/"
mkdir -p "${FUTURE_ROOT}/opt/openslx/inc"
cp -a "/inc/functions" "${FUTURE_ROOT}/opt/openslx/inc/"

# set the SLX_ROOT_PASS if given in config
if [ ! -z "$SLX_ROOT_PASS" ]; then
	sed -i "s#^root:[^:]*:#root:$SLX_ROOT_PASS:#" "${FUTURE_ROOT}/etc/shadow"
fi
# set the SLX_DEMO_PASS if given in config
if [ ! -z "$SLX_DEMO_PASS" ]; then
	sed -i "s#^demo:[^:]*:#demo:$SLX_DEMO_PASS:#" "${FUTURE_ROOT}/etc/shadow"
fi

# one last debug shell if activated
[ $DEBUG -ge 1 ] && drop_shell "Requested Debug Shell: before switch_root."

# Activate debug shell after switchroot?
[ -n "$DEBUG_SHELL" ] && ln -s "../debug-shell.service" "${FUTURE_ROOT}/usr/lib/systemd/system/sysinit.target.wants/debug-shell.service"

# need /proc for this ;)
bench_event "PRESWITCH" "Switching to stage 3.2"

# unmount filesystems
for mnt in proc sys run ; do
	busybox umount -f -l "/$mnt" 2>/dev/null
done

# HACK HACK: Klausurmodus
if [ "x$SLX_PVS_DEDICATED" = "xyes" ] || [ "x$SLX_PVS_HYBRID" = "xyes" ]; then
	sed -i '/^SLX_EXAM=/d' "${FUTURE_ROOT}/opt/openslx/config"
	SLX_EXAM=
fi
# Putting this here as we're hopefully moving to the all new dracut solution soon
# so there's no reason to make it pretty now
if [ -n "$SLX_EXAM" ]; then
	# Visual: Make kdm all orange
	sed -i 's/#e3e4e9/#f9a72b/g' "${FUTURE_ROOT}/usr/share/desktop/themes/kdm/bwlehrpool/theme.xml"
	# Set autologindelay to 0 to directly boot
	sed -i 's/^AutoLoginDelay=.*/AutoLoginDelay=0/g' "${FUTURE_ROOT}/etc/kde4/kdm/kdmrc"
	# Visual: Move splash screen to upper left corner
	if [ -e "/etc/splash.ppm.gz" ]; then
		fbsplash -b -s "/etc/splash.ppm.gz" &
	elif [ -e "/etc/splash.ppm" ]; then
		fbsplash -b -s "/etc/splash.ppm" &
	fi
	# Visual: ssh banner
	echo "+ - - - - KLAUSURMODUS AKTIV - - - - +" >> "${FUTURE_ROOT}/etc/issue.net"
	echo "++++++++++++++++++++++++++++++++++++++" >> "${FUTURE_ROOT}/etc/issue.net"
	# Disable ctrl-alt-delete
	rm -- "${FUTURE_ROOT}/usr/lib/systemd/system/ctrl-alt-del.target"
	# No idleaction
	rm -- "${FUTURE_ROOT}/etc/cron.d/openslx-idleaction"
	# Ignore everything but power button
	cat > "${FUTURE_ROOT}/etc/systemd/logind.conf" <<EOF
[Login]
NAutoVTs=0
ReserveVT=0
KillUserProcesses=no
HandlePowerKey=poweroff
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
IdleAction=ignore
EOF
	# Link exam.service in sysinit.target
	ln -s "../exam.service" "${FUTURE_ROOT}/etc/systemd/system/sysinit.target.wants/exam.service"
fi

echo "Switching root...."
echo "$bench_result" > "${FUTURE_ROOT}/opt/openslx/.benchmark"
# Prepare environment (HOME is needed as a hack for nss_ldap with ssl and no caching)
unset BOOT_IMAGE initrd KCL ip slxbase slxsrv IPINFO vga ip MAC BOOTIF DEBUG OLDPWD MUTED_OUTPUT GFX
export HOME=/
export init="/usr/lib/systemd/systemd"
export recovery=
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/sbin:/opt/openslx/bin"
exec /sbin/switch_root -c /dev/console /mnt /usr/lib/systemd/systemd