Tengo muchas máquinas de caja virtual en mi Ubuntu12.04, cada vez que apago o reinicio tengo que iniciarlas una por una.
Quiero una ayuda para escribir un script para iniciar automáticamente las máquinas VBox automáticamente al arrancar.
Tengo muchas máquinas de caja virtual en mi Ubuntu12.04, cada vez que apago o reinicio tengo que iniciarlas una por una.
Quiero una ayuda para escribir un script para iniciar automáticamente las máquinas VBox automáticamente al arrancar.
Respuestas:
Puede usar el servicio de inicio automático de VirtualBox. Un buen tutorial que describe cómo hacer esto se publica en el blog "Life of a Geek Admin" .
Los siguientes pasos están adaptados de la publicación de blog vinculada:
Primero debe crear el archivo /etc/default/virtualbox
y agregar algunas variables.
VBOXAUTOSTART_DB que contiene una ruta absoluta al directorio de la base de datos de
inicio automático y VBOXAUTOSTART_CONFIG que contiene la ubicación de la configuración de inicio automático. El archivo debería ser similar a esto:
# virtualbox defaults file
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
Ahora necesitamos crear el /etc/vbox/vbox.cfg
archivo y agregar
# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Create an entry for each user allowed to run autostart
myuserid = {
allow = true
}
Nota: Si el nombre del archivo vbox.cfg
no funciona arriba, intente nombrarlo autostart.cfg
.
Si usted es el único usuario, simplemente puede agregar la línea default_policy = allow
al vbox.cfg
archivo.
Establezca permisos en el directorio para el grupo de usuarios de vbox y asegúrese de que los usuarios puedan escribir en el directorio, así como en bits fijos.
sudo chgrp vboxusers /etc/vbox
sudo chmod 1775 /etc/vbox
Agregue cada uno de los usuarios al vboxusers
grupo.
sudo usermod -a -G vboxusers USERNAME
(reemplazar USERNAME
con el nombre de usuario)
NOTA : Si ha cambiado los permisos de grupo para el usuario actual, cierre la sesión y vuelva a iniciarla para actualizar los permisos. (crédito @ kR105)
Cada usuario que quiera habilitar el inicio automático para máquinas individuales debe establecer la ruta al directorio de la base de datos de inicio automático con
VBoxManage setproperty autostartdbpath /etc/vbox
y habilite el inicio automático para una VM individual con
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
Esto creará un myuserid.start
archivo en el /etc/vbox
directorio
Ahora reinicie vboxautostart-service para leer los cambios.
sudo service vboxautostart-service restart
Reinicie su sistema y su VM debería comenzar
Tuve incidentes infelices similares al intentar esta operación en el Vanilla LTS.
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
En esta versión, el archivo de clave /etc/init.d/vboxautostart-service no estaba instalado.
Hasta donde yo sé, apt-get puso todos los requisitos y VitualBox, así que no puedo decir por qué el archivo 'vboxautostart-service' no se proporcionó también. Pero para superar esto, aquí está mi actualización de la publicación de kdmurray.
1) El archivo / etc / default / virtualbox existía para mí. Por lo tanto, debe agregar vars:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
2) Debe crear /etc/vbox/autostart.cfg como lo indica OP.
6b) Necesita obtener un script vboxautostart-service y hacerlo ejecutable.
cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service
6c) Alerté al controlador rc.d, pero usé 24 como hora de inicio. Poniendo solo 20 y no se inició. Quizás funcionó incluso antes de que virtualbox funcionara.
sudo update-rc.d vboxautostart-service defaults 24 24
Luego reiniciar lanzó la VM correctamente.
vboxdrv
en las líneas # Required Start
/ # Required Stop
por virtualbox
. Parece que cambiaron el nombre del servicio, por lo que el sistema operativo no puede detectar correctamente las prioridades de inicio / detención. Creo que no necesita el paso 6c si reemplazó esas líneas.
Puedes usar vboxmanage startvm "my virtual machine" --type=headless|gui|sdl
(uno de esos). Use "sin cabeza" si son servidores a los que se conecta por otros medios que no sean la interfaz gráfica de usuario.
Para ejecutar estos comandos en el momento correcto durante el arranque, querrá leer en Upstart.
Después de muchas horas infelices tratando de que los procedimientos de kdmurray anteriores funcionen, sin éxito finalmente encontré un método que funcionó de manera simple.
Primero, mi host Linux (Mint 17) se configuró en el momento del arranque para iniciar sesión automáticamente en mi cuenta principal.
En segundo lugar, utilicé las instalaciones en VirtualBox GUI (v4.3.12) para crear un acceso directo para cada máquina virtual en el escritorio. {haga clic derecho en la VM en la columna izquierda y seleccione "Crear acceso directo en el escritorio"}
A continuación: ya descubrí que al abrir Menú-> Centro de control -> Aplicaciones de inicio -> Agregar y agregar accesos directos del escritorio, los archivos no funcionaban, descubrí en otra respuesta en esta página que la ubicación de las nuevas empresas es / home /USERNAME/.config/autostart, así que hice clic derecho en cada uno de los accesos directos de VM de escritorio y luego los pegué en esa carpeta, sobrescribiendo los archivos basura anteriores. Ahora desarrollaron los iconos 'bonitos' de VirtualBox.
Y efectivamente, al reiniciar la computadora host, las 3 máquinas virtuales se iniciaron automáticamente.
:-)
Bill Williams
PD: por desgracia, todavía me falta algo, porque a menudo las máquinas virtuales no se inician al arrancar, sino que generan un cuadro de diálogo de error que dice que están bloqueadas, incluso si les he dicho que se apaguen antes de reiniciar el host.
Además de la buena descripción del servicio vboxautostart anterior, puede hacer
VBoxManage modifyvm server --autostop-type savestate
para detener automáticamente al invitado en el apagado. Para Ubuntu 14.04 tuve que agregar un sleep 30 a la sección de parada vboxautostart-service, para que espere hasta que el invitado se haya guardado por completo.
Encontré una forma más simple en Ubuntu 16.04 ejecutando VBox 5.1.34.
Mientras esté en VBox, haga clic con el botón derecho en la máquina virtual en ejecución o inactiva en la lista, seleccione 'Crear acceso directo en el escritorio ". Una vez que vea el icono en su escritorio, abra con cualquier herramienta que le permita ver el comando subyacente creado por VBox (en mi sistema, hago clic derecho y selecciono 'propiedades') Copiar esto al portapapeles.
Abra el programa para actualizar las 'aplicaciones de inicio' y cree una nueva aplicación que se inicie en el momento del arranque, pegando el comando que copió del enlace de escritorio creado por VirtualBox.
Para iniciar una VM al iniciar sesión en nuestra sesión, es posible que queramos definir un archivo .desktop:
Cuando este archivo se copió o movió a nuestro directorio de inicio automático, se ejecutará después de iniciar sesión:
Ejecutar Virtual Box en el espacio del usuario puede ayudar a evitar efectos secundarios no deseados al iniciarlos durante el arranque (por ejemplo, la VM se ejecuta como root, el tiempo de arranque aumenta increíblemente, ...).
Esto se puede hacer usando la interfaz de administración de línea de comandos de VirtualBox. Simplemente ejecute el siguiente script al inicio.
#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")
case "$1" in
start)
echo "===Starting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
;;
stop)
echo "===Saving state of Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
sleep 20
;;
shutdown)
echo "===Shutting down Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
sleep 20
;;
reset)
echo "===Resetting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
;;
status)
echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
;;
echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
exit 1
;;
esac
exit 0
Hay un buen tutorial para más información.
Complemento a la respuesta @kdmurray.
Si obtiene un error en:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
Para resolver esto, tuve que crear manualmente los archivos "username" .start y "username" .stop con:
sudo touch "username".start
sudo touch "username".stop
Y cambia de dueño con:
sudo chown "username" "username".start
sudo chown "username" "username".stop
repetición:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
luego reinicie el servicio:
sudo service vboxautostart-service stop
sudo service vboxautostart-service start
comprobar es todo está bien con:
top
y debería ver el proceso "VBox ..." en una lista, si la máquina virtual se está ejecutando
También puede obtener el administrador de sesión de gnome descrito aquí. Gnome Session Manager
Está en el centro de software o simplemente puede ir a una terminal y escribir
sudo apt-get install gnome-session-common
A continuación, puede crear un pequeño script para ejecutar y utilizar el administrador de sesión de gnome para iniciarlo. Aquí hay un pequeño script de muestra para que pueda comenzar ...
#!/bin/sh
#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...
vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui
Así es como inicio mi Centos (nombre de mi máquina virtual) cuando mi máquina host se reinicia. Yo uso crontab para ese trabajo. Aquí está mi entrada crontab:
@reboot VBoxHeadless --startvm "Centos" &
Para el servidor Ubuntu 16.04.1 LTS resolví esto haciendo:
sudo systemctl enable rc-local.service
/etc/rc.local
su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"
Tenga en cuenta que virtual_box_user es el que puede ver la máquina virtual (que está dispuesto a iniciar) ejecutando el comando:
VBoxManage list vms
Ejemplo:
$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28}
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}
El modificado /etc/rc.local
debería verse así
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su bob -c "VBoxManage startvm 'virtualbox1' --type headless &"
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &"
exit 0
Si no elige el propietario correcto de virtualbox, debería ver el error al escribir el comando:
sudo systemctl status rc-local.service
Espero que esto pueda ayudar
1 - Crear un archivo:
nano /etc/init.d/vm-start
Pega esto:
#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless"
/bin/sleep 1
2 - Hacer el archivo vm-start ejecutable:
chmod +x /etc/init.d/vm-start
3 - Editar rc.local
nano /etc/rc.local
Agrega esto:
#!/bin/bash
/etc/init.d/vm-start
exit 0
4 - Reiniciar.