INSTALACION DE DUPLA ARGENTO CON XEN EN UBUNTU SERVER. Juan Carlos Reyes bajo licencia GPL jcreyesb@gmail.com Caracas-Venezuela En esta guía rápida trataré el tema de brazilfw y la dupla Argento bajo Xen, para sacar el máximo provecho (según he leído) a xen, la mejor forma es la paravirtualizacion, pero como bien sabemos el kernel de brazilfw esta en la versión 2.4, el mismo no soporta el parche para correr en xen de forma paravirtualizada, por lo que tendremos que hacerlo con full virtualización que es más lento. Empezamos con los “ingredientes” y pasos necesarios necesarios. Necesitaremos un PC cuyo procesador provea instrucciones de virtualización, y cuya tarjeta madre nos dé el porte para estas instrucciones, en este caso de estoy usando: • • • • Procesador AMD Athlon X2 AM2 4400+ 1.5 GB RAM Tarjeta Madre Asrock ALiveNF6P-VSTA Disco Duro Sata2 80GB La tarjeta madre fue de la gama media-baja que encontré con soporte para virtualización las gamas bajas de MSI no lo tienen. INSTALANDO UBUNTU Y XEN Procedemos con la instalación de Ubuntu Server, en este caso para sacar mejor provecho al procesador he usado la versión para AMD64 (también se puede usar la versión i386 con este procesador) puedes bajarlo aquí http://www.ubuntu.com/getubuntu/download La instalación de Ubuntu es realmente sencilla y una vez instalado este, igual la de XEN, si no tienes instalado el sistema puede ver aquí la forma de hacerlo http://www.howtoforge.com/perfect_setup_ubuntu_5.10_p2 Básicamente es el mismo procedimiento para la versión hardy 8.0.4 que es la que trataremos en este manual, una vez instalado Ubuntu procedemos a instalar XEN de la siguiente forma y con el comando siguiente apt-get install ubuntu-xen-server Una vez terminando el proceso de instalación procedemos a configurar xen (dom0): Al instalar XEN se crea en /etc dos carpetas xen y xen-tools, que tenemos allí? /etc/xen : Posee los archivos de configuración y los directorios • • • • • xend-config-xenapi.sxp xend-pci-quirks.sxp xend-config.sxp auto (directorio) script (directorio) Nos avocaremos al archivo xend-config.sxp este es el archivo que nos permite configurar el demonio xend, configuramos como queremos que trabaje xen, las formas de trabajo son: • • • Como router Como bridge Como nat Configuraremos según nuestras necesidades. Nos interesa crear un puente ethernet que estará formado por una interfaz ethernet falsa para cada máquina virtual y todas ellas unidas a la verdadera conexión ethernet. Si contamos con una única interfaz la configuración es muy sencilla. Para esto procedemos de la siguiente forma: • • • Comentaremos la directiva (network-script network-dummy) Descomentaremos la directiva (network-script network-bridge). También nos hará falta la directiva (vif-script vif-bridge), pero ésta ya viene descomentada por defecto. Descomentamos la directiva (vnc-listen '0.0.0.0') y cambiamos 127.0.0.1 por 0.0.0.0 para llegarle al vnc desde cualquier maquina. Si nos interesa agrupar todas nuestras máquinas virtuales en una red diferente, por ejemplo 192.168.0.x para dom0 y las demás máquinas físicas de la red y 10.0.0.x para las máquinas virtuales, y luego usar DNAT con iptables para enrutar el tráfico, necesitaremos usar las directivas (networkscript network-nat) y (vif-script vif-nat). Pero en el caso medio la solución ofrecida por un ethernet bridge cubrirá nuestras necesidades. Ya tenemos configurado nuestro demonio xend. /etc/xen-tools: Posee los archivos de configuración y los directorios • xen-tools.conf • xm-nfs.tmpl • xm.tmpl • partitions.d (directorio) • role.d (directorio) • skel (directorio) editamos el archivo y : • • Descomentamos la directiva dir =/home/xen (se puede usar la ruta que queramos) Descomentamos la directiva passwd=1 (es en caso de querer montar un Linux virtualizado, con esto al terminar nos pide que creemos una clave root, puede dejarse como viene por defecto) Todo listo, ahora procedemos a reiniciar el equipo, e iniciar con el kernel XEN, una vez iniciado si todo ha marchado bien procedemos a verificar nuestro kernel con root@Server:/home/xen/domains/BRIDGE1# uname -a Linux Server 2.6.24-19-xen #1 SMP Sat Jul 12 00:15:59 UTC 2008 x86_64 GNU/Linux Ya tenemos nuestro kernel xen , para verificar que el dom0 esta ativo hacemos root@Server:/home/xen/domains/BRIDGE1# xm list Name Domain-0 ID 0 Mem VCPUs 1231 2 State r----- Time(s) 503.8 Listo!!! Ahora todo funciona como queremos y podemos empezar a montar nuestra dupla. Archivos de Configuración e Instalación de brazilfw En este apartado procederemos a realizar el archivo de configuración que nos permitirá crear nuestro servidor, no he inventado nada. Hay suficiente documentación en la red como para completar todas las opciones que nos den problemas en nuestra maquina y el S.O. que seleccionemos. Siempre se pueden hacer cambios y personalizar tamaños, memorias, y configuraciones de la situación de las maquinas. Esta configuración ha sido probada tal cual aparece documentado. Si se necesita mas información se puede tomar como referencia los documentos y faqs de cada aplicación y sus ejemplos. El comando básico para administrar Xen es xm, el cual tiene una serie de subcomandos que nos permite realizar las siguientes tareas: • • • • • xm xm xm xm xm create nombre, inicia una máquina virtual shutdown nombre, apaga una máquina virtual reboot nombre, reinicia una máquina virtual list, muestra las máquinas virtuales activas console nombre, para acceder a la consola de un dominio El siguiente es un archivo de configuración básico de una máquina virtual de Xen: kernel = "/boot/vmlinuz-2.6-xen" memory = 64 name = "máquina1" vif = [ ’bridge=xenbr0’ ] disk = [ ’phy:/dev/hda7,hda1,w’,’phy:/dev/hda8,hda2,w’ ] root = "/dev/hda1 ro" ne2000=1 on_shutdown = "restart" on_reboot = "restart" on_crash = "destroy" Pasemos a detallar los parámetros: • • • • • • kernel: kernel que se utilizara para la máquina virtual. Es el que se genera durante el proceso de compilación o el que viene con los paquetes. Memory: cantidad de memoria que le asignamos Name: un nombre para la máquina virtual Vif: parámetros de red, en este caso especificamos que la interfase virtual del dominio se conectara al bridge llamado xenbr0 (este bridge lo crea por defecto Xen para comunicar las máquinas virtuales entre si, y a su vez con la red real a la cual esta conectado la máquina física). Disk: configuración del disco virtual. Esa configuración indica que la partición hda7 será el disco hda1 del dominio y la partición hda8 el dispositivo hda2. El carácter "w" es para activar el acceso de lectura y escritura. Root: similar a los parámetros que se le pasan a un kernel de Linux común, indica el root. Esta configuración ya sirve como base para iniciar una máquina virtual. Para mas detalles ver la pagina de manual xmdomain.cfg. Nota: En la versión del implementada, se usa ethx. xen 3.2 la denominación xenbrx no esta Nota2: En el caso de la opción disk phy se usa si se esta aplicando lvm o se tiene un disco real para el servidor que vamos a virtualizar o al montar una iso en loop, en caso de no ser esa la situación se usa file, pero para esta versión basada en ubuntu se debe usar tap:aio: para el disco duro virtual y phy para el cdrom virtual. En este apartado explicaremos más a fondo la opción de configuración vif vif=['type=ioemu,mac=00:16:3E:46:F1:A4,Bridge=eth0','mac=00:16:3E:46 :F1:A5,bridge=eth1'] aqui vemos que esta formado por varias opciones: • • • Type: el tipo de virtualización en de las tarjeta de red que deseamos, también se puede usar netfront Mac: las mac de xe tienen el sufijo 00:16:3E los otros se generan de forma aleatoria cada vez que creamos una maquina virtual en caso no tener seteada esta opción, en este caso vemos que siempre se usara la mac 00:16:3E:46:F1:A4. Bridge :es el puente que usaremos para conectarnos virtualmente al xen, este es el encargado de proveernos nuestas interfaces virtuales. en este caso la interfaz eth0 se creara en nuestro brazilfw con mac=00:16:3E:46:F1:A4 . Es importante saber como están estructurados los bridge en nuestro xen y a que tarjeta física apuntan para poder tener una buena configuración de los brazilfw en este caso el bridge=eth0 apunta a la tarjeta física eth0 así que si queremos tener equipos virtuales y llegarles desde la red LAN debe tener una interfaz virtual apuntando a este bridge. En el caso de la dupla si el ArgentoBR y el ArgentoQos apuntan al bridge=eth0 es como colocar un switch y quedaría de la siguiente forma, LAN ArgentoQOS ArgentoBR Lo que no nos permitirá usar el ArgentorBR ya que ambas maquinas virtuales estarían conectadas tanto a Internet como a la red LAN, para resolver esto debemos desconectar el ArgentoQos de la LAN y al ArgentoBR de Internet y crear una conexión entre ambos de forma tal que podamos obtener la siguiente configuración ArgentoQOS LAN ArgentoBR Para esto creamos un nuevo bridge el cual utilizaran los dos equipos, procedemos: root@Server:/home/xen/domains/BRIDGE1# brctl addbr eth3 podemos ver que se creo root@Server:/home/xen/domains/BRIDGE1# brctl show Levantamos la interfaz creada root@Server:/home/xen/domains/BRIDGE1# ifconfig eth3 up Luego en los archivos de configuración de cada maquina procedemos a setear el nuevo bridge de la siguiente forma: En el ArgentoQOS en el apartado vif la interfaz virtual que ve hacia el bridge eth0(que seria en nuestro caso el que ve hacia la LAN) le seteamos el nuevo bridge vif=['type=ioemu,mac=00:16:3E:46:F1:A4,Bridge=eth0','mac=00:16:3E:46:F1:A5,bridge= eth1'] por vif=['type=ioemu,mac=00:16:3E:46:F1:A4,Bridge=eth3','mac=00:16:3E:46:F1:A5,bridge= eth1'] y en el ArgentoBR la interfaz que apunta hacia el bridge=eth1(en nuestro caso internet) lo seteamos con el Nuevo bridge vif=['type=ioemu,mac=00:16:3E:46:F1:A4,Bridge=eth0','mac=00:16:3E:46:F1:A5,bridge= eth1'] por vif=['type=ioemu,mac=00:16:3E:46:F1:A4,Bridge=eth0','mac=00:16:3E:46:F1:A5,bridge= eth3'] con esto logramos la configuración que buscábamos… muy parecido a vmware, asi se procede con cada maquina que queramos y configuración que queramos usar o tener. Nota: en caso de reiniciar todo el servidor los bridges creados se borran y las maquinas virtuales no podrán iniciarse para esto creamos un script de la siguiente forma, que nos permita iniciar los bridges que hayamos configurado root@Server:/home/xen/domains/BRIDGE1# nano puentes pegamos lo siguiente #!/bin/sh brctl addbr eth3 ifconfig eth3 up guardamos, le damos permiso de ejecución root@Server:/home/xen/domains/BRIDGE1# chmod +x puentes copiamos al init root@Server:/home/xen/domains/BRIDGE1# cp puentes /etc/init.d/ luego lo ponemos a iniciarse en los diferentes runlevels root@Server:/home/xen/domains/BRIDGE1# update-rc.d puentes defaults Adding system startup for /etc/init.d/puentes ... /etc/rc0.d/K20puentes -> ../init.d/puentes /etc/rc1.d/K20puentes -> ../init.d/puentes /etc/rc6.d/K20puentes -> ../init.d/puentes /etc/rc2.d/S20puentes -> ../init.d/puentes /etc/rc3.d/S20puentes -> ../init.d/puentes /etc/rc4.d/S20puentes -> ../init.d/puentes /etc/rc5.d/S20puentes -> ../init.d/puentes Con esto tenemos ya nuestro script y así evitamos problemas al reiniciar Nota 2: En caso de poseer mas de una tarjeta física se debe crear un script que nos permita levantarlas a todas, el siguiente script realiza esta operación root@Server:/home/xen/domains/BRIDGE1# nano multinic agregamos lo siguentes #!/bin/sh dir=$(dirname "$0") "$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=eth0 "$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=eth1 "$dir/network-bridge" "$@" vifnum=2 netdev=eth2 bridge=eth2 Guardamos y le damos permiso de ejecución root@Server:/home/xen/domains/BRIDGE1# chmod +x multinic lo copiamos a /etc/xen/script root@Server:/home/xen/domains/BRIDGE1# cp multinic /etc/xen/script luego en el archivo de configuración de xen la directiva (network-script network-bridge), la cambiamos por (network-script multinic), esto hace que se inicien los diferentes bridges eth0, eth1, eth2 ..etc según se tenga en el archivo creado. OJO: al instalar cualquier brazilfw no realizar el cambio de bridge, debe instalarse con las opciones vif=['type=ioemu,mac=00:16:3E:46:F1:A4,Bridge=eth0','mac=00:16:3E:46:F1:A5,bridge= eth1'] una vez configurado según nuestro requerimiento hacer los cambios descritos. El archivo de configuración que nos permitirá empezar crear nuestro servidor es el siguiente llamado br.cfg: kernel='/usr/lib/xen/boot/hvmloader' builder='hvm' memory=512 name='BRIDGE1' device_model='/usr/lib/xen/bin/qemu-dm' #disk=[ 'tap:aio:/home/xen/domains/BRIDGE1/brazil.img,ioemu:hda,w'] disk=['tap:aio:/home/xen/domains/BRIDGE1/brazil.img,ioemu:hda,w','phy:/ dev/loop0,hdc:cdrom,r'] vif=['type=ioemu,mac=00:16:3E:46:F1:A4, bridge=eth0','mac=00:16:3E:46:F1:A5,bridge=eth1'] boot='dc' vnc=1 ne2000=1 on_shutdown = "restart" on_reboot = "restart" on_crash = "destroy" La opción vnc=1 nos va a permitir conectarnos vía vncviewer a la máquina virtual que se este creando, al iniciarse abrirá el puerto 5900 y de allí en adelanta toda maquina que se cree sumara un puerto 5901, 5902, etc. , si y sólo ya hay maquinas virtuales corriendo. Para poder usar esta opción se debió configurar la directiva (vnc-listen '0.0.0.0') en el archivo de configuración xend-config.sxp file:/home/xen/domains/BRIDGE1/brazil.img Para poder crear el archive brazil.img debemos usar el siguiente comando dd if=/dev/zero of=brazil.img bs=1M count=10000 en este caso usaremos 10GB de espacio para hacer la partición cache y las otras necesarias por eso en count el valor es 10000 si quieres más o menos sólo auméntalo o disminúyelo. OJO: todos los procedimientos descritos antes y los próximos se realizan en consola vía ssh no hace falta interfaz gráfica en el servidor para realizar esto. Nos bajamos la imagen que queramos usar del brazilfw Descomprimimos la imagen bajada Procedemos a montar el archivo ISO de la siguiente forma losetup /dev/loop0 /ruta/archivo.iso Ahora si procedemos a crear la maquina virtual con: xm create nombre_archivo.cfg Podemos ver como se inicio correctamente la maquina virtual, ahora como en el archivo de configuración tenemos la opción VNC=1 iniciamos una conexión VNC al puerto 5901 como vemos en las figuras El puerto 5900 pertenece al QOS que ya esta funcionando en xen, el 5901 al brazil+argentobridge que vamos a instalar y configurar Hecho esto nos aparece nuestra conexión vía vnc para continuar realizado la instalación como veremos en las imágenes siguientes… ya de aquí en adelante es más que conocido cómo instalar nuestro brazilfw Nota: una vez finalizada la instalación que nos pide reiniciar aceptamos cuando se reinicie el brazilfw que se caiga la conexión VNC tipeamos el siguiente comando Xm destroy nombre_de_la_maquina_virtual (ejm) Xm destroy BRIDGE1 Esto lo hacemos para luego en el archivo de configuración proceder a cambiar lo siguiente: #disk=[ 'tap:aio:/home/xen/domains/BRIDGE1/brazil.img,ioemu:hda,w'] disk=['tap:aio:/home/xen/domains/BRIDGE1/brazil.img,ioemu:hda,w','phy:/ dev/loop0,hdc:cdrom,r'] por: disk=[ 'tap:aio:/home/xen/domains/BRIDGE1/brazil.img,ioemu:hda,w'] #disk=['tap:aio:/home/xen/domains/BRIDGE1/brazil.img,ioemu:hda,w','phy: /dev/loop0,hdc:cdrom,r'] note que la primera línea ahora esta descomentada y la segunda comentada esto es para que el brazilfw inicie desde el “disco duro” y no desde el cdrom, una vez hecho el cambio volvemos a crear la maquina virtual con xm create nombre_del_archivo_.cfg Listo tenemos brazilfw esperando para por configurar argentoBridge Para que las maquinas virtuales se inicien automáticamente al reiniciar todo el equipo procedemos de la siguiente forma root@Server:/home/xen/domains/BRIDGE1# cd /etc/xen/auto root@Server:/ etc/xen/auto# ln –s /ruta/archivo.cfg Bibliografía Pagina del proyecto Xen en la Universidad de Cambridge • http://www.cl.cam.ac.uk/research/srg/netos/xen/ Xensource, empresa que mantiene Xen y brinda algunos productos comerciales. • http://www.xensource.com/ Wiki de Xen, aqui podemos entrar documentación interesante y links a artículos y presentaciones. • http://wiki.xensource.com/