VirtualBox демон

Халло! Нашел на просторах инета стартовый скрипт для ВБокса, и немного подправил его под нынешнюю версию. Выкладываю здесь, вдруг кому понадобится.

/etc/conf.d/virtualbox.example - например: virtualbox.VM1 , virtualbox.VM2 и т.д.

# Username to start vbox as, must be part of vboxusers group.
VM_USER="nobody"

# Virtual Machine Name
VM_NAME=""

# Shutdown Method: pause|resume|reset|poweroff|savestate|acpipowerbutton|acpisleepbutton
VM_SHUTDOWN="acpipowerbutton"

# Remote VRDE Server
VM_VRDE="off"

/etc/init.d/virtualbox - ln -s /etc/init.d/virtualbox virtualbox.VM1 и т.д.

#!/sbin/runscript

# Not sure why but gentoo forgot to add /opt/bin to the path.
VBOXPATH="/usr/bin:/opt/bin"
VBOXNAME="${SVCNAME#*.}"

depend() {
	need net

	if [ "${SVCNAME}" != "virtualbox" ] ; then
		need virtualbox
	fi
}


checkconfig() {
	if [ ! -r /etc/conf.d/$SVCNAME ] ; then
		eerror "Please create /etc/conf.d/$SVCNAME"
		eerror "Sample conf: /etc/conf.d/virtualbox.example"
		return 1
	fi

	return 0
}

checkpath() {
	local r=0

	if ! su $VM_USER -c "PATH=$VBOXPATH command -v VBoxHeadless &>/dev/null" ; then
		eerror "Could not locate VBoxHeadless"
		r=1
	fi

	if ! su $VM_USER -c "PATH=$VBOXPATH command -v VBoxManage &>/dev/null" ; then
		eerror "Could not locate VBoxManage"
		r=1
	fi

	if [ $r -gt 0 ] ; then
		eerror "Please verify the vm users path."
	fi

	return $r
}

isloaded() {
	lsmod | grep -q "$1[^_-]"
}

isvm() {
	[ $SVCNAME != "virtualbox" ]
}

loadmodules() {
	if ! isloaded vboxdrv ; then
		if ! modprobe vboxdrv > /dev/null 2>&1 ; then
			eerror "modprobe vboxdrv failed."
			return 1
		fi
	fi

	if ! isloaded vboxnetadp ; then
		if ! modprobe vboxnetadp > /dev/null 2>&1 ; then
			eerror "modprobe vboxnetadp failed."
			return 1
		fi
	fi

	if ! isloaded vboxnetflt ; then
		if ! modprobe vboxnetflt > /dev/null 2>&1 ; then
			eerror "modprobe vboxnetflt failed."
			return 1
		fi
	fi

	if ! isloaded vboxpci ; then
		if ! modprobe vboxpci > /dev/null 2>&1 ; then
			eerror "modprobe vboxpci failed."
			return 1
		fi
	fi

	return 0
}

unloadmodules() {
	if isloaded vboxpci ; then
		if ! rmmod vboxpci > /dev/null 2>&1 ; then
			eerror "rmmod vboxpci failed."
			return 1
		fi
	fi

	if isloaded vboxnetflt ; then
		if ! rmmod vboxnetflt > /dev/null 2>&1 ; then
			eerror "rmmod vboxnetflt failed."
			return 1
		fi
	fi

	if isloaded vboxnetadp ; then
		if ! rmmod vboxnetadp > /dev/null 2>&1 ; then
			eerror "rmmod vboxnetadp failed."
			return 1
		fi
	fi

	if isloaded vboxdrv ; then
		if ! rmmod vboxdrv > /dev/null 2>&1 ; then
			eerror "rmmod vboxdrv failed."
			return 1
		fi
	fi

	return 0
}

start() {
	# If we are the original virtualbox script [ $SVCNAME = "virtualbox" ]
	if ! isvm ; then
		ebegin "Starting Virtualbox"
		loadmodules
		eend $?
	else
		checkconfig || return $?
		checkpath   || return $?

		ebegin "Starting Virtualbox: $VBOXNAME"
		su $VM_USER \
			-c "PATH=$VBOXPATH VBoxHeadless --vrde $VM_VRDE -startvm \"$VM_NAME\" &>/dev/null" &
		pid=$!
		sleep 1

		kill -CHLD $pid &>/dev/null
		eend $?
	fi
}

stop() {
	# If we are the original virtualbox script [ $SVCNAME = "virtualbox" ]
	if ! isvm ; then
		ebegin "Stopping Virtualbox"
		unloadmodules
		eend $?
	else
		checkconfig || return $?
		checkpath   || return $?

		ebegin "Stopping Virtualbox: $VBOXNAME"
		su ${VM_USER} \
			-c "PATH=$VBOXPATH \
			VBoxManage controlvm \"$VM_NAME\" $VM_SHUTDOWN &>/dev/null"

		while [ \
			"$(su ${VM_USER} \
			-c "PATH=$VBOXPATH \
			VBoxManage showvminfo \"$VM_NAME\" | grep State | grep runn")" != "" \
		]
		do
			echo -n "."
			sleep 5
		done

		sleep 5
		echo

		eend $?
	fi
}