13 votos

¿Cómo puedo ejecutar una máquina de VirtualBox como un servicio en Windows XP ?

Tengo una máquina de VirtualBox con Windows XP en Windows XP Host.

¿Cómo puedo iniciar VirtualBox como un servicio, así que puedo conseguir una máquina virtual bajo el capó, y no tengo que iniciar VirtualBox para acceder a mi máquina virtual (a través de VNC de la red)?

He encontrado que VirtualBox Administrar podría ser el camino a seguir, pero como soy un principiante con esto, no sé por dónde empezar.

Alguna idea?

10voto

Deborah Dumont Puntos 1

Tenga en cuenta que las actualmente aceptadas respuesta (Molly7244) en realidad se inicia la máquina virtual cuando de inicio de sesión - no cuando arranque la máquina. No es, en otras palabras, un servicio.

Para un servicio real que se ejecuta cuando se inicia el equipo, yo uso los dos scripts (originalmente desde aquí), en conjunción con cygwin (cygrunsrv). Hace uso de la VBoxHeadless modo como se menciona en otra parte de esta página.

La primera secuencia de comandos se ejecuta la máquina virtual a través de VBoxHeadless; recibe el nombre de derecho de la VM a ejecutar (y otra información tal como su VBOX el directorio home) de las variables de entorno. La segunda secuencia de comandos instala un servicio para un determinado VM (mediante el uso de cygrunsrv para llamar a la primera secuencia de comandos con el derecho env. vars conjunto). Finalmente, hay un tercer archivo que contiene las funciones más comunes. Si se ponen todos de estos en un directorio juntos, usted puede instalar una nueva máquina virtual así:

$ VBOX_USER_HOME="/path/to/.VirtualBox/" vboxd-install MyVMName 3333

Y, a continuación, iniciar el servicio con "net start vboxd-MyVMName" o "cygrunsrv -S vboxd-MyVMName".

Aquí está el VM-secuencia de comandos en ejecución, "vboxd":

#!/bin/bash
# from http://forums.virtualbox.org/viewtopic.php?f=1&t=23536

##
## Manages start / stop of VirtualBox virtual machines
##

## load common functions
basedir="$(readlink -f $(dirname $0))"
source "$basedir/.libcommon" || exit 1

## parse arguments
parseArg vmName "$1" "$VBOXD_VM_NAME"
parseArg vmPort "$2" "$VBOXD_VM_PORT"

## define signal handler
function onHalt {
    warn "Stopping virtual machine '$vmName'"
    "$VBOX_INSTALL_PATH/VBoxManage" controlvm "$vmName" savestate
    exit 0
}

## install signal handler; cygrunsrv uses SIGTERM by default
trap 'onHalt' TERM

## hardcode this path if you like; it's required for VBox* utils to
## find the correct VirtualBox.xml config file and is usually set
## during a call to vboxd-install.
#export VBOX_USER_HOME="$USERPROFILE\\.VirtualBox"

## default VBoxHeadless port specification
portSpec="-e \"TCP/Ports=$vmPort\""

## determine vm state
info "Querying virtual machine '$vmName' state"
vmState=$( \
    "$VBOX_INSTALL_PATH/VBoxManage" showvminfo "$vmName" \
    | grep '^State:' \
    | sed 's/State: *//' )
info "Virtual machine '$vmName' is $vmState"

## if vm state is saved, we can't specify port without an exception,
## as port spec requires modification of the (immutable) saved machine
## state. See http://www.virtualbox.de/ticket/3609
if  [ "${vmState##saved}" != "$vmState" ]; then
    ## state is saved; clear port specification
    warn "Port specification is not allowed for saved vms"
    portSpec=""
fi

## start the VM
info "Starting virtual machine '$vmName' on port $vmPort"
"$VBOX_INSTALL_PATH/VBoxHeadless" -s "$vmName" $portSpec &

## record pid of VBoxHeadless child process and wait on it
pid="$!"
info "Waiting on VBoxHeadless child process $pid"
wait "$pid"

Y aquí está el script de instalación, "vboxd-instalar":

#!/bin/bash
# http://forums.virtualbox.org/viewtopic.php?f=1&t=23536

##
## Registers a VirtualBox virtual machine to start as a service via cygrunsrv
##

## load common functions
basedir="$(readlink -f $(dirname $0))"
source "$basedir/.libcommon" || exit 1

## test for presence of cygrunsrv utility
if [ ! -x "$(which cygrunsrv)" ]; then
    die "Utility 'cygrunsrv' is not in path"
fi

## test VirtualBox configuration
if [ -z "$VBOX_USER_HOME" ]; then
    die "Required environment variable 'VBOX_USER_HOME' is undefined. " \
     "Please ensure this variable is set to point to the directory " \
     "containing your VirtualBox.xml configuration file."
fi
configFile=$(cygpath -u "$VBOX_USER_HOME\\VirtualBox.xml")
if [ ! -e "$configFile" ]; then
    die "VirtualBox configuration file '$(cygpath -w $configFile)' not found"
fi

## parse arguments
parseArg vmName "$1"
parseArg vmPort "$2"
parseArg vmUser "$3" "SYSTEM"

## if vmUser is not SYSTEM, update userSpec
userSpec="--interactive"
if [ "$vmUser" != "SYSTEM" ]; then
    ## "interactive" option disallowed when user is specified
    userSpec="--user \"$vmUser\""
