Instalar y configurar Xen en Debian lenny (dom0)


En el artículo Xen y Debian Lenny se discute sobre la situación actual de Xen en la versión de desarrollo de Debian. Actualmente (11/10/2008) no hay soporte dom0 para el núcleo 2.6.26 (no puede utilizarse un equipo con Debian Lenny y núcleo 2.6.26 como «anfitrión»), aunque es posible que esta situación cambie.

En este artículo explicaremos los pasos que hay que dar para instalar Xen en un equipo con Debian Lenny, utilizando para ello el núcleo 2.6.18-6-xen de Debian etch.

Nota: Ya hay soporte dom0 para Xen en debian lenny con el núcleo 2.6.26, por lo que el método aquí empleado ya no es necesario.

Instalando el hypervisor

Actualmente la versión del hypervisor de Xen en Debian Lenny es la 3.2:

aptitude search hypervisor
v xen-hypervisor -
v xen-hypervisor-3 -
v xen-hypervisor-3.2-1 -
p xen-hypervisor-3.2-1-i386 - The Xen Hypervisor on i386
p xen-hypervisor-3.2-1-i386-nonpae - The Xen Hypervisor on i386 without pae
v xen-hypervisor-i386 -
v xen-hypervisor-i386-nonpae -

Elegimos el paquete xen-hypervisor-3.2-1-i386 y lo instalamos:

aptitude install xen-hypervisor-3.2-1-i386
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
libc6-xen{a} xen-hypervisor-3.2-1-i386 xen-utils-3.2-1{a} xen-utils-common{a} xenstore-utils{a}
0 paquetes actualizados, 5 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 2778kB de ficheros. Después de desempaquetar se usarán 7311kB.
¿Quiere continuar? [Y/n/?]

que nos instala varios paquetes adicionales de Xen-3.2.

Descargar los paquetes del núcleo 2.6.18-6-xen

La última versión del núcleo linux con soporte para dom0 en Debian es la 2.6.18-6. Necesitamos los siguientes paquetes, que descargamos directamente e instalamos con dpkg (nota: estos enlaces pueden estar rotos si se ha actualizado el paquete en el repositorio security):

wget http://security.debian.org/debian-security/pool/updates/main/l/linux-2.6/linux-modules-2.6.18-6-xen-686_2.6.18.dfsg.1-23etch1_i386.deb


dpkg -i linux-modules-2.6.18-6-xen-686_2.6.18.dfsg.1-23etch1_i386.deb


wget http://security.debian.org/debian-security/pool/updates/main/l/linux-2.6/linux-image-2.6.18-6-xen-686_2.6.18.dfsg.1-23etch1_i386.deb


dpkg -i linux-image-2.6.18-6-xen-686_2.6.18.dfsg.1-23etch1_i386.deb

De este último paso extraemos la salida:

Configurando linux-image-2.6.18-6-xen-686 (2.6.18.dfsg.1-22etch3) ...
update-initramfs: Generating /boot/initrd.img-2.6.18-6-xen-686
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found Xen hypervisor 3.2-1-i386, kernel: /vmlinuz-2.6.18-6-xen-686
Found kernel: /vmlinuz-2.6.26-1-686
Found kernel: /vmlinuz-2.6.18-6-xen-686
Updating /boot/grub/menu.lst ... done

Donde podemos ver que se ha creado una entrada en GRUB para el nuevo núcleo, si editamos el fichero /boot/grub/menu.lst, aparece una entrada como:

title Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.18-6-xen-686
root (hd0,0)
kernel /xen-3.2-1-i386.gz
module /vmlinuz-2.6.18-6-xen-686 root=/dev/mapper/Debian-root ro console=tty0
module /initrd.img-2.6.18-6-xen-686

(En este equipo hay volúmenes lógicos y por eso aparece el dispositivo /dev/mapper/Debian-root, en un equipo con particiones físicas aparecería por ejemplo /dev/sda1)

Configuración del dom0

Antes de reiniciar con el nuevo núcleo hay que dar varios pasos:

Limitacion de memoria para dom0

En algunos sistemas el reparto de memoria entre dom0 y el resto de dominios da problemas. Si al crear un nuevo dominio se obtiene un mensaje que nos informa de que no hay memoria disponible, se puede solucionar limitando la memoria para dom0. Esto se realiza mediante un parámetro al arrancar el núcleo. En particular se modificará la línea que invoca al kernel de Xen, por ejemplo para limitar la memoria a 256 MB:

kernel /boot/xen-3.2-1-i386.gz dom0_mem=256M

Dispositivos loop

El numero máximo de dispositivos tipo loop que existen en el sistema es por defecto ocho, puesto que cada máquina virtual que instalemos va a usar dos (en caso de que estén en un fichero y no en una partición), este valor se suele quedar corto, por lo que hay que aumentarlo.

