summaryrefslogtreecommitdiffstats
path: root/main/xen/xencommons.initd
blob: 7543cae3a58f56a5fe909de06d30227a64c56141 (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
#!/sbin/runscript
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

if [ -d /etc/sysconfig ]; then
	xencommons_config=/etc/sysconfig
else
	xencommons_config=/etc/default
fi

test -f $xencommons_config/xencommons && . $xencommons_config/xencommons

XENCONSOLED_PIDFILE=/var/run/xenconsoled.pid

# not running in Xen dom0 or domU
if ! test -d /proc/xen ; then
	exit 0
fi

depend() {
	need udev
	before xend
}

start() {
	local time=0
	local timeout=30

	modprobe xen-evtchn 2>/dev/null
	modprobe xen-gntdev 2>/dev/null
	modprobe evtchn 2>/dev/null
	modprobe gntdev 2>/dev/null

	# mount xenfs in dom0 or domU with a pv_ops kernel
	if ! test -f /proc/xen/capabilities && \
	   ! grep '^xenfs ' /proc/mounts >/dev/null;
	then
		mount -t xenfs xenfs /proc/xen
	fi

	# assert we are running in the dom0
	if test -f /proc/xen/capabilities && \
	   ! grep -q "control_d" /proc/xen/capabilities ; then
		exit 0
	fi

	if ! `xenstore-read -s / >/dev/null 2>&1`
	then
		test -z "$XENSTORED_ROOTDIR" || XENSTORED_ROOTDIR="/var/lib/xenstored"
		rm -f "$XENSTORED_ROOTDIR"/tdb* &>/dev/null
		test -z "$XENSTORED_TRACE" || XENSTORED_ARGS=" -T /var/log/xen/xenstored-trace.log"

		ebegin "Starting xenstored..."
		xenstored --pid-file=/var/run/xenstored.pid $XENSTORED_ARGS

		# Wait for xenstored to actually come up, timing out after 30 seconds
		while [ $time -lt $timeout ] && ! `xenstore-read -s / >/dev/null 2>&1` ; do
			time=$(($time+1))
			sleep 1
		done

		# Exit if we timed out
		if ! [ $time -lt $timeout ] ; then
			eend 1
			echo Could not start xenstored
			exit 1
		fi
		eend 0

		ebegin "Setting domain 0 name..."
		xenstore-write "/local/domain/0/name" "Domain-0"
		eend $?
	fi

	ebegin "Starting xenconsoled..."
	test -z "$XENCONSOLED_TRACE" || XENCONSOLED_ARGS=" --log=$XENCONSOLED_TRACE"
	xenconsoled --pid-file=$XENCONSOLED_PIDFILE $XENCONSOLED_ARGS
	eend $?

	test -z "$XENBACKENDD_DEBUG" || XENBACKENDD_ARGS="-d"
	test "`uname`" != "NetBSD" || xenbackendd $XENBACKENDD_ARGS
}

stop() {
	ebegin "Stopping xenconsoled"
	if read 2>/dev/null <$XENCONSOLED_PIDFILE pid; then
		kill $pid
		while kill -9 $pid >/dev/null 2>&1; do sleep 0.1; done
		rm -f $XENCONSOLED_PIDFILE
	fi
	eend 0

	echo WARNING: Not stopping xenstored, as it cannot be restarted.
}

status() {
	xenstore-read -s / >/dev/null 2>&1
}