Xen 4 y Debian: corrigiendo algunos detalles

Instalar Xen 4.x en Debian GNU/Linux es bastante sencillo (el metapaquete xen-linux-system), ahora bien, configurar para hacer funcionar otras cosas es otra tarea distinta; por ejemplo, encontrarán que 6 cosas no  funcionan “a la primera” en Debian y deberá corregirlas para disfrutar al máximo de Xen 4.x:

1.- Habilitando XenAPI y accediendo con virt-manager

Virt-manager es la herramienta gráfica para libvirt (librería para acceso a servicios de virtualización, integra KVM, Qemu, Xen, LXC, openVZ y hasta VMWare) diseñada por la gente de Red Hat y que raya en lo infantil por su facilidad de uso para gestionar sistemas virtualizados, sin embargo, notaremos que luego de instalarlo, no podremos acceder a nuestro sistema Xen.

Para acceder con virt-manager (luego de instalado virt-manager y libvirt-bin) es activar el acceso por la API de Xen:

Editamos:

archivo: /etc/xen/xend-config.sxp

Y habilitamos http-server (en el puerto 8000, es el que usa libvirt), descomentamos (y ponemos en “yes”):

(xend-http-server yes)

Nota: si desean acceder desde cualquier equipo con libvirt (y no solo desde localhost), agregan esta línea:

(xend-address ”)

Posteriormente, debemos agregar al usuario con el que vamos a acceder al dominio Xen al grupo libvirt (ojo: esto como medida de seguridad para no acceder con el usuario root):

adduser jesuslara libvirt

E instalamos los paquetes necesarios para virt-manager y para que este nos interrogue por nuestra contraseña:

aptitude install virt-goodies ssh-askpass ssh-askpass-gnome

Listo!, ya podremos conectarnos a nuestro Xen vía un tunel remoto SSH (accedemos a “Archivo > Nueva Conexión  y seleccionamos Xen y modo “Tunel SSh Remoto”), usando nuestro usuario y nuestra contraseña.

2.- Creando VMs, configurando virt-manager

Una cosa que debemos configurar antes de empezar a crear máquinas con virt-manager, es indicarle en qué forma creamos los discos de las máquinas virtuales, esto se hace en el menú “Detalles” de la conexión al servidor Xen:

En esta ventana hay una pestaña que dice “almacenamiento”, donde podrán indicar si se crean volúmenes LVM, archivos de imagen en disco, etc

He creado 3 tipos de almacenamiento, un grupo de volúmenes LVM (para las máquinas virtuales), un espacio en disco (en /srv/xen) para aquellas máquinas que crearé usando archivos .img (imágenes qcow exportables) y una carpeta especial, donde he copiado los ISO de todos los sistemas operativos que utilizaré, así los podré usar rápidamente cada vez que quiera crear una nueva VM.

Ya con esto (Y la red), podrán crear máquinas virtuales.

3.- Creando VMs con HVM (virtualización completa) en virt-manager

Cuando intentan crear una VM HVM (que requiera virtualización completa, ejemplo, un Windows) con virt-manager, este emitirá un error de que no encuentra qemu-dm, esto es debido a que Xen utiliza una forma modificada de KVM y el ejecutable (aunque instalado, se llama “xen-qemu-dm-4.0″) no se encuentra en el lugar que espera virt-manager, esto se resuelve fácilmente con un enlace simbólico:

ln -s /usr/lib64/xen-4.0 /usr/lib64/xen

Y listo!, ya pueden crear máquinas usando HVM, fijense en este equipo freeBSD:

4.- virt-manager y “xm new” no funciona

“xm create” es la forma “usual” como creamos VMs en Xen, sin embargo, esto tiene un inconveniente, la VM es “creada” cada vez que se inicia y “destruida” (léase mejor, retirada de la lista de dominios administrados) del gestor de dominios Xen cada vez que se apaga, debido a esto, la VM no puede ser gestionada vía la XenAPI o vía gestores externos basados en libvirt (como virt-manager).

Este es un error heredado de Xen 3.x, cuando ejecutamos “xm new” aparece el siguiente error:

xm new -f test.cfg