El controlador loop puede estar compilado dentro del nucleo o —como es en nuestro caso— compilado como modulo. En el primer caso se puede aumentar el número de dispositivos loop añadiendo el parámetro max_loop=128 en la línea kernel del fichero de configuración de GRUB. En el caso de que esté ́compilado como módulo, debemos incluir loop en el fichero /etc/modules, y creamos el fichero /etc/modprobe.d/loop con la línea:

options loop max_loop=128

para permitir montar hasta 128 dispositivos en este modo.

Mensajes «4gb seg fixup …»

En ocasiones pueden aparecer registros en la consola (o en alguno de los ficheros de log) del tipo:

4gb seg fixup, process init (pid 1), cs:ip 73:b7e7fec7

El número de estos mensajes puede llegar a ser enorme. Esta es la situación que se produce en este momento al seguir los pasos de este artículo.

Para solucionar esto, lo primero es asegurarnos de tener instalado el paquete libc6-xen. En un equipo con Debian etch esto cambia las dependencias de las bibliotecas compartidas, como podemos ver con:

# ldd /sbin/init|grep libc.so.6
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d9e000)

Para comprobar a qué paquete pertenece este último, utilizamos dpkg

# dpkg -S /lib/tls/i686/cmov/libc.so.6
libc6-xen: /lib/tls/i686/cmov/libc.so.6

Mientras que en un equipo con la instalación anterior, ocurre:

# ldd /sbin/init |grep libc.so.6
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dca000)
# dpkg -S /lib/i686/cmov/libc.so.6
libc6-i686: /lib/i686/cmov/libc.so.6

La línea hwcap 1 nosegneg del fichero /etc/ld.so.conf.d/libc6-xen.conf soluciona esto, pero no está todavía funcionando correctamente, así dremos los siguientes pasos:

aptitude purge libc6-i686

Editamos /etc/ld.so.conf.d/libc6-xen.conf y lo dejamos como:

hwcap 0 nosegneg

Ejecutamos:

ldconfig

Este aspecto se comenta en detalle en el bug #499366

Instalar y configurar Xen en Debian lenny (dom0)

12 comentarios en “Instalar y configurar Xen en Debian lenny (dom0)

  1. Tienes toda la razón Mstaaravin, los que tengan hardware nuevo pueden tener problemas con ese núcleo, pero es la situación actual.

    La gente de «Debian Kernel» están trabajando en un núcleo 2.6.26 con soporte dom0, aunque no se sabe todavía si estará a punto para cuando salga lenny estable.

    Me gusta

  2. centrino dijo:

    YO uso lenny y ya xen3.2 con el kernel 2.6.26 esta en los repositorios

    sh# uname -a
    Linux sh 2.6.26-1-xen-686 #1 SMP Thu Oct 9 19:59:46 UTC 2008 i686 GNU/Linux

    sh# xm list
    Name ID Mem VCPUs State Time(s)
    Domain-0 0 1887 2 r—– 401.3

    Saludos

    Me gusta

  3. Gracias centrino,

    Efectivamente ya está disponible en Debian Lenny el núcleo 2.6.26 con soporte dom0. Yo estaba confundido, el parche está metido desde la versión 2.6.26-7 y no desde la 2.6.26-10 como creía (ahora mismo en lenny estamos con la 2.6.26-8).

    Tendré que actualizar en condiciones la entrada cuando tenga tiempo.

    Me gusta

  4. xenman dijo:

    Buenas, he intentado instalar el xen bajo una debian con kernel 2.6.18 y la verdad es que cuando inicio el sistema empieza a darme errores del tipo:

    :File «/usr/lib/python/xen/xend/sxp.py», line 187, in input_char

    y si intento ejecutar xentrace tambien me da errores…

    algun consejo?

    gracias

    Me gusta

  5. centrino dijo:

    tengo una duda y es la siguiente, si yo tengo un sistema X con kernel 2.6.25 y quiero virtualizarlo con xen puedo utilizar la paravirtualizacion directamente o tengo que hacer algo en el kernel? por ejm: supongamos que tengo ipcop y le compilo un kernel 2.6.x ya puedo paravirtualizarlo o debo aplicarle algun parche al kernel?, la pregunta concreta es. desde la version 2.6.26 ya los kernel vienen con las opciones para paravirtualizar o hay que seguir aplicando el parche xen?

    Me gusta

  6. Centrino, no termino de entender muy bien la pregunta.

    No lo tengo claro del todo, pero creo que el problema está en que Xen, hasta ahora, no da soporte para núcleos más nuevos que el 2.6.18. El parche que está aplicando Debian ahora para el núcleo 2.6.26 lo ha desarrollado la gente de Suse.

    Si compilas tu propio núcleo deberás buscarte el parche adecuado y tener en cuenta que no es lo mismo el soporte Xen para un dom0 que para un domU.

    Me gusta

Deja un comentario