Como usar Virtualbox demonio/es

Aus i2pwiki.mk16.de
Zur Navigation springen Zur Suche springen

¿Por qué usar Virtualbox?[Bearbeiten]

Ante todo declarar, que NO soy ningún informático y todo lo que he aprendido ha sido por el método de la lectura y el sistema de la Prueba-Error.

Estuve muchas horas, casi dos semanas trabajando para instalar un servidor casero de maquinas virtuales, objetivo: Poder correr otras redes invisibles y un sistema multimedia.

Como buen usuario de Linux, primero hice el intento y probe LibVirt, sistema de virtualización muy extendido y (aparentemente) fácil de usar, pero tuve los siguientes problemas:

  • En mi maquina no consegui configurar el dispositivo eth0 para acceder a la VM desde todas las maquinas en la LAN
  • El modo puente (bridge) no es facil de configurar. En el intento rompi un par de veces mi configuracion de Red y no consegui repararla, necesite re-instalar.
  • Tiene varias opciones de interfaces web para usuario, pero NO consegui instalar ninguna.
  • No me fue posible administrar LibVirt de forma remota.
  • Y no consegui crear ninguna VM en un directorio montado localmente desde un sistema de ficheros NFS remoto.

He buscado entre los numerosos manuales y documentos existentes en internet al respecto, pero fue todo en vano.

Después de muchas pruebas decidí intentar con Virtualbox. Este me dejo hacer todo desde el principio y sin darme errores insuperables.

Sabes como configurar LibVirt (KVM)? Has logrado instalar un WUI para administracion remota de KVM? Sabes mas detalles sobre las opciones de Red en KVM? Estarias dispuesto a escribir un manual al respecto? Por favor, contactanos en #latino-i2p



Objetivos de Virtualbox como demonio[Bearbeiten]

Supongamos el siguiente escenario
Tenemos una o mas MVs corriendo sobre virtualbox, pero NO necesitamos (o queremos) verlas permanentemente, sino simplemente manejarlas remotamente con ayuda de SSH/es (u otra alternativa). Entonces queremos que VBox este corriendo en segundo plano y así consumiendo el mínimo de recursos que son siempre escasos.
Otro escenario
Al haber muchas MVs corriendo, la pantalla se vuelve un caos. Enviamos todas las máquinas virtuales a segundo plano y así podemos descansar de ellas, sobre todos si algunas de ellas solo harán tareas que no necesitan de mucha supervisión.


Preparación[Bearbeiten]

Esta guía esta básicamente pensada para sistemas basados en debian y orientada principalmente a ubuntu y es por lo mismo aplicable (prácticamente) a cualquiera que use un sistema de paquetes.


Instalación[Bearbeiten]

$ sudo nano /etc/apt/sources.list
[...]
deb http://download.virtualbox.org/virtualbox/debian versión ubuntu contrib

Guardar y agregamos la llave GnuPG a nuestro anillo de confianza

$ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

Actualizamos e instalamos

$ sudo apt-get update
$ sudo apt-get install VirtualBox-4.3 -y

(Ya esta disponible la version 5.0)

Agregamos nuestro usuario "sk" (o el que vaya a controlar VBox) al grupo de virtualbox

$ sudo usermod -aG vboxusers sk


Configurar[Bearbeiten]

Vemos el estado de virtualbox

$ sudo /etc/init.d/vboxdrv status

Y si no aparece algo como

VirtualBox kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) are loaded.

Entonces podemos intentar

$ sudo /etc/init.d/vboxdrv setup

Si necesitamos activar dispositivos especiales como USB o PCI, necesitaremos de la extensión especial<ref>https://www.virtualbox.org/wiki/Downloads</ref>

$ wget http://download.virtualbox.org/virtualbox/4.3.28/Oracle_VM_VirtualBox_Extension_Pack-4.3.28-100309.vbox-extpack

Y lo instalamos

$ sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.3.28-100309.vbox-extpack
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully installed "Oracle VM VirtualBox Extension Pack".


Creando una VM[Bearbeiten]

Para probar podemos crear una maquina virtual "Ubuntu 14.04" haciendo

$ VBoxManage createvm --name "Ubuntu 14.04" --register
Virtual machine 'Ubuntu 14.04' is created and registered.
UUID: c5f89cfd-b0ee-40da-93b8-d4d3a5324bea
Settings file: '/home/sk/VirtualBox VMs/Ubuntu 14.04/Ubuntu 14.04.vbox'

A continuación le asignamos memoria, definimos un medio de inicio (dvd) y la forma de conectarse a Internet (puente a eth0)

$ VBoxManage modifyvm "Ubuntu 14.04" --memory 512 --acpi on
  --boot1 dvd --nic1 bridged --bridgeadapter1 eth0

Creamos un disco duro virtual de 8GB.

$ VBoxManage createhd --filename Ubuntu_14_04.vdi --size 8000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Disk image created. UUID: 8d48aef4-eb92-4181-aed1-63ccbae0f2b1

Y creamos un conector o puerto IDE para el disco duro y el dvd

$ VBoxManage storagectl "Ubuntu 14.04" --name "IDE Controller" --add ide

Conectamos el disco duro a la MV

$ VBoxManage storageattach "Ubuntu 14.04" --storagectl "IDE Controller"
  --port 0 --device 0 --type hdd --medium /home/sk/Ubuntu_14_04.vdi

Y la imagen dvd virtual

$ VBoxManage storageattach "Ubuntu 14.04 Server" --storagectl "IDE Controller"
  --port 1 --device 0 --type dvddrive --medium /home/sk/ubuntu-14.04-server-i386.iso

Y listo!!!

Para mas opciones podemos hacer

$ VBoxManage --help

Podemos iniciar/detener/pausar/resetear nuestra MV haciendo

$ VBoxHeadless --startvm "Ubuntu 14.04"
$ VBoxManage controlvm "Ubuntu 14.04" poweroff
$ VBoxManage controlvm "Ubuntu 14.04" pause
$ VBoxManage controlvm "Ubuntu 14.04" reset

Mas opciones pueden encontrarse en

$ VBoxHeadless --help
Oracle VM VirtualBox Headless Interface 4.3.28
(C) 2008-2015 Oracle Corporation
All rights reserved.
Usage:
  -s, -startvm, --startvm <name|uuid>   Start given VM (required argument)
  -v, -vrde, --vrde on|off|config       Enable (default) or disable the VRDE
                                        server or don't change the setting
  -e, -vrdeproperty, --vrdeproperty <name=[value]> Set a VRDE property:
                                        "TCP/Ports" - comma-separated list of ports
                                        the VRDE server can bind to. Use a dash between
                                        two port numbers to specify a range
                                        "TCP/Address" - interface IP the VRDE server
                                        will bind to
  --settingspw <pw>                     Specify the settings password
  --settingspwfile <file>               Specify a file containing the settings password
  -c, -capture, --capture               Record the VM screen output to a file
  -w, --width                           Frame width when recording
  -h, --height                          Frame height when recording
  -r, --bitrate                         Recording bit rate when recording
  -f, --filename                        File name when recording. The codec used
                                        will be chosen based on the file extension

Mas detalles se encentran en el manual.


VirtualBox en Segundo Plano[Bearbeiten]

Y por ultimo podemos usar el siguiente CLI para hacer correr la MV en segundo plano:

$ VBoxManage startvm Nombre_VM --type vrdp >/dev/null

El único parámetro importante es Nombre_VM, ya que debe ser exactamente igual al que usamos al momento de crear la MV.


Comprobar su Ejecución[Bearbeiten]

De esta manera la MV estará corriendo en segundo plano. Para confirmarlo podemos mirar dentro de

$ top

O cualquier otra herramienta que nos permita ver los procesos en ejecución. Otra forma es intentar acceder a nuestra MV:

$ ssh user@maquinavirtual

Y si todo va bien, ya deberíamos poder acceder a ella.


Script Inicio[Bearbeiten]

