jueves, 13 de noviembre de 2008

Creación de máquina virtual desde linea de comandos

Podréis encontrar en muchos sitios web como crear máquinas virtuales desde el asistente gráfico que incorpora VirtualBox. Dejo algunos enlaces para el que prefiera crearlas desde entorno gráfico.

crear-maquinas-virtuales-en-debian-etch-con-virtualbox
crear-una-maquina-virtual-virtual-box
crear-maquina-virtual-para-instalar

Yo personalmente prefiero administrar siempre los servidores desde linea de comandos, así que publico como crear máquinas virtuales desde la linea de comandos.

Lamentablemente necesitaba virtualizar una máquina window$ así que son los comandos que usaré para publicar este post.

Lo primero será crear la máquina virtual dándole un nombre y registrándola en nuestro VirtualBox.
VBoxManage createvm -name winxp -register

Una vez creada iremos lanzando modificaciones para tener una configuración más concreta de nuestra máquina virtual.

Yo ya tenía una imagen de un window$ XP, así que vamos a reciclarla en esta máquina. Y así nos ahoramos el tiempo de instalación.

Lo primero que hay que hacer para asociar un disco virtual a una máquina virtual es registrar el disco en nuestro VirtualBox.
VBoxManage registerimage disk winxp.vdi -type normal

Después asociamos el disco a la máquina virtual.
VBoxManage modifyvm winxp -hda winxp.vdi

Le asignamos a la máquina virtual 1GB de memoria RAM que cogerá de la máquina servidora.
VBoxManage modifyvm winxp -memory 1024

A mí personalmente no me gusta dejar el puerto de VRDP por defecto, así que lo modifico para que esta máquina virtual escuche en otro puerto distinto. Además si pretendemos tener más de una máquina virtual en el mismo servidor, no podremos iniciarlas a la vez si el puerto VRDP es el mismo.
VBoxManage modifyvm winxp -vrdpport 3390

Configuramos la tarjeta de red con NAT sobre la máquina servidora.
VBoxManage modifyvm winxp -nic1 nat -cableconnected1 on

Una vez hecho todo esto ya tendríamos la máquina preparada para correr. Y podríamos iniciarla ejecutando:
VBoxManage startvm winxp -type vrdp

Si queremos entrar dentro de la consola de nuestra máquina servidora usamos el comando rdesktop, donde pongo las xxx.xxx.xxx.xxx tendrás que poner la IP de tu servidor de VirtualBox.
rdesktop -a 16 xxx.xxx.xxx.xxx:3390

Ya puedes usar tu máquina Window$ corriendo en un servidor GNU/Linux con VirtualBox.

Todo esto está muy bien, pero será más cómodo la esa máquina virtual tenga su propia IP dentro de nuestra Red y que la máquina servidora sea transparente. Para esto tendremos que hacer algunas modificaciones en nuestro sistema y en nuestra máquina virtual.

Lo primero que haremos será modificar nuestro fichero /etc/network/interfaces. Tendremos la configuración una nueva tarjeta "virtual" que hará un puente entre nuestra tarjeta de red que utilicemos.
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
bridge_ports eth0

Después de reiniciar las interfaces (/etc/init.d/networting restart) hacemos un ifconfig y veremos las dos tarjetas, la virtual con si propia IP asignada por el DHCP y la eth0 también con su propia IP.
usuario@maquina:~$ ifconfig
br0 Link encap:Ethernet direcciónHW XX:XX:XX:XX:XX:XX
inet dirección:xxx.xxx.xxx.xxx Difusión:xxx.xxx.xxx.xxx Máscara:xxx.xxx.xxx.xxx
dirección inet6: fe80::20a:5eff:fe5f:e275/64 Alcance:Vínculo
ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1
RX packets:7328 errors:0 dropped:0 overruns:0 frame:0
TX packets:6345 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:5590681 (5.3 MB) TX bytes:882468 (861.7 KB)

eth0 Link encap:Ethernet direcciónHW XX:XX:XX:XX:XX:XX
ARRIBA DIFUSIÓN MULTICAST MTU:1500 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Bucle local
inet dirección:127.0.0.1 Máscara:255.0.0.0
dirección inet6: ::1/128 Alcance:Anfitrión
ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1
RX packets:3287 errors:0 dropped:0 overruns:0 frame:0
TX packets:3287 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:155517 (151.8 KB) TX bytes:155517 (151.8 KB)

Ahora vamos a crear una nueva tarjeta de red de VirtualBox que estará enlazada con la br0 que hemos creado. Para ello tenemos que parar un servicio de VirtualBox que administra las conexiones de red de las máquinas virtuales. Crear la tarjeta VirtualBox y después volver a encender el administrador de redes VirtualBox.

Las tarjetas de red de VirtualBox están asociadas a un usuario, yo corro los servicios de VirtualBox con root, si preferís correrlos con otro usuario, tendréis que darles permisos al fichero /dev/net/tun.
/etc/init.d/vboxnet stop
VBoxAddIF vbox0 root br0
/etc/init.d/vboxnet start

Ahora al hacer ifconfig veremos además de nuestra lo, eth0 y br0 la nueva tarjeta vbox0.

Solo nos falta asignar esta vbox0 para que la use directamente nuestra máquina virtual.
VBoxManage modifyvm winxp -nic1 hostif -cableconnected1 on -hostifdev1 vbox0

vbox0 no puedes configurarla desde el servidor de máquinas virtuales, la configuración de IP y puerta de enlace tendrás que hacerla dentro de la máquina virtual.

Es posible que necesitemos tener un disco secundario para usar como almacen dentro de nuestra máquina virtual. Son un par de pasos muy sencillos.

Creamos el fichero .vdi con un tamaño máximo (30GB) y lo registramos dentro de nuestro servidor VirtualBox. Y después asociamos ese disco a la máquina virtual que prefiramos. Una vez hecho esto iniciamos la máquina virtual y será dentro de la máquina virtual donde tendremos que crearle una partición y formatearla.
VBoxManage createvdi -filename Almacen.vdi -size 30000 -register
VBoxManage modifyvm winxp -hdb Almacen.vdi