Saltar al contenido

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

Si te encuentras con alguna parte que no entiendes puedes comentarlo y te ayudaremos lo más rápido posible.

Solución:

Tenga en cuenta que la respuesta actualmente aceptada (Molly7244) en realidad inicia la máquina virtual cuando inicia sesión, no cuando inicia la máquina. En otras palabras, no es un servicio.

Para un servicio real que se ejecuta cuando la máquina arranca, utilizo dos scripts (originalmente de aquí) junto con cygwin (cygrunsrv). Hace uso del modo VBoxHeadless como se menciona en otra parte de esta página.

El primer script ejecuta su VM a través de VBoxHeadless; obtiene el nombre de la máquina virtual correcta para ejecutar (y otra información, como el directorio de inicio de VBOX) de las variables de entorno. El segundo script instala un servicio para una VM en particular (usando cygrunsrv para llamar al primer script con el conjunto de vars de entorno correcto). Finalmente, hay un tercer archivo que contiene funciones comunes. Si pones todos estos en un directorio juntos, puedes instalar una nueva máquina virtual así:

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

Y luego inicie el servicio con “net start vboxd-MyVMName” o “cygrunsrv -S vboxd-MyVMName”.

Aquí está el script de ejecución de VM, “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"

VBOX_INSTALL_PATH="$(cygpath "$VBOX_MSI_INSTALL_PATH")"

## 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-install”:

#!/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á el script “.libcommon” al que hacen referencia ambos:

# -*-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 [email protected]" >&2


function debug 
    [ "$LOGLEVEL" -lt 3 ] && return
    log "[DEBUG] [email protected]"


function info 
    [ "$LOGLEVEL" -lt 2 ] && return
    log "[INFO]  [email protected]"


function warn 
    [ "$LOGLEVEL" -lt 1 ] && return
    log "[WARN]  [email protected]"


function error 
    log "[ERROR] [email protected]"


function die 
    error "[email protected]"
    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 me funciona muy bien; con suerte, tendrás una suerte similar.

Parece que la respuesta más simple en este momento es VBoxVMService. No lo he probado todavía, intentaré recordar venir aquí y actualizar la respuesta si / cuando lo haga.

Acordado en VBoxVMService. Es muy fácil de configurar y parece funcionar bien. Puede encontrar cómo configurarlo aquí:

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

**** EDITAR **** Según la solicitud a continuación, un resumen del enlace. Aunque la solución funcionó para mí, el mérito es de Peter Upfold – http://peter.upfold.org.uk/

  • Instale Virtualbox y configure la máquina virtual para aceptar sesiones RDP.
  • Descargue e instale VBoxVmService en C: vms. Solo Google VBoxVmService para obtener un enlace de descarga (lo siento, no hay suficiente representante para publicar más de 2 enlaces).
  • Edite el archivo ini de VBoxVmService en C: vms:

[Settings]

ServiceName = VBoxVmService

VBOX_USER_HOME = C: Users Administrator.VirtualBox

RunAsUser =. Administrador

UserPassword = introduzca su contraseña aquí

RunWebService = no

PauseShutdown = 5000

[Vm0]

VmName = nombre de la máquina virtual en VirtualBox

ShutdownMethod = savestate

AutoStart = sí

  • Sustituya en VBOX_USER_HOME con la carpeta .VirtualBox en el directorio de inicio del usuario correcto, así como las directivas RunAsUser y UserPassword, y establezca el nombre de la máquina virtual de destino en la aplicación VirtualBox en VmName. También puede agregar más [Vmx] secciones después [Vm0] con otras máquinas virtuales para que se inicien cuando se inicie la máquina.

  • Cuando esté satisfecho con su configuración, desde un símbolo del sistema habilitado para el administrador, ejecute el siguiente comando para instalar el servicio. Una vez instalado el servicio, puede eliminar su contraseña de usuario del archivo INI, ya que está guardada en la configuración del Servicio:

C: vms VmServiceControl.exe -i

  • Ahora, debe reiniciar la computadora antes de intentar iniciar el servicio por primera vez, o no podrá ubicar las VM.

  • Al reiniciar, el servicio debería iniciarse (sujeto a la demora de ‘Automático (Inicio retrasado)’) y sus VM se iniciarán al arrancar.

Eres capaz de añadir valor a nuestra información aportando tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *