Gentoo Logo

Configurando Gentoo con Xen

Contenido:

1.  Introducción

La tecnología Xen le permite correr múltiples sistemas operativos en un único sistema físico, gobernar el consumo de recursos e incluso migrar dominios (los cuales son entornos virtuales en los cuales corre un sistema operativo) desde un sistema Xen hacia otro. Xen requiere que el sistema operativo anfitrión soporte Xen (el cual, en este caso, será un núcleo Linux) pero los sistemas operativos invitados pueden correr sin modificaciones si su hardware soporta Intel Virtualization Technology (VT-x) o AMD Virtualization Technology (SVM). En otro caso sus sistemas operativos invitados deben también soportar Xen.

Esta guía charlará con usted a través de los pasos necesarios para tener Xen levantado y corriendo en Gentoo Linux. No discutiremos sobre el propio Xen (el proyecto tiene una documentación aceptable disponible) no trataremos configuraciones especializadas que podrían ser muy interesantes para Xen pero no son relativas a Xen (como exportar Portage a través de NFS, arrancar Linux usando PXe, etc.)

2.  Preparando el Domain0

Introducción

Domain0 es el dominio principal bajo Xen, aloja el sistema operativo anfitrión que gobernará todos los otros dominios bajo Xen. En este capítulo prepararemos una instalación Gentoo existente para que sea el sistema operativo anfitrión en este dominio y construiremos un núcleo con soporte Xen para que Gentoo este listo para albergar otros dominios Xen.

¿Reconstruir la instalación de Gentoo?

Un cambio dramático que podría ser necesario es la reconstrucción completa de una instalación Gentoo con una configuración de CFLAGS diferente. De otra manera, los sistemas operativos que corran bajo Xen podrían observar una mayor degradación en cuanto al rendimiento. Si usted, sin embargo, está planeando probar Xen en lugar de instalarlo para un uso de producción y no encuentra tan terrible la reconstrucción de todos los programas, puede omitir este paso. En este caso notará una degradación del rendimiento pero será capaz de utilizar Xen.

Importante: Se advierte que, si cambia sus CFLAGS y construye su sistema con un gcc inferior a la versión 4, no tenga establecido -Os ya que se ha reportado que produce código erróneo.

Listado de Código 2.1: Editando las CFLAGS y reconstruyendo la instalación de Gentoo

~# nano -w /etc/make.conf
(Añada -mno-tls-direct-seg-refs)
CFLAGS="-O2 -march=pentium4 -pipe -mno-tls-direct-seg-refs"

~# emerge -e world

Si arranca su sistema usando un ramdisk inicial (initrd) necesita reconstruir el initrd también (lo mejor es hacerlo siguiendo todos los pasos a la hora de reconstruir su núcleo).

Instalando Xen

Ahora mismo, Xen contiene muchos componente, así necesitará instalar un par de paquetes. Primero necesitará desenmascararlo añadiendo las líneas necesarias a /etc/portage/package.keywords ya que aun está ~arch masked y entonces instalarlo.

Listado de Código 2.2: Desenmascarando e instalando Xen

~# nano -w /etc/portage/package.keywords
app-emulation/xen
app-emulation/xen-tools
sys-kernel/xen-sources

~# emerge xen xen-tools xen-sources

Construyendo el Núcleo

Ahora construiremos el núcleo con soporte para Xen. Este núcleo, cuyas fuentes están disponibles en /usr/src/linux-2.6.x.z-xen, será nuestro principal núcleo (por ejemplo el que correrá en el dominio 0). En la sección XEN encontrará controladores para todos los tipos de entrada y salida, cada controlador tiene disponible un backend y un frontend implementados. Para el núcleo del dominio 0 necesita seleccionar la implementación backend: esta será usada por otros dominios (que usan el controlador de frontend) para comunicar directamente con el hardware.

Por supuesto, no olvide seleccionar Xen-compatible en Processor type and features. Si está trabajando con comunicaciones: cada interfaz en un dominio tiene un enlace punto-punto a una interfaz en el dominio 0 (llamado vifX.Y donde X es el número de interfaz e Y la y-ésima interfaz en este dominio), así puede configurar su red en el modo que quiera (puente, NAT, etc.)