Unexpected error: <type ‘exceptions.ImportError’>
Please report to xen-devel@lists.xensource.com
Traceback (most recent call last):
File “/usr/lib/xen-4.0/bin/xm”, line 8, in <module>
main.main(sys.argv)
File “/usr/lib/xen-4.0/lib/python/xen/xm/main.py”, line 3620, in main
_, rc = _run_cmd(cmd, cmd_name, args)
File “/usr/lib/xen-4.0/lib/python/xen/xm/main.py”, line 3644, in _run_cmd
return True, cmd(args)
File “<string>”, line 1, in <lambda>
File “/usr/lib/xen-4.0/lib/python/xen/xm/main.py”, line 1449, in xm_importcommand
cmd = __import__(command, globals(), locals(), ‘xen.xm’)
File “/usr/lib/xen-4.0/lib/python/xen/xm/new.py”, line 26, in <module>
from xen.xm.xenapi_create import *
File “/usr/lib/xen-4.0/lib/python/xen/xm/xenapi_create.py”, line 22, in <module>
from xml.parsers.xmlproc import xmlproc, xmlval, xmldtd
ImportError: No module named xmlproc

Esto es debido a la ausencia del módulo xmlproc de python, sin embargo, cuando intentamos instalarlo ocurre esto:

apt-get install python-xml
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
El paquete python-xml no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente
E: El paquete «python-xml» no tiene un candidato para la instalación

El paquete ya no existe (porque fué reemplazado por python-lxml) y porque xmlproc ya no está en esa librería, sin embargo, como XMLproc es utilizado simplemente para validar el DTD de los archivos XML generados por xenAPI (y eso no es un “error fatal” que afecte la creación de la VM administrada) entonces;  para hacerlo funcionar, simplemente abrimos el archivo:

archivo : /usr/lib/xen-4.0/lib/python/xen/xm/xenapi_create.py

Y editamos la línea 22, comentándola:

#from xml.parsers.xmlproc import xmlproc, xmlval, xmldtd

Cuando ejecutamos:

xm new -f test.cfg 
Using config file "./test.cfg".

Ahora veremos que la VM test está incorporada al administrador Xen permanentemente (permitiendo ser gestionada por la API vía xenapi o vía libvirt):

xm list
Name        ID  Mem    VCPUs    State Time(s)
Domain-0    0   2752   2        r----- 90.2
freebsd         512    1               0.0
test            256    1               0.0
winxp           1250   2               1358.4

Nótese que las VMs gestionadas por XenAPI no tienen ID si están apagadas, para encenderlas indicamos:

xm start test

Y veremos que la VM “test” se inicia, incluso podemos gestionarla vía libvirt (ej: virt-manager):

Nota: ¿y cómo editamos un domU administrado?, si contamos con el archivo cfg, entonces simplemente eliminamos el dominio:

xm delete test

Y lo volvemos a incorporar con xm new.

Si no contamos con el archivo cfg (porque tal vez lo creó otra herramienta) entonces debemos editar el dominio en “/var/lib/xend/domains/”, recuerde, sin embargo, que este archivo tiene la forma “SXP” (un parser a XML hecho en perl para sablotron, que permite persistencia de objetos en un pseudo-lenguaje de marcado), como esta:

