| #!/bin/sh | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| ### BEGIN INIT INFO | |
| # Provides: xend | |
| # Required-Start: $remote_fs | |
| # Required-Stop: $remote_fs | |
| # Default-Start: 2 3 4 5 | |
| # Default-Stop: 0 1 6 | |
| # Short-Description: XEN control daemon | |
| # Description: XEN control daemon | |
| ### END INIT INFO | |
| PATH=/usr/lib/xen-common/bin:/sbin:/bin:/usr/sbin:/usr/bin | |
| DESC="Xen daemons" | |
| VERSION=$(xen-version) | |
| ROOT=/usr/lib/xen-$VERSION | |
| XEND="$ROOT"/bin/xend | |
| XENCONSOLED="$ROOT"/bin/xenconsoled | |
| XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid" | |
| XENSTORED="$ROOT"/bin/xenstored | |
| XENSTORED_DIR="/var/run/xenstored" | |
| XENSTORED_PIDFILE="/var/run/xenstore.pid" | |
| [ "$VERSION" ] || exit 0 | |
| [ -x "$XEND" ] || exit 0 | |
| [ -r /etc/default/xend ] && . /etc/default/xend | |
| . /lib/init/vars.sh | |
| . /lib/lsb/init-functions | |
| modules_setup() | |
| { | |
| modprobe xenfs 2>/dev/null | |
| modprobe xen-evtchn 2>/dev/null | |
| modprobe xen_blkback 2>/dev/null | |
| modprobe xen_netback 2>/dev/null | |
| modprobe xen_gntdev 2>/dev/null | |
| } | |
| xenfs_setup() | |
| { | |
| [ -e "/proc/xen/capabilities" ] && return 0 | |
| log_progress_msg "xenfs" | |
| [ -d "/proc/xen" ] || return 1 | |
| mount -t xenfs xenfs /proc/xen || return 1 | |
| return 0 | |
| } | |
| capability_check() | |
| { | |
| [ -e "/proc/xen/capabilities" ] || return 1 | |
| grep -q "control_d" /proc/xen/capabilities || return 1 | |
| return 0 | |
| } | |
| xend_start() | |
| { | |
| log_progress_msg "xend" | |
| $XEND status && return 1 | |
| $XEND start || return 2 | |
| i=0 | |
| while [ $i -lt 10 ]; do | |
| $XEND status && return 0 || true | |
| i=$(($i + 1)) | |
| sleep 1 | |
| done | |
| return 2 | |
| } | |
| xend_stop() | |
| { | |
| log_progress_msg "xend" | |
| $XEND status || return 0 | |
| $XEND stop || return 1 | |
| } | |
| xenconsoled_start() | |
| { | |
| log_progress_msg "xenconsoled" | |
| start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" --test > /dev/null \ | |
| || return 1 | |
| start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" -- \ | |
| $XENCONSOLED_ARGS --pid-file="$XENCONSOLED_PIDFILE" \ | |
| || return 2 | |
| } | |
| xenstored_start() | |
| { | |
| log_progress_msg "xenstored" | |
| start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" --test > /dev/null \ | |
| || return 1 | |
| [ -d "$XENSTORED_DIR" ] || mkdir -p "$XENSTORED_DIR" | |
| export XENSTORED_ROOTDIR="$XENSTORED_DIR" | |
| start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" -- \ | |
| $XENSTORED_ARGS --pid-file="$XENSTORED_PIDFILE" \ | |
| || return 2 | |
| } | |
| case "$1" in | |
| start) | |
| log_daemon_msg "Starting $DESC" | |
| modules_setup | |
| xenfs_setup | |
| case "$?" in | |
| 0) ;; | |
| *) log_end_msg 1; exit ;; | |
| esac | |
| capability_check | |
| case "$?" in | |
| 0) ;; | |
| *) log_end_msg 255; exit ;; | |
| esac | |
| xenstored_start | |
| case "$?" in | |
| 0|1) ;; | |
| *) log_end_msg 1; exit ;; | |
| esac | |
| xenconsoled_start | |
| case "$?" in | |
| 0|1) ;; | |
| *) log_end_msg 1; exit ;; | |
| esac | |
| #xend_start | |
| case "$?" in | |
| 0|1) ;; | |
| *) log_end_msg 1; exit ;; | |
| esac | |
| log_end_msg 0 | |
| ;; | |
| stop) | |
| capability_check | |
| case "$?" in | |
| 0) ;; | |
| *) exit ;; | |
| esac | |
| log_daemon_msg "Stopping $DESC" | |
| #xend_stop | |
| case "$?" in | |
| 0|1) log_end_msg 0 ;; | |
| *) log_end_msg 1 ;; | |
| esac | |
| ;; | |
| restart|force-reload) | |
| capability_check | |
| case "$?" in | |
| 0) ;; | |
| *) exit ;; | |
| esac | |
| log_daemon_msg "Restarting $DESC" | |
| #xend_stop | |
| case "$?" in | |
| 0|1) | |
| #xend_start | |
| case "$?" in | |
| 0) log_end_msg 0 ;; | |
| *) log_end_msg 1 ;; | |
| esac | |
| ;; | |
| *) log_end_msg 1 ;; | |
| esac | |
| ;; | |
| *) | |
| echo "Usage: $0 {start|stop|restart|force-reload}" >&2 | |
| exit 3 | |
| ;; | |
| esac | |
| exit 0 |