Listado de Código 2.3: Habilitando Soporte Xen para Núcleos i386

Processor type and features  --->
      Subarchitecture Type (Xen-compatible)

Listado de Código 2.4: Habilitando Soporte Xen para Núcleos x86_64

Processor type and features  --->
      Subarchitecture Type (PC-compatible)
  [*] Enable Xen compatible kernel

Listado de Código 2.5: Configuración del Núcleo para el Dominio-0

Bus options (PCI etc.)  --->
  [*] PCI support
  [ ]   Xen PCI Frontend Debugging

Networking  --->
  Networking options  --->
    <*> 802.1d Ethernet Bridging
    Sólo requerido para comunicaciones puente.

XEN  --->
  [*] Privileged Guest (domain 0)
  <*> Backend driver support
  <*>   Block-device backend driver
  <*>   Network-device backend driver
  <*>   PCI-device backend driver
           PCI Backend Mode (Virtual PCI) --->
  [*] Scrub memory before freeing it to Xen
  [*] Disable serial port drivers
      Xen version compatibility (3.0.4 and later)

Listado de Código 2.6: Configuración del Núcleo para el Dominio-U

Bus options (PCI etc.)  --->
  [ ] PCI support

Device Drivers  --->
  SCSI device support  --->
    < > SCSI device support
    Deshabilitando el soporte SCSI libera los
    nombres de dispositivos /dev/sd* para usarlos
    como dispositivos de bloques virtuales de Xen.

XEN  --->
  [ ] Privileged Guest (domain 0)
  <*> Block-device frontend driver
  <*> Network-device frontend driver
  [*] Scrub memory before freeing it to Xen
  [*] Disable serial port drivers
      Xen version compatibility (3.0.4 and later)

Una buena sugerencia es tener los procesos hechos por núcleo almacenados en archivos objetos intermedios en cualquier otro lugar a fin de que el mismo árbol del núcleo pueda ser reutilizado para otras configuraciones.

Listado de Código 2.7: Construcción del Núcleo

~# mkdir -p ~/build/dom0 ~/build/domU
~# make O=~/build/dom0 menuconfig
(Configure el núcleo)
~# make O=~/build/dom0 && make O=~/build/dom0 modules_install

Una vez el núcleo está construido encontrará una imagen del núcleo en el directorio de construcción (no dentro de arch/ o algún otro directorio) llamado vmlinuz. Cópielo en /boot y entonces configure su gestor de arranque para usar el hipervisor de Xen (uno de los componentes instalados anteriormente) que está almacenado en /boot/xen.gz. En la configuración del gestor de arranque, añada su recién construido núcleo como el núcleo que Xen debería arrancar. Por ejemplo, para GRUB:

Listado de Código 2.8: Configuración de GRUB para Xen

title Xen 3.0 / Gentoo Linux 2.6.x.y
root (hd0,0)
kernel /boot/xen.gz
module /boot/kernel-2.6.x.y-xen0 root=/dev/hda3

Ahora reinicie su sistema en Xen. Una vez arrancado, necesita cargar el demonio Xen:

Listado de Código 2.9: Cargando el demonio Xen

~# /etc/init.d/xend start

Ahora compruebe que puede hacer todo lo que hace normalmente es su sistema. Si este es el caso, puede editar la configuración del gestor de arranque para que siempre arranque con Xen y añada el demonio Xen al nivel de ejecución por defecto para que arranque automáticamente la próxima vez que inicie el equipo.

Nota: Si desea que los dominios invitados arranquen automáticamente al arrancar añada xendomains al nivel de ejecución por defecto también y cree un enlace simbólico en /etc/xen/auto/ hacia los archivos de configuración de Xen para los dominios que quiera iniciar.

3.  Creando un Dominio sin Privilegios

Construyendo el Núcleo