Si deseamos ejecutar esta MV siempre que se inicie el Host, podemos usar el siguiente script (haciendo los cambios en las variables en negrilla)

#! /bin/sh
### BEGIN INIT INFO
# Provides: virtualbox-Monowall
# Required-Start: $local_fs $remote_fs vboxdrv vboxnet
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Monowall virtual machine
# Description: Monowall virtual machine hosted by VirtualBox
### END INIT INFO

# Author: Brendan Kidwell
#
# Based on /etc/init.d/skeleton from Ubuntu 8.04.

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
 PATH=/usr/sbin:/usr/bin:/sbin:/bin
 DESC='''"Servidor VM"'''
 NAME='''virtualbox-i2p'''
 SCRIPTNAME='''/Carpeta/Donde/Esta/VM'''/$NAME

 MANAGE_CMD=VBoxManage
 VM_OWNER='''user'''
 VM_NAME='''"maquinav"''' #This has to be the name exactly as it appears in your VirtualBox GUI control panel.

# Read configuration variable file if it is present
 [ -r '''/Carpeta/Donde/Esta/VM'''/$NAME ] && . '''/Carpeta/Donde/Esta/VM'''/$NAME

# Load the VERBOSE setting and other rcS variables
 [ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
  {
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started

    sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:\s*running" >/dev/null && {
      echo "$VM_NAME" is already running.
      return 1
    }

    sudo -H -u $VM_OWNER $MANAGE_CMD startvm "$VM_NAME" --type vrdp >/dev/null || >/dev/null || {
      echo Failed to start "$VM_NAME".
      return 2
    }

    echo "$VM_NAME" started or resumed.
    return 0
  }

#
# Function that stops the daemon/service
#
do_stop()
  {
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred

    sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:\s*running" >/dev/null || {
      echo "$VM_NAME" is already stopped.
      return 1
    }

    sudo -H -u $VM_OWNER $MANAGE_CMD controlvm "$VM_NAME" savestate || {
      echo Failed to stop "$VM_NAME".
      return 2
    }

    echo "$VM_NAME" suspended.
    return 0
  }

#
# Display "State" field from showinfo action
#
do_status()
  {
    sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:\s*.*$"
  }

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
  do_start
case "$?" in
  0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
  [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
case "$?" in
  0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
status)
do_status
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 3
;;
esac

:

Y solo sera cuestión de colocarla en la carpeta de Script de Inicio de Sistema (/etc/init.d/).

En mi caso, le hice una modificación, y he colocado el script directamente donde se encuentra la máquina virtual, así lo utilizo en exclusiva para ejecutarlo solo cuando lo necesito.

$ script_vm.sh start

Y lo detengo, cuando sea necesario

$ script_vm.sh stop

No olvidar darle los permisos de ejecución:

$ chmod +x script_vm.sh


Acceder Remotamente[Bearbeiten]

Si necesitamos acceder gráfica y remotamente a nuestra máquina virtual deberemos seguir los siguientes pasos.

1) Entrar al servidor o maquina host que aloja a nuestra maquina virtual

$ ssh user@host

2) Buscar dentro de ~/VirtualBox\ VMs/mv.i2p/mv.vbox

$ cat ~/VirtualBox\ VMs/mv.i2p/mv.vbox | more
   [...]
     <RemoteDisplay enabled="true" authType="Null">
       <VRDEProperties>
         <Property name="TCP/Ports" value="3389"/>
       </VRDEProperties>
     </RemoteDisplay>
   [...]

Y veremos algo así, en donde aparecerá un numero de puerto.

3) Abrimos nuestro cliente para maquinas remotas (RDP) preferido (p.e. remina), escogemos abrir conexión remota y colocamos simplemente

ip-host:3389

En donde ip-host es la dirección de la maquina que hospeda al sistema virtualizado.

Y ya deberíamos poder estar accediendo a nuestra maquina remota ;-)

En caso de querer acceder a través de CLI es suficiente usar OpenSSH.


Véase También[Bearbeiten]

Categoría:Guia


Referencias[Bearbeiten]

<references />