summaryrefslogtreecommitdiff
path: root/mk/xe-linux-distribution.init
blob: 7c1bcf4b342450e0ee08eca38e5485a3bd55f8ac (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
112
113
114
115
116
117
118
119
120
#!/bin/sh
#
# xe-linux-distribution	Write Linux distribution information to XenStore.
#
# chkconfig: 2345 14 86
# description: Writes Linux distribution version information to XenStore.
#
### BEGIN INIT INFO
# Provides:          xe-linux-distribution
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: @BRAND_GUEST@ daemon providing host integration services
# Description:       Writes Linux distribution version information to XenStore.
### END INIT INFO

LANG="C"
export LANG

if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
else
action()
{
    descr=$1 ; shift
    cmd=$@
    echo -n "$descr "
    $cmd
    ret=$?
    if [ $ret -eq 0 ] ; then
	echo "OK"
    else
	echo "Failed"
    fi
    return $ret
}
fi

XE_LINUX_DISTRIBUTION=/usr/sbin/xe-linux-distribution
XE_LINUX_DISTRIBUTION_CACHE=/var/cache/xe-linux-distribution
XE_DAEMON=/usr/sbin/xe-daemon
XE_DAEMON_PIDFILE=/var/run/xe-daemon.pid

if [ ! -x "${XE_LINUX_DISTRIBUTION}" ] ; then
    exit 0
fi

start()
{
    if [ ! -e /proc/xen/xenbus ] ; then
	if [ ! -d /proc/xen ] ; then
	    action $"Mounting xenfs on /proc/xen:" /bin/false
	    echo "Could not find /proc/xen directory."
	    echo "You need a post 2.6.29-rc1 kernel with CONFIG_XEN_COMPAT_XENFS=y and CONFIG_XENFS=y|m"
	    exit 1
	else 
	    # This is needed post 2.6.29-rc1 when /proc/xen support was pushed upstream as a xen filesystem
	    action $"Mounting xenfs on /proc/xen:" mount -t xenfs none /proc/xen
	fi
    fi

    if [ -e /proc/xen/capabilities ] && grep -q control_d /proc/xen/capabilities ; then
	# Do not want daemon in domain 0
	exit 0
    fi

    action $"Detecting Linux distribution version:" \
	${XE_LINUX_DISTRIBUTION} ${XE_LINUX_DISTRIBUTION_CACHE}

    action $"Starting xe daemon: " /bin/true
    mkdir -p $(dirname ${XE_DAEMON_PIDFILE})
    if start-stop-daemon --start --background --exec ${XE_DAEMON} -- -p ${XE_DAEMON_PIDFILE} 1>/dev/null 2>/dev/null; then
        exit 0
    else
        # This is equivalent to daemon() in C
        ( exec &>/dev/null ; ${XE_DAEMON} -p ${XE_DAEMON_PIDFILE} 2>/dev/null & )
    fi
}

stop()
{
    [ ! -f "${XE_DAEMON_PIDFILE}" ] && return 0
    action $"Stopping xe daemon: "   kill -TERM $(cat ${XE_DAEMON_PIDFILE})
    rm -f "${XE_DAEMON_PIDFILE}"
    return 0
}

status()
{
    cat ${XE_LINUX_DISTRIBUTION_CACHE}
}

# fail silently if not running xen
if [ ! -d /proc/xen ]; then
   exit
fi

case "$1" in
  start)
        start
        ;;
  stop)
	stop
	;;
  status)
	status
	;;
  force-reload|restart)
	stop
	start
	;;
  *)
        # do not advertise unreasonable commands that there is no reason
        # to use with this device
        echo $"Usage: $0 start|restart|status"
        exit 1
esac

exit $?