Vaya al fuente del núcleo Linux con soporte Xen y actualice la configuración. Es sabio mantener tantas características como sea posible en el núcleo principal excepto la configuración XEN donde los controladores deberían tener su propia implementación frontend seleccionada en lugar de la backend. Entonces construya el núcleo y coloque el resultante archivo vmlinuz donde quiera (asumimos que es en /mnt/data/xen/kernel):

Listado de Código 3.1: Construcción del núcleo invitado

~# make O=~/build/domU
~# cp ~/build/domU/vmlinuz /mnt/data/xen/kernel/kernel-2.6.x.y-xen

También es posible crear una única imagen del núcleo para ambos, el dominio administrativo y el dominio sin privilegios. Puede encontrar más información en el manual de usuario de Xen.

Creando Discos de Dominio

Para un mayor rendimiento, es mejor dedicar una partición (o volumen lógico) a un dominio en lugar de un sistema de archivos basado en archivos. Sin embargo, si principalmente usará Xen para pruebas usar un sistema de archivos basado en archivos tiene sus ventajas (especialmente en lo relacionado al mantenimiento).

Puede crear un sistema de ficheros basado en archivos usando dd y mke2fs (o cualquier otra herramienta de creación de sistemas de archivos). Por ejemplo, para crear un sistema de archivo ext3 de 2Gbytes:

Listado de Código 3.2: Creando un sistema de archivos

~# dd if=/dev/zero of=/mnt/data/xen/disks/ext3root.img bs=1M count=2048
~# mke2fs -j /mnt/data/xen/disks/ext3root.img

Configurando un Dominio

Ahora crearemos un archivo de configuración para un dominio. Puede almacenar estos archivos donde quiera, por ejemplo en /mnt/data/xen/configs. Como un ejemplo, crearemos un archivo de configuración para un pequeño entorno Gentoo que usa la imagen de disco creada anteriormente.

Listado de Código 3.3: Creando un archivo de configuración de dominio

~# nano -w /mnt/data/xen/configs/gentoo

kernel = "/mnt/data/xen/kernel/kernel-2.6.x.y-xen"
memory = 512
name   = "gentoo"
(Mapea la imagen de disco al virtual /dev/sda1)
disk   = ['file:/mnt/data/xen/disks/ext3root.img,sda1,w']
root   = "/dev/sda1 ro"

Si está usando un dispositivo de bloque (como un volumen lvm o partición) para el disco utilice 'phy:' en lugar de 'file:' y elimine /dev. Por ejemplo:

Listado de Código 3.4: Utilizando un dispositivo de bloque

(Volumen LVM)
disk = [ 'phy:lvm/xen-guest-root,sda1,w' ]

(Partición Física)
disk = [ 'phy:sdb6,sda1,w' ]

Puede encontrar ejemplos de archivos de configuración en /etc/xen.

Lanzando el Nuevo Dominio

Ahora tenemos todo configurado y podemos lanzar el nuevo dominio. Si el disco imagen contiene un sistema operativo, podríamos crear y adjuntar el dominio usando el comando xm (Xen manager):

Listado de Código 3.5: Creando y arrancando un nuevo dominio

~# xm create /mnt/data/xen/configs/gentoo -c

El dominio debería ser arrancado dentro de la terminal en la cual ejecutó el comando. Sin embargo, en nuestro caso, la imagen de disco está vacía así el dominio no arrancara en nada útil. Para arreglar esto, puede montar la imagen como dispositivo loop e instalar Gentoo tal y como lo está usando.

Si quiere desconectar del dominio, presione Ctrl+]. Siempre puede reconectar la consola del dominio usando xm console gentoo. Sin embargo, sólo hay una consola por dominio, así que solo use esto cuando no pueda acceder al dominio de otra manera (por ejemplo, a través de SSH).

4.  Redes en Dominios sin Privilegios

Introducción

Xen soporta al menos dos formas de configurar su red (virtual): enrutado y puente.

