summaryrefslogtreecommitdiff
blob: f7af525e7511ce03fc7e2e8bd078c3b19f62d232 (plain)
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
#!/sbin/runscript
##
## description: The vservers service is used to start and stop all
##              the virtual servers.
## to configure see:
##	- /etc/vservers/*.conf
##	- /etc/vservers.conf

USR_SBIN=/usr/sbin

depend() {
	need net rebootmgr
}

## we need to call this _before_ starting any vserver!
proc_security() {
	## the following does not seem to work (maybe "old-style" only?):
	### from: http://vserver.strahlungsfrei.de/tiki-index.php?page=VServerGentooNew
	## enable (parts of) the proc filesystem
	#vproc -e /proc/cmdline
	#vproc -e /proc/loadavg
	#vproc -e /proc/meminfo
	### invalid ioctl for /proc/mounts!!
	##vproc -e /proc/mounts
	#vproc -e /proc/stat
	#vproc -e /proc/uptime
	## (vproc -e /proc/version)
	## (useful and harmless: cpuinfo, slabinfo, interrupts)
	#vproc -e /proc/cpuinfo
	#vproc -e /proc/slabinfo
	#vproc -e /proc/interrupts

	## anyway, we use the following for now:
	/usr/sbin/setattr -R --~hide /proc/*
}

# Print the vserver name in priority/alpha order
sortserver(){
	(
	cd /etc/vservers
	for serv in *.conf
	do
	        test -f "$serv" || continue

		PRIORITY=100
		. $serv
		test "$ONBOOT" || continue
		printf "%03d %s\n" $PRIORITY `basename $serv .conf`
	done
	) | sort $* | (while read a b; do echo $b; done)
}

startservers(){
	echo "Starting the virtual servers"
	cd /etc/vservers
	for name in `sortserver`
	do
		ONBOOT=
		. $name.conf
		if [ "$ONBOOT" = "yes" ] ; then
			echo; echo
			echo "*** starting vserver \"$name\" ($(date)) ***"
			$USR_SBIN/vserver $name start
		else
			echo "*** vserver \"$name\" not configured for on boot start ***"
		fi
	done
}

BACKGROUND=off
if [ -f /etc/vservers.conf ] ; then
	. /etc/vservers.conf
fi


# See how we were called.
start() {
	proc_security
	if [ "$BACKGROUND" = "yes" ] ; then
		einfo "asynchronous start of vserver on tty8"
		echo "vserver startup on $(date)" 2>&1 </dev/tty8 | tee /var/log/vservers.boot >/dev/tty8
		#startservers >/dev/tty8 </dev/tty8 2>/dev/tty8 &
		startservers 2>&1 </dev/tty8 | tee /var/log/vservers.boot >/dev/tty8 &
	else
		estart "synchronous vserver-start"
		startservers | tee /var/log/vservers.boot
		eend $?
	fi
}

stop() {
	echo "Stopping the virtual servers"
	cd /etc/vservers
	for name in `sortserver -r`
	do
		$USR_SBIN/vserver $name stop
	done
}

## TODO: finish our status()-function
my_status() {
	cd /etc/vservers
	for serv in *.conf
	do
		ONBOOT=no
		name=`basename $serv .conf`
		. $serv
		echo -n ONBOOT=$ONBOOT " "
		$USR_SBIN/vserver $name running
	done
}