Configurando Gentoo con Xen
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 le indicará los pasos necesarios para tener Xen funcionando
correctamente en Gentoo Linux. No discutiremos sobre el propio Xen
(el proyecto Xen dispone de
una documentación
aceptable) tampoco trataremos configuraciones especiales que
podrían ser muy interesantes para Xen pero no están relacionadas con
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 está, sin embargo, 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
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
En la actualidad Xen contiene muchos componentes, así que necesitará
instalar algunos paquetes.
Listado de Código 2.2: Instalando Xen |
~# 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
[*] Support for hot-pluggable CPUs
|
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
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
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
~# 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/sda3
|
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"
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 |
disk = [ 'phy:lvm/xen-guest-root,sda1,w' ]
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 la orden 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ó la orden. 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, solo 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 privilegios 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
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
#(network-script network-bridge)
#(vif-script vif-bridge)
(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
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
(network-script network-bridge)
(vif-script vif-bridge)
# (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
(network-script 'network-bridge netdev=eth0 bridge=xenbr0 vifnum=0')
|
Una vez realizada la configuración, reinicie el guión 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
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logo y nombre de Gentoo.
|