jueves, 3 de marzo de 2011

Mantenimiento de Aulas. Un enfoque virtualizado. (Parte 1/3)

Fueron varias las preguntas que surgieron cuando considere la posibilidad de utilizar Máquinas Virtuales en equipos de laboratorio:
  • ¿para que?¿que ventajas ofrece si ya tengo un sistema de clonación?
  • ¿Podre clonar las máquinas virtuales utilizadas y desplegarlas con multicast?
  • ¿Podre clonar Windows7 y ejecutar el sysprep para preparar el sistema (incluirlo en Active Directory y darle un nombre, ...etc)?
Después de investigar un poco y realizar varias pruebas, las respuestas fueron afirmativas.

¿Para que?¿Que ventajas ofrece? 

Encontré varios motivos para adoptar este enfoque, pero el decisivo, fue el uso de las instantáneas del sistema o snapshot. Las snapshot permiten restaurar el sistema automáticamente antes de cada arranque y de forma casi instantánea. Con lo que el usuario siempre se encuentra un sistema limpio y en perfecto estado.

Las otras ventajas eran:

  • Independencia del hardware.
  • Actualización de los sistemas virtuales usando multicast.
  • Posibilidad de redimensionar los discos virtuales.
  • Flexibilidad para realizar casi cualquier cosa.
 Desventajas:

  • Posible perdida de rendimiento con respecto al uso directo del hardware del equipo. Pero he realizado el test de configuración de Windows 7 y los resulados son:
      • CPU 6.4
      • RAM 6.7
      • Video 1 (no soporta aceleración 3D)
      • Disco 6
       Teniendo en cuenta que W7 puntua de 1 a 7.9 me parecio mas que suficiente.
        El problema de la aceleración 3D tampoco supone gran cosa mientras no se vayan a usar los equipos para render o juegos.


¿Podre Clonar las VM?

Esto en importante porque de forma regular es necesario instalar nuevas aplicaciones o actualizar las ya instaladas.

A priory Existe la posibilidad de usar dos métodos:

  • Clonar todo el disco o partición del sistema mediante el sistema de clonado que usemos de forma habitual (recomiendo Clonezilla SE).
  • Copiar el disco virtual (fichero vdi) actualizado a los clientes.
Ambos enfoques son válidos.

Puesto que existe la posibilidad de enviar ficheros desde un servidor a varios clientes usando multicast (mediante la herramienta udp-cast de Linux), parece que transferir los ficheros vdi nos permitiría actualizar las distintas VM de forma independiente (con el consiguiente ahorro de tiempo).

Sin embargo, también es posible crear una partición para alojar cada fichero vdi y así utilizar el método de clonado de discos (o particiones) que usemos habitualmente (¿Clonezilla SE?).

Yo adoptare la transferencia de ficheros vdi con udp-cast, me parece más flexible y así lo pruebo.

¿Podré usar Sysprep con Windows7?


Gracias al programa vdfuse-v82 (ojo tiene un bug para discos VMDK), es posible montar los discos vdi en el sistema de ficheros anfitrión, con lo que podremos parsear el fichero sysprep.xml con los datos que queramos y ponerlo en la VM con Windows7 para ejecutar el sysprep al arrancar.

Por supuesto también permite acceder al disco de la VM con Linux.

Nota:He conseguido que lo ejecute y funcione, pero al parsearlo, no me hace el cambio de nombre. Seguiremos informando.

¿Vale, pero como lo hago?

La idea es montar un sistema anfitrión con Linux y usar VirtualBOX para levantar las máquinas virtuales  (en adelante VM).

Una vez instalado todo y configurado, los equipos arrancan con Grub y se muestra un menú para seleccionar el S.O a utilizar, así como la opción de mantenimiento (para la que se requiere de contraseña).

Como sistema host he utilizado ubuntu 10.4.1 server versión de 64bits. Instalado con la opción de "sistema mínimo" y sin seleccionar ningún paquete durante el proceso de instalación.

Como virtualizador he utilizado VirtualBOX versión 3.2, por que es el paquete que viene en la distro y parece que va mas ligero que la versión 4.

Para poder montar los discos vdi en el sistema de archivo del host y hacer cosas como parchear el sysprep.xml para Windows7, he utilizado vdfuse-v82 (que es posible compilarlo utilizando las headers de la versión ose del VirtualBox).

Que sí, que sí, pero ¿como?

Para abreviar, partiremos de la base de que ya hemos instalado ubuntu 10.4.1 server, sistema mínimo y sin ningún paquete seleccionado y virtualbox-3.2. El que tenga dudas ya sabéis, internet lo sabe todo, a buscar que hay mucha documentación.

Lo primero que hay que hacer es cambiar grub2 por grub1.5, más fácilmente configurable.

La idea es crear un fichero de configuración con menús para arrancar las distintas VM más un menú de configuración protegido por contraseña. Ejemplo del fichero menu.lst:


title        Windows 7
kernel        /boot/vmlinuz-2.6.35-020635-generic root=/dev/sda1 ro quiet VM=W7
initrd        /boot/initrd.img-2.6.35-020635-generic
quiet