Cuando selecciona el enfoque de enrutado, la interfaz dentro de su dominio sin privilegos se conecta a la interfaz virtual en su dominio administrativo. En su dominio administrativo (domain 0), la interfaz virtual es enlazada conjunta con eth0. La interfaz dentro de su dominio sin privilegios debería tener una dirección IP en la misma red que la interfaz en su dominio administrativo. Cualquier comunicación a esta dirección IP solo puede proceder desde el dominio administrativo, a no ser que especifique reglas de enrutado específicas.

Cuando seleccione el enfoque de puente, su interfaz de red por defecto en el dominio administrativo se convertirá en un puente que aceptará conexiones a los dominios virtuales así como a las direcciones IP que tenga en su dominio administrativo.

Interfaces con Rutas Regulares

Antes de configurar las interfaces en su dominio sin privilegios, asegúrese que los controladores de Xen netloop y netbk están cargados. Un consejo rápido: si tiene netloop como módulo, cárguelo con nloopbacks=0 para que no cree interfaces inútiles en el dispositivo de loopback. Entonces, edite el archivo de configuración de su dominio y añádale la instrucción vif.

Listado de Código 4.1: Configurando una interfaz virtual

~# nano -w /mnt/data/xen/configs/gentoo

(Añada la instrucción vif)
vif    = [ 'ip=192.168.1.101, vifname=veth1' ]

En el ejemplo anterior, la interfaz se creó para el dominio sin privilegios (en el cual se llamara eth0) y Xen se asegurara que la dirección 192.168.1.101 sea accesible desde el dominio administrativo a través de la interfaz veth1.

Esto no significa que a la interfaz virtual eth0 se le asigne automáticamente la IP 192.168.1.101, pero en lugar de eso, si no le asigna esta IP, no se conectará con el dominio administrativo y por lo tanto no podrá ser accesible.

Ahora edite /etc/xen/xend-config.sxp como sigue para seleccionar la configuración de las rutas de red.

Listado de Código 4.2: Editando xend-config.sxp

~# nano -w /etc/xen/xend-config.sxp

(Descomente las siguientes líneas)
#(network-script network-bridge)
#(vif-script vif-bridge)

(Habilite las siguientes líneas)
(network-script network-route)
(vif-script vif-route)

Interfaces Puente

A diferencia de las interfaces de ruta ahora necesita cargar el controlador de netloop con nloopbacks=1 (o superior) como un dispositivo de loopback adicional para crear el puente. Para los otro módulos también necesitará el módulo netbk para la funcionalidad del puente (el módulo bridge si está construido).

Ahora edite su dominio virtual y añada el constructor vif:

Listado de Código 4.3: Configurando una interfaz virtual

~# nano -w /mnt/data/xen/configs/gentoo

(Añada la instrucción vif)
vif    = [ 'ip=192.168.1.101, vifname=veth0' ]

Edite /etc/xen/xend-config.sxp como sigue para elegir la configuración de rutas de la red:

Listado de Código 4.4: Editando xend-config.sxp

~# nano -w /etc/xen/xend-config.sxp

(Habilite las siguientes líneas)
(network-script network-bridge)
(vif-script vif-bridge)

(Comente las siguiente líneas si no está hecho ya)
# (network-script network-route)
# (vif-script vif-route)

Por defecto, el puente contendrá cualquier interfaz configurada para ser la interfaz por defecto (el dispositivo listado bajo la ruta por defecto a través de ip route list). Si quiere modificar esto, edite xend-config.sxp como sigue:

Listado de Código 4.5: Editando xend-config.sxp para cambiar la configuración del puente

~# nano -w /etc/xen/xend-config.sxp

(Edite la línea network-script)
(network-script 'network-bridge netdev=eth0 bridge=xenbr0 vifnum=0')

Una vez la configuración este hecha, reinicie el script de inicio xend para tener Xen construido con el puente:

Listado de Código 4.6: Reiniciando el demonio xend

~# /etc/init.d/xend restart

5.  Más Recursos

Documentación de Xen

Herramientas de Xen



Imprimir

Actualizado 11 de agosto, 2008

Sumario: Esta guía describe como comenzar a usar Xen en su sistema Gentoo.

Sven Vermeulen
Autor

Fede Díaz
Traductor

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.