freebsd-ports/emulators/virtualbox-ose-legacy/files/vboxheadless.in
Doug Barton 83eb2c3700 In the rc.d scripts, change assignments to rcvar to use the
literal name_enable wherever possible, and ${name}_enable
when it's not, to prepare for the demise of set_rcvar().

In cases where I had to hand-edit unusual instances also
modify formatting slightly to be more uniform (and in
some cases, correct). This includes adding some $FreeBSD$
tags, and most importantly moving rcvar= to right after
name= so it's clear that one is derived from the other.
2012-01-14 08:57:23 +00:00

138 lines
4.2 KiB
Bash

#!/bin/sh
# $FreeBSD$
#
# PROVIDE: vboxheadless
# REQUIRE: LOGIN vboxnet
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf[.local] to enable vboxheadless
#
# vboxheadless_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable vboxheadless.
# vboxheadless_machines (str): Space separated list of machines
# vboxheadless_user (str): Default user account to run with.
# (default: %%VBOXUSER%%)
# vboxheadless_stop (str): Default stop cmd for VBoxManage controlvm.
# (default: savestate)
# vboxheadless_delay (int): Default startup/shutdown delay in seconds.
# (default: 0)
# vboxheadless_<machine>_name (str): Virtualbox machine name or UUID.
# vboxheadless_<machine>_user (str): User account to run with.
# vboxheadless_<machine>_flags (str): Additional flags for VBoxHeadless.
# vboxheadless_<machine>_stop (str): Stop command for VBoxManage controlvm.
# vboxheadless_<machine>_delay (int): Startup and shutdown delay in seconds.
. /etc/rc.subr
name="vboxheadless"
rcvar=vboxheadless_enable
command="%%PREFIX%%/bin/VBoxHeadless"
pidbase="/var/run/${name}"
start_cmd="${name}_start"
stop_cmd="${name}_stop"
status_cmd="${name}_status"
vboxheadless_start()
{
local machine mpidfile pid vmname vmuser vmflags vmdelay
echo "Starting Virtual Machines:"
for machine in ${vboxheadless_machines}; do
mpidfile="${pidbase}_${machine}.pid"
pid=$(check_pidfile $mpidfile $command)
eval vmname="\${vboxheadless_${machine}_name:-${machine}}"
eval vmuser="\${vboxheadless_${machine}_user:-${vboxheadless_user}}"
eval vmflags="\${vboxheadless_${machine}_flags:-}"
eval vmdelay="\${vboxheadless_${machine}_delay:-${vboxheadless_delay}}"
HOME=$(/usr/sbin/pw usershow -7 -n "${vmuser}" | /usr/bin/cut -d: -f6)
/usr/bin/printf "%25s " "${vmname}"
/usr/bin/su ${vmuser} -c "%%PREFIX%%/bin/VBoxManage showvminfo '${vmname}' >/dev/null" 2>/dev/null
if [ $? != 0 ]; then
echo "Unknown machine"
continue
fi
if [ -n "${pid}" ]; then
echo "Already running? (pid=${pid})"
continue
fi
/bin/sleep ${vmdelay}
/usr/bin/install -o ${vmuser} -g wheel -m 644 /dev/null ${mpidfile}
/usr/sbin/daemon -f -p ${mpidfile} -u ${vmuser} ${command} --startvm "${vmname}" ${vmflags}
echo "Started"
done
}
vboxheadless_stop()
{
local machine mpidfile pid vmname vmuser vmstop vmdelay
echo "Saving states for Virtual Machines:"
for machine in ${vboxheadless_machines}; do
mpidfile="${pidbase}_${machine}.pid"
pid=$(check_pidfile $mpidfile $command)
eval vmname="\${vboxheadless_${machine}_name:-${machine}}"
eval vmuser="\${vboxheadless_${machine}_user:-${vboxheadless_user}}"
eval vmstop="\${vboxheadless_${machine}_stop:-${vboxheadless_stop}}"
eval vmdelay="\${vboxheadless_${machine}_delay:-${vboxheadless_delay}}"
/usr/bin/printf "%25s " "${vmname}"
if [ -n "${pid}" ]; then
/bin/sleep ${vmdelay}
/usr/bin/su ${vmuser} -c "%%PREFIX%%/bin/VBoxManage controlvm '${vmname}' ${vmstop} >/dev/null" 2>/dev/null
wait_for_pids $pid >/dev/null
echo "Stopped"
else
echo "Not running?"
fi
done
}
vboxheadless_status()
{
local machine mpidfile pid vmname vmuser
/usr/bin/printf "%25s %s\n" "Machine" "Status"
/usr/bin/printf "%25s %s\n" "-------------------------" "------------"
for machine in ${vboxheadless_machines}; do
mpidfile="${pidbase}_${machine}.pid"
pid=$(check_pidfile $mpidfile $command)
eval vmname="\${vboxheadless_${machine}_name:-${machine}}"
eval vmuser="\${vboxheadless_${machine}_user:-${vboxheadless_user}}"
/usr/bin/su ${vmuser} -c "/usr/local/bin/VBoxManage showvminfo '${vmname}' >/dev/null" 2>/dev/null
if [ $? != 0 ]; then
/usr/bin/printf "%20s %s\n" "${vmname}" "Unknown Machine"
elif [ -n "${pid}" ]; then
/usr/bin/printf "%25s %s\n" "${vmname}" "Running"
else
/usr/bin/printf "%25s %s\n" "${vmname}" "Powered Off"
fi
done
}
load_rc_config $name
: ${vboxheadless_enable="NO"}
: ${vboxheadless_user="%%VBOXUSER%%"}
: ${vboxheadless_stop="savestate"}
: ${vboxheadless_delay="0"}
cmd_arg="$1" ; shift
if [ -n "$*" ]; then
vboxheadless_machines="$*"
fi
run_rc_command "${cmd_arg}"