fi

## install the service
cygrunsrv \
    --install "vboxd-$vmName" \
    --path "$basedir/vboxd" \
    --env "VBOXD_VM_NAME=$vmName" \
    --env "VBOXD_VM_PORT=$vmPort" \
    --env "VBOX_USER_HOME=$VBOX_USER_HOME" \
    --desc "VirtualBox virtual machine '$vmName' on port $vmPort" \
    $userSpec \
    --type auto \
    --termsig TERM \
    --shutsig TERM \
    --neverexits \
    --preshutdown \
    || die "Failed to install service"

Y, finalmente, aquí está ".libcommon" secuencia de comandos que se hace referencia por medio de estas dos:

# -*-shell-script-*-
# from http://forums.virtualbox.org/viewtopic.php?f=1&t=23536

SCRIPT="$(basename $0)"
BASEDIR="$(readlink -f $(dirname $0))"
[ -z "$LOGLEVEL" ] && LOGLEVEL=2
[ -z "$LOGDATEFORMAT" ] && LOGDATEFORMAT="%Y-%m-%d %H:%M:%S "

function log {
    local now=""
    [ -n "$LOGDATEFORMAT" ] && now=$(date +"$LOGDATEFORMAT")
    echo "$SCRIPT $now$@" >&2
}

function debug {
    [ "$LOGLEVEL" -lt 3 ] && return
    log "[DEBUG] $@"
}

function info {
    [ "$LOGLEVEL" -lt 2 ] && return
    log "[INFO]  $@"
}

function warn {
    [ "$LOGLEVEL" -lt 1 ] && return
    log "[WARN]  $@"
}

function error {
    log "[ERROR] $@"
}

function die {
    error "$@"
    exit 1
}

function parseArg {
    local _name="$1"
    local _value="$2"
    local _default="$3"
    if [ -z "$_value" ]; then
        if [ -z "$_default" ]; then
            die "Required argument '$_name' is undefined"
        fi
     if [ "$_default" = "*EMPTY*" ]; then
         _value=""
     else
            _value="$_default"
     fi
    fi
    debug "$_name=\"$_value\""
    eval "$_name=\"$_value\""
}

Esta solución funciona muy bien para mí; ojala que tienen similar suerte.

8voto

Sarien Puntos 136

Parece la respuesta más sencilla en este punto es VBoxVMService. Yo no lo he probado todavía, voy a tratar de recordar a venir aquí y actualización de la respuesta si/cuando lo hago.

4voto

RooiWillie Puntos 141

De acuerdo en VBoxVMService. Es realmente fácil de configurar y parece estar funcionando bien. Usted puede encontrar un cómo en la forma de configurarlo aquí:

http://www.windows-noob.com/forums/index.php?/topic/4931-have-virtualbox-vms-start-as-a-service-on-a-windows-host/

*EDIT* Como por la solicitud a continuación, un resumen del enlace. Aunque la solución que funcionó para mí, el crédito va a Peter Upfold - http://peter.upfold.org.uk/

  • Instalar Virtualbox y la configuración de la VM a aceptar sesiones RDP.
  • Descargar e instalar VBoxVmService en C:\vms. Google acaba de VBoxVmService para un enlace de descarga (lo siento, no es suficiente rep de publicar más de 2 enlaces).
  • Editar VBoxVmService archivo ini del bajo C:\vms:

[Ajustes]

ServiceName=VBoxVmService

VBOX_USER_HOME=C:\Users\Administrador.VirtualBox

RunAsUser=.\Administrador

UserPassword=enteryourpasswordhere

RunWebService=no

PauseShutdown=5000

[Vm0] VmName=nombre de la máquina virtual en VirtualBox

ShutdownMethod=savestate

AutoStart=sí

  • Sustituir en la VBOX_USER_HOME con el .VirtualBox en la carpeta correcta directorio de inicio del usuario, así como la RunAsUser y UserPassword directivas, y establecer el nombre de la máquina virtual en VirtualBox aplicación en VmName. También puede agregar adicional [Vmx] secciones después de [Vm0] con otras máquinas virtuales para comenzar cuando se inicia el equipo.

  • Cuando estés satisfecho con la configuración, a partir de un Administrador habilitado Símbolo del sistema, ejecute el siguiente comando para instalar el servicio. Una vez instalado el servicio, usted puede quitar la contraseña de usuario en el archivo INI, tal y como se guarda en la configuración de Servicio:

C:\vms\VmServiceControl.exe -yo

  • Ahora, debe reiniciar el equipo antes de intentar iniciar el servicio por primera vez, o será incapaz de localizar el VMs.

  • Después del reinicio, debe iniciar el servicio (sujeto a la 'Automático (Inicio Retrasado)' delay) y sus máquinas virtuales se inicia en el momento del arranque.

2voto

Aaron Copley Puntos 311

El ofrecer esta otra opción:

Utilizar builtin de comandos de Windows 'sc' para crear un servicio. Combine esto con 'vboxheadless' para llegar a donde quieres estar.

Probado con vboxheadless específicamente, pero me hizo crear un servicio de prueba que se ejecuta calc.exe. Usted debe hacer algo como esto:

sc create servicenamehere start= auto binPath= "C:\path\to\vboxheadless.exe --startvm name"

Consulte la documentación del sc para obtener más información. Nota: Los espacios después del signo igual son intencionales.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: