#! /bin/bash
#
# vboxservice: VirtualBox guest services init script.
#
# Author: Joel Barrios <darkshram@gmail.com>, based on Lubomir Rintel <lkundrak@v3.sk>
# 
# chkconfig: 35 99 30
# description: VirtualBox guest services
# processname: VBoxService
# pidfile: /var/run/vboxservice.pid
#
### BEGIN INIT INFO
# Provides: vboxservice
# Required-Start: $local_fs $syslog $messagebus $elogind
# Required-Stop: $local_fs $syslog $messagebus $elogind
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Short-Description: VirtualBox guest services
# Description: VirtualBox guest services API
### END INIT INFO

SERVICE="vboxservice"
PROCESS="VBoxService"
DAEMON="/sbin/${PROCESS}"
LOGFILE="/var/log/${SERVICE}.log"
PIDFILE="/var/run/${SERVICE}.pid"

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Source service configuration.
[ -f /etc/sysconfig/${SERVICE} ] && . /etc/sysconfig/${SERVICE}

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x ${DAEMON} ] || exit 1

start ()
{
  if virt-what |grep virtualbox > /dev/null; then
    echo -n $"Starting ${SERVICE}: "
    /bin/plymouth --quit
	daemon ${DAEMON} --logfile ${LOGFILE} --pidfile ${PIDFILE} >/dev/null 2>&1
	# We suppressed nonessential output, so we need to reprint status msg
        RETVAL=$?
	if [ ${RETVAL} = 0 ]
	then
		success
		touch /var/lock/subsys/${SERVICE}
	else
		failure
	fi
	echo
        return ${RETVAL}
  else
    # Disable this service if system is not a VirtualBox VM.
    /sbin/chkconfig ${SERVICE} off >/dev/null 2>&1
    exit 0
  fi
}

stop ()
{
  if virt-what |grep virtualbox > /dev/null; then
        echo -n $"Stopping ${SERVICE}:"
        killproc -p ${PIDFILE} ${PROCESS}
	RETVAL=$?
        echo
        if [ ${RETVAL} -eq 0 ]
	then
        	rm -f /var/lock/subsys/${SERVICE}
        	rm -f ${PIDFILE}
        fi
        return ${RETVAL}
  else
    exit 0
  fi
}

restart ()
{
	stop && start
}

RETVAL=0
case "$1" in
start)
	start
	RETVAL=$?
	;;
stop)
	stop
	RETVAL=$?
	;;
restart)
	restart
	RETVAL=$?
	;;
reload)
	echo "$0 does not support configuration reloading, you have to restart it."
	RETVAL=1
	;;
status)
	status -p ${PIDFILE} ${PROCESS}
	RETVAL=$?
	;;
*)
	echo $"Usage: $0 {start|stop|restart|reload|status}"
	RETVAL=1
esac

exit ${RETVAL}
