diff options
-rwxr-xr-x | vm.init | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -0,0 +1,75 @@ +#!/sbin/runscript +# Copyright 2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +VMNAME=${SVCNAME#*.} +PIDFILE=/var/run/vm/${VMNAME}.pid +MONITOR=/var/run/vm/${VMNAME}.monitor + +opts="reboot" + +depend() { + if [ "${NETWORK}" = "vde" ]; then + need vde net.vde0 + fi +} + +send_command() { + echo "$@" | nc6 -U ${MONITOR} --send-only >/dev/null 2>&1 +} + +start() { + if [ ${VMNAME} = ${SVCNAME} ]; then + eerror "You have to create an init script for each vm:" + eerror " ln -s vm /etc/init.d/vm.vmname" + return 1 + fi + + _macaddr=$(fgrep ${VMNAME} /etc/ethers | awk '{ print $1 }') + if [ -z ${_macaddr} ]; then + eerror "Unable to find a mac address for the given machine" + eend 1 + return 1 + fi + + ebegin "Starting ${VMSOFTWARE-qemu} for ${VMNAME}" + start-stop-daemon --start /usr/bin/${VMSOFTWARE-qemu} \ + --pidfile ${PIDFILE} \ + -- -daemonize -pidfile ${PIDFILE} -monitor unix:${MONITOR},server,nowait -runas nobody \ + ${ENABLE_KVM+--enable-kvm} $(readlink ${IMAGE}) \ + -net ${NETWORK} -net nic,macaddr=${_macaddr}${NETWORK_MODEL+,model=${NETWORK_MODEL}} \ + ${MEMORY+-m ${MEMORY}} ${VNC_ADDRESS+-vnc ${VNC_ADDRESS}} ${OTHER_ARGS} + eend $? +} + +reboot() { + if [ ${VMNAME} = ${SVCNAME} ]; then + eerror "You have to create an init script for each vm:" + eerror " ln -s vm /etc/init.d/vm.vmname" + return 1 + fi + + ebegin "Rebooting ${VMNAME}" + send_command system_reset + eend $? +} + +stop() { + if [ ${VMNAME} = ${SVCNAME} ]; then + eerror "You have to create an init script for each vm:" + eerror " ln -s vm /etc/init.d/vm.vmname" + return 1 + fi + + ebegin "Powering off ${VMNAME}" + send_command system_powerdown + eend $? + + sleep 15 + + ebegin "Stopping ${VMSOFTWARE-qemu} for ${VMNAME}" + start-stop-daemon --stop /usr/bin/${VMSOFTWARE-qemu} \ + --user nobody \ + --pidfile ${PIDFILE} \ + --quiet +} |