(domain
(domid 3)
(vcpus_params ((cap 0) (weight 256)))
(PV_args ‘root=/dev/xvda2 ro ip=:127.0.255.255::::eth0:dhcp ‘)
(PV_bootloader )
(cpus (()))
(memory_sharing 0)
(superpages 0)
(VCPUs_live 1)
(actions_after_crash restart)
(uuid 6257207b-6831-ddcd-a21d-010a5fb77070)
(PV_ramdisk /boot/initrd.img-3.2.0-0.bpo.2-amd64)

5.- Mi VM Windows es lenta, ¿cómo hago?

Una de las razones por las cuáles la gente usa VMWare, es qué, como toda herramienta privativa, accede a información confidencial a la cual no acceden empresas dedicadas al software libre, esto es, VMWare “inyecta” drivers Windows WHQL para que el acceso a red, disco y video de la máquina virtual sea más rápido, sin embargo, desde 2011 eso es posible en Xen también!, ya que un joven hizo “ingeniería inversa” de los drivers Microsoft Windows para Hyper-V y existe una versión “libre” de los drivers para Windows, se llaman los Xen PV Drivers y al instalarlos en la VM con Windows, modificarán el acceso al “disco virtual” y a la “red virtual” de manera notable.

Para instalarlo, descargue la versión necesaria para la versión de Windows que instaló acá:

http://www.meadowcourt.org/downloads/

Antes de instalar, la tarjeta de red se ejecuta a 100Mbps, el acceso a disco en modo “IDE” y la tarjeta de video era cirrus;

Instale a la VM Windows, verá al instalar:

 

5.- Quiero cambiar de CDROM en virt-manager

Una de las cosas más frustrantes que te puedes encontrar, es que si intentas cambiar el CDROM (expulsar->desconectar en virt-manager) este te pedirá que reinicies la VM, esto debido a que el CDROM es tratado como “un disco más”, sin embargo, es posible cambiar de CDROM en una VM encendida; para ello:

1.- Expulsamos el CDROM en el sistema operativo

2.- Cambiamos a la cónsola de virt-manager (CTRL+ALT+2 en la ventana de la máquina virtual)

3.- Expulsamos (desconectamos) el CDROM en Virt-manager:

(qemu) eject hdc

4.- Montamos el nuevo disco, si es una imagen ISO, escribimos:

(qemu) change hdc /path/to/file.iso

Si es un CD en una unidad de CD-ROM, la ruta física a la unidad

(qemu) change hdc /dev/sr0

5.- Volvemos al sistema operativo y montamos la unidad de CDROM

Conclusiones

Espero que estos trucos les sirvan, a mí me han salvado un mundo en trabajo con virtualización Xen y como siempre, los publico acá por si alguien más los necesita.

Happy Hacking!

About these ads

31 Respuestas a “Xen 4 y Debian: corrigiendo algunos detalles

    • Ese error está extraño, parece alguna dependencia de python, con respecto a como se administra, cada maquina que agregues con xm new la verás apagada en el virt-manager

  1. Pingback: El Blog de abr4xas Vol. 2 » Blog Archive » Hablando de XEN y otras yerbas…·

  2. comparando el virtualismo en xen vs el de vmware y qemu usando kvm el xen ofrece mejor que todo si lo configuro bien, pero el OS influye? vmware se comporta bien en windo porque lo ue acabas de decir, la inyecion de “drivercitos” en xen o vware, pero en el caso de linux ?

    • la hypervirtualización con Xen de Linux ayuda muchísimo a la gestión y claro, Linux en este aspecto, ofrece un rendimiento extremadamente notable sobre Xen que sobre VMWare, ahora bien, no todas las versiones de GNU/Linux vienen adaptadas para utilizar Xen en el dom0, una de ellas es Debian, pero por ejemplo, Fedora hay que hacer malabares para tener un dom0, asi que si, el OS influye muchísimo! …

    • No, no es necesario montar virt-manager en el servidor, se instala en el cliente desde donde accederás al Xen que vas a administrar.

      • Bueno voy a hacer la prueba entonces instalando virt-manager en el cliente desde el cual me conecto al servidor xen a ver como va. otra pregunta sobre los usb en las maquinas virtuales estado instalando hacer que me reconozca una llave usb un windows que tengo instalado en xen pero no podido hacerlo funcionar. por casulidad hay que instalar algun paquete extra o si me podrias darme alguna mano como hacerlo ya que el windows parece que lo detecta como usb 1.0 pero no lo muestra finalmente nunca con el siguiente comando xm usb-add xen-win8srv [xen-win8srv:03f0:5d07] el codigo alfa numerico corresponde a el id de la llave. saludos

  3. Excelentes recomendaciones… Saludos

    HP Proliant DL180
    Debian Squeeze 6.0.5
    2.6.32-5-xen-amd64

    Nota: Algunos inconvenientes con los controladores: Ethernet, CPU

  4. hola como estas , muy buenas las explicaciones pude levantar mis maquinas windows dentro del xen sin problemas, tengo un solo problemas al crear las maquinas windows con el virt me asigna la red 192.168.100.0 yo quiero que sea parte de la red de dom-0 que es 192.168.0.0 y no encuentro manera de hacerlo, ya que le asigno la ip manualmente al windows y no sale por esa red.
    Me podrias decir como puedo arreglar eso.
    muchas gracias

  5. hola excelente la nota pude levantar perfectamente maquinas windows.
    El unico problema que tengo es que no puedo hacer que las maquinas windows esten en mi misma red que el dom-0 o sea creo un vm windows con el virtmanagr perfecto pero me asigna la red 192.168.100.0 yo qiero que este en la 192.168.0.0 y no encuentro la manera. intente varias cosas en el archivo de configuracion y nada. me podrias dar una mano con esto.
    muchas gracias desde Argentina

    • Debes crear manualmente en tu sistema el bridge para que la interfaz del dom0 y las virtuales compartan, ahora, en el virt-manager, hay una opción que sale al dar sobre la conexión > Propiedades, y es la configuración de la red, donde puedes desactivar la red NAT por defecto 192.168.100 y habilitas tu red puente 192.168.0 …
      Si necesitas ayuda avisas!, saludos y gracias por el comentario!

      • hola como hago el bridge para compartir el puente del dom-0 con la virtual windows, por que las vm debian que creo desde xen no tengo problemas, vi desde el virt manager el tema de cambiar la red y la ip pero me dice que mi rango esta en uso con eth0, me podes dar una mano que tengo que poner a andar un servidor en mi trabajo.
        muchas gracias

  6. Hola Guido, fijate, si tienes máquinas Xen con Debian, pues ¿cómo le tienes la red?, ejecuta:
    brctl show

    Para ver tus interfaces bridge activas (ej: brxen0, br0, eth0 en xen con if-bridge)

    Luego, en el virt-manager, haces botón derecho sobre la opción que dice “host (xen)”, y le das a “Details”, en la pestaña “Redes Virtuales” a la interfaz “default” la apagas (le das al botón stop), y luego vas a la pestaña “Interfaces de Red”, allí, le das al botón nuevo (el símbolo +) y dices que vas a crear una interfaz “puente” …

    Cuando te pida opción de nombre, le das el bridge que obtuviste en brctl, si no has creado un bridge, es tan fácil crearlo como agregar al /etc/network/interfaces

    iface xenbr0 inet static
    address 192.168.0.1
    network 192.168.1.0
    netmask 255.255.255.0
    gateway 192.168.1.1
    broadcast 192.168.1.255
    bridge_ports eth0
    bridge_maxwait 1

    Y reinicias tus interfaces de red.

    Saludos!

  7. ummm, no se.. creo que sigo prefiriendo usar xen-create-image / xm list (por nombrar algunos comandos). una pregunta.. a que te refieres con esto …sin embargo, notaremos que luego de instalarlo, no podremos acceder a nuestro sistema Xen… en ralacion a como uso xen, mi receta es xen+lvm

    • Y se siguen usando, no son “mutuamente” excluyentes y los xen-tools son utilizables para crear rápidamente máquinas para paravirtualizadas, aunque para HVM, nada más fácil que virt-manager.
      btw no entendí por qué dices “xm list”, siempre se usa!, lo que no se usa es “xm create” y esto es porque, para instalaciones básicas, está bien usar xm create, pero cuando se trata de datacenters, o irás de lugar en lugar encendiendo máquinas (o metiendo sus .cfg en “auto”) para ello, utilizas la API de Xen e instalas algún orquestador de máquinas virtuales.

      Significa que aunque instales libvirt en un servidor y tengas Xen, no puedes acceder con virt-manager a la primera, debes activarlo, como se muestra en el blog.
      Si, Xen+LVM, tal como se nombra en el artículo …
      Saludos!

    • Por cierto, la diferencia entre una maquina “administrada” y una “no-administrada”, es que, si cambias RAM, asignas un disco ó cualquier cambio a una maquina administrada, este cambio se refleja en su configuración; en una máquina “no-administrada” para que ese cambio fuere permanente, tendrías que editar el archivo .cfg e incorporar los cambios allí …

  8. por cierto una vez le di una ojeada a enomaly.. pero al final segui con xen-tools…volvere a probar una interfaz de administracion… saludos

  9. segui tu guia de instalacion del virt-manager. pero me da el mensaje.. la consola grafica aun no se encuentra activa para el huesped..ahora cuando uso un vncviewer si puedo conectarme a la maquina virtual..me faltara algo en la configuracion he estado buscando por dias y en verdad no encuentro el detalle.. otra cosa.. donde guarda virt-manager los archivos de configuracion de las maquinas virtuales?.. Gracias saludos

  10. Hola antes de empezar muy buena información me han ayudado mucho :D GRACIAS, ahora solo tengo un problemilla tengo un equipo con un xeon el cual instalo debian, reviso las banderas y todo bien, instalo el kernel de xen y ups! cuando ya inicia el equipo con el kernel de xen las banderas desaparecen :S hasta ahi yo ups! y cuando inicio virt-manager me sale la siguiente leyenda WARNING:EL EQUIPO PARECE NO TENER SOPORTE PARA VIRTUALIZACION DE HARDWARE.LAS OPCIONES DE INSTALACIÓN PODRIAN ESTAR LIMITADAS. Pero me esta mintiendo :( tambien lo instale en un amd y paso lo mismo, he actualizado el kernel de debian al 3.0.bpo y nada lo mismo CUALQUIER AYUDA ESTARE AGRADECIDA :D

    • En efecto, Xen tiene su propia virtualización por hardware (llamada HVM), así que por seguridad, cuando inicias con Xen, toda bandera de KVM queda desaparecida, para comprobar si puedes virtualizar por hardware ejecuta:
      xm info

      y verás en una opción (CAPS) algo que dirá “HVM” para 32 y 64 bits.

      No puedes usar KVM sobre Xen 4 y viceversa …

      Saludos!

      • Hola buen día pues veras ejecuto el comando xm dmesg | grep -i hvm y el resultado es el siguiente:

        (XEN) HVM:ASIDs disabled
        (XEN) HVM:VMX enable

        Saludos :D

  11. Hola amigo probe con todo lo que me pasaste y no puedo hacer que tengo la im de mi red las masquians windows, los debian instalados funcionan sin problemas con la ip.
    Ahora instale nuevamente el servidor y tiene el xen instalado.
    Me podrias guiar paso a paso como configuro asi tengo tanto el el dom-0 como en las virtuales linux y windows todos con la red 192.168.0.0
    muchas gracias

  12. Saludos, Tengo un problema al momento de crear el almacenamiento (paso # 2) porque al querer realizar un LVM me arroja el siguiente error

    Error creando el grupo: Could not start storage pool: internal error Child process (/sbin/vgchange -aly vgVM) status unexpected: exit status 5

    Traceback (most recent call last):
    File “/usr/share/virt-manager/virtManager/asyncjob.py”, line 45, in cb_wrapper
    callback(asyncjob, *args, **kwargs)
    File “/usr/share/virt-manager/virtManager/createpool.py”, line 482, in _async_pool_create
    poolobj = self._pool.install(create=True, meter=meter, build=build)
    File “/usr/lib/pymodules/python2.7/virtinst/Storage.py”, line 744, in install
    build=build, autostart=False)
    File “/usr/lib/pymodules/python2.7/virtinst/Storage.py”, line 489, in install
    raise RuntimeError(errmsg)
    RuntimeError: Could not start storage pool: internal error Child process (/sbin/vgchange -aly vgVM) status unexpected: exit status 5

    Al ejecutar un xm dmesg | grep -i hvm me arroja lo siguiente
    (XEN) HVM: ASIDs enabled.
    (XEN) HVM: VMX enabled
    (XEN) HVM: Hardware Assisted Paging (HAP) detected
    (XEN) HVM: HAP page sizes: 4kB, 2MB

    Soy muy novato en esto de virtualizar y sobre todo en lo que llaman “computadora” =D

    • Los LVM son algo que deberias dominar antes de meterte en estos menesteres … el grupo de volúmen por lo general debería estar “creado” (pvcreate) o en su defecto, existir el espacio marcado para PV (physical-volume)

    • Pues si la VM es paravirtualizada, no tiene ninguna cónsola asociada expuesta para ser capturada por virt-manager, la única cónsola sería la tty1, asociada al comando “xl console”, en virt-manager por ejemplo, sólo se pueden ver cónsolas VNC, generadas por la virtualización completa.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s