title        Linux
kernel        /boot/vmlinuz-2.6.35-020635-generic root=/dev/sda1 ro quiet VM=Linux
initrd        /boot/initrd.img-2.6.35-020635-generic
quiet

title        Linux Practicas
kernel        /boot/vmlinuz-2.6.35-020635-generic root=/dev/sda1 ro quiet VM=Linux2
initrd        /boot/initrd.img-2.6.35-020635-generic
quiet

title        Mantenimiento
password --md5 $1$PZgknzmNqPTYhVU/kiCW0
kernel        /boot/vmlinuz-2.6.35-020635-generic root=/dev/sda1 ro quiet
initrd        /boot/initrd.img-2.6.35-020635-generic
quiet

 
La variable de la linea del kernel "VM", la utilizo para evaluar que menú ha sido seleccionado y arrancar la VM correspondiente.

He creado un script que se ejecuta al arrancar llamado VMboot.sh que esta en /etc/init.d :

#!/bin/bash

VM=`cat /proc/cmdline | awk -F 'VM=' '{print $2}' | awk '{print $1}'`
case "$VM" in
    'W7')
    su MiUsuario -c /home/
MiUsuario/StartW7.sh;;
    'Linux')
    su
MiUsuario -c /home/MiUsuario/StartLinux.sh;;
    'PrimerArranque')
    /home/
MiUsuario/PrimerArranque.sh;;      
esac


Este script lanza los scripts que levantan la máquina virtual correspondiente. La opción de "PrimerArranque"  la utilizo para hacer tareas de postclonado que veremos más adelante.

miércoles, 26 de enero de 2011

Declaración de Intenciones

Hola,

ya soy un blogger uuuuuppps.
Acabo de publicar mi primera entrada y ya me arrepiento de no haber empezado mucho antes.
Sobre todo porque espero que este blog me sirva para compartir (y recordar) las soluciones a los retos informáticos que me surgen en el trabajo diario con ordenadores y redes.

Mi intención es ir publicando todo aquello que crea de interés con el fin de intentar aportar mi granito de arena a la comunidad de Internet. Sin la cual, difícilmente podría realizar mi trabajo.

Por último, aprovecho para dar las gracias a todos aquellos que realizan codigo abierto y a todos aquellos que hacen posible que Internet "lo sepa todo".

Clonando Aulas con multicast: DRBL y Clonezilla SE

Hace unos días escribí un articulo extenso (con el código de los scripts creados en perl  y otras cosas) sobre como utilizar DRBL y Clonezilla SE para el clonado de Aulas. Lo dejé en scribd:

Aquí en Español

Aquí en Ingles (gracias traductor de google).


Hoy voy a intentar resumir el  articulo anterior, incidiendo solamente en aquellas "partes oscuras" que más me costo resolver.

Como servidor DRBL y DHCP se ha utilizado Linux con Debian Lenny (también ha funcionado con ubuntu server 10.04 como servidor DRBL).

Usar DRBL sin DHCP:

Es posible usar el servidor DRBL con un DHCP ya existente en la misma red. Para ello, una vez instalado y configurado DRBL:
   
    En el servidor DRBL:
  • Desinstalar el dhcp : apt-get remove dhcp3-server
  • Reemplazar el dhcpd.conf del servidor dhcp ya en explotación por el generado al instalar el DRBL.
  • (Opcional) Configurar el entorno de arranque de los clientes PXE para que no pidan identificarse al servidor dhcp:  mknic-nbi -c n

    En el servidor DHCP ya en explotación (dhcp3-server):

  • Indicar cual es el servidor PXE y el fichero a cargar:
      • next-server IP-ServidorDRBL
      • filename pxelinux.0 
  • (Opcional)  Si no se ha ejecutado: mknic-nbi -c n, también hace falta:
      • option host-name NombreDadoAlDRBL

Clonar Aulas:

Es posible invocar Clonezilla pasando la lista de IP's de los equipos a clonar: dcs -h "listade IP's"

Por tanto para trabajar con aulas lo único que se necesita es conocer las IP's que pertenecen a cada aula y generar las lista correspondiente.

Por ejemplo, si se dispone de un fichero con la lista de IP's del aula1:

              dcs -h "`cat aula1.txt`"

Hara que Clonezilla trabaje sobre todos los equipos del fichero aula1.txt


IMPORTANTE AL CLONAR LINUX:

    Interfaz de red:

         Antes de clonar vaciar el fichero /etc/udev/rules.d/70-persistent-net-rules para que el sistema clonado no renombre la interfaz de red (ej eth0 -> eth1).

    Grub:

        Al instalar Clonezilla en modo BOX, el cliente utiliza parte del sistema de archivos del servidorDRBL (mediante NFS). Por ello a la hora de instalar grub, es necesario que ambos sistemas tengan la misma arquitectura (x86 o amd64) y utilizen la misma versión de grub. Si no dara error al instalar grub y habrá que instarlo a mano.


Bueno y esto es todo.

Por último recomendar a todos aquellos que empiecen con Clonezilla este par de enlaces:



http://www.congdegnu.es/2009/02/20/clonando-con-drbl-y-clonezilla-usando-multicast/


http://www.corbacho.info/clonezilla/clonezilla.html

Saludos.