virtualbox

Un script para crear N máquinas virtuales iguales con VirtualBox

Un dia pensé: voy a instalarme una máquina virtual.. bueno no, 2.. bueno no, 4.. y entonces dije.. pues voy a hacer un script para que se instalen solas desde la línea de comandos. Como conocía un poco VirtualBox y el kickstart, pues me ataqué a ello.

 

Antes de empezar, tengo un Ubuntu 12 (con dirección para nuestro ejemplo 192.168.0.5) y mis direcciones LAN (como en muchas casas) son 192.168.0.X.

  • Me bajo el ISO del DVD de instalación del Centos6. Podéis bajaros el linux que más os guste.
  • Lo descomprimo en un directorio y modifico el “isolinux/isolinux.cfg”:
default linux
label linux
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.0.5/ks.cfg text ksdevice=eth0 gateway=192.168.0.1 ip=192.168.0.4 dns=192.168.0.1 netmask=255.255.255.0 --onboot=on

De esta manera, uso como fichero de configuración kickstart el “ks.cfg” que os muestro más adelante, y durante la instalación del Centos sé que tendrá la IP “4”.

  •  Luego me vuelvo a construir el ISO del Centos6 con esa pequeña modificación:
mkisofs -o /data/centos6-modificado.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -V -T  /centos6
  •  Nos creamos un fichero “ks-plantilla.cfg”, a partir del cual crearemos el ks.cfg definitivo para la instalacion (sustituyendo los strings “miip” y “mihost”) y lo pondremos accesible en un sitio http, yo lo he puesto en el apache local. Este archivo podeis crearlo con las opciones y paquetes que querais, basandoos en las reglas del kickstart de redhat, lo importante es el primer párrafo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
install
cdrom
text
clearpart --all --initlabel
autopart
url --url=http://192.168.0.5/centos6/
lang es_ES
keyboard es_ES
network --bootproto=static --device=eth0 --ip=miip --netmask=255.255.255.0 --gateway=192.168.0.1 --nameserver=192.168.0.1,62.2.17.60,62.2.24.16
2,62.2.17.61 --onboot=on --hostname=mihost
poweroff
 
authconfig --enableshadow --enablemd5
timezone Europe/Madrid
bootloader --location=mbr --driveorder=sda
 
rootpw --iscrypted *******************
 
selinux --disabled
firewall --disabled
zerombr
skipx
logging info
 
%packages
@base
@core
@load-balancer
@nfs-file-server
@spanish-support
@ftp-server
@java
@mail-server
@mysql
@network-server
@web-server
vim-enhanced
vim-common

Y ya estamos listos para hacer nuestro script shell que creará las máquinas virtuales él solico usando los comandos de VirtualBox de línea de comandos (manual):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# VARIABLES A MODIFICAR
#-------------------------------------------------------
# Nombre de la VM, IP, tamaño del disco duro en megas
VM="molokai"
DIRIP="192.168.0.13"
TAMDISCO="20480"
PATHVM="/data/vms"
#-------------------------------------------------------
sed "s/miip/$DIRIP/g" /var/www/html/ks-plantilla.cfg > /var/www/html/ks-temp.cfg
sed "s/mihost/$VM/g" /var/www/html/ks-temp.cfg > /var/www/html/ks.cfg
rm /var/www/html/ks-temp.cfg
# Creamos la VM Red Hat o Centos
VBoxManage createvm --name $VM --ostype "RedHat" --register
# Memoria RAM 1Gb, memoria de video 32M, habilitar PAE, audio on
VBoxManage modifyvm $VM --memory 1024 --vram 32 --pae on --audio pulse
# Creamos el HD y DVD virtuales y "metemos" nuestro ISO en el DVD
VBoxManage createhd --filename $PATHVM/$VM.vdi --size $TAMDISCO
VBoxManage storagectl $VM --name $VM --add sata
VBoxManage storageattach $VM --storagectl $VM --port 0 --type hdd --medium $PATHVM/$VM.vdi
VBoxManage storageattach $VM --storagectl $VM --port 1 --type dvddrive --medium /data/centos6-modificado.iso
 
# Activamos la red para la VM
VBoxManage modifyvm $VM --nic1 bridged --bridgeadapter1 eth0
 
# Este arranque instala el centos y apaga la VM cuando ha terminado (con la ip "4")
VBoxManage startvm $VM --type headless
 
# Maquina en instalacion no arrancada
while [ "`ping -c1 192.168.0.4|grep '1 received'|grep -v grep`" = "" ]; do
sleep 5
echo VM arrancando ...
done
while [ "`ping -c1 192.168.0.4|grep '1 received'|grep -v grep`" != "" ]; do sleep 30
echo VM instalandose ...
done
echo VM instalada!
echo VM apagandose ...
sleep 30
 
# Quitamos el DVD del centos y reiniciamos
VBoxManage storageattach $VM --storagectl $VM --port 1 --type dvddrive --medium emptydrive
VBoxManage startvm $VM --type headless
while [ "`ping -c1 $DIRIP|grep '1 received'|grep -v grep`" = "" ]; do
sleep 20
echo Esperando IP de la VM...
done
echo "VM lista!"

Y eso es todo. Podeis ejecutarlo cambiando los valores de las variables o hacer un “for” dentro con un array de maquinas.. a gusto de cada uno. 

Si teneis dudas dejad un comentario e intentaré ayudaros.

¿He dicho ya que Chris Hadfield es mi héroe?

Desde que el canadiense Chris Hadfield empezó a enviar vídeos desde la Estación Espacial Internacional (ISS), no ha habido un momento de pausa. Nos ha enviado muchísimos vídeos y tweets durante estos meses que ha comandado la Expedición 35, con los (personalmente) más divertidos experimentos que se pueda uno imaginar. Y para despedirse de su estancia en el espacio, ha grabado esta joya:

Este tío es un JEFE.

NASA-SFA-expedition26-poster

Los posters “geeks” de la NASA

La gente del departamento de la NASA de  la SFA (Space Flight Awareness) tiene la costumbre de hacer un póster por cada expedición que se envía  a la Estación Espacial  Internacional (ya van 35 expediciones). Vale, hasta ahí bien, pero estamos hablando de la gente de la NASA y estos tienen un toque” geek” que nos gusta mogollón.

Al principio, los posters eran guapetes pero nada del otro mundo, véase este de la ISS Expedición 4, donde tres fornidos y bravos mozalbetes nos muestran  sus chulos trajes de astronauta sobre una alfombra amero-rusa. Podría ser la portada de una película de serie B de los 80. No es la repanocha, pero bueno, ahí está.

Sigue leyendo