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

    ¿Será con avellanas?

    ¡ Chocolate !

    Sí, nos gusta el chocolate, pero las tabletas duran tan poco… Debería haber una manera de hacer que duraran más. Claro que si lo pensamos y cortamos por aquí, y movemos esto para allá, entonces eureka!

    Magia

    Bueno, vale, de acuerdo: hay truco, es trampa. ¿Lo pillas? ¿no? Puedes ver la respuesta al leer más!

    Sigue leyendo