# Xen Hypervisor

En el presente libro se detalla como instalar la herramienta Xen Hypervisor en el Sistema Operativo Ubuntu 9.04 Jaunty Jackalope, luego se muestra como utilizarlo, en particular, como hacer para crear y administrar las maquinas virtuales con los Sistemas Operativos que se deseen instalar. Se destaca que en la herramienta Xen una máquina virtual se conoce como dominio ("dom"), por este motivo, a lo largo del documento se van a tratar indistintamente los términos.

## Instalación de Xen Hypervisor en Ubuntu 9.04 Jaunty Jackalope

En primer lugar, se debe instalar un kernel de linux modificado especialmente para permitir la ejecución de Xen, de manera que sirva como dom0, como por ejemplo un kernel de Debian. Para eso se debe modificar el archivo /etc/apt/sources.list que contiene la lista de 'fuentes' o 'repositorios' disponibles de los paquetes de software candidatos a ser: actualizados, instalados, removidos, etc. Vamos a agregarle la url del repositorio de donde se descargará el kernel ('http://security.debian.org/debian-security lenny/updates main'). Posteriormente se actualiza la lista de paquetes, para finalmente instalar el correspondiente al kernel. Esto se hace ejecutando los siguientes comandos:
sudo echo deb http://security.debian.org/debian-security lenny/updates main >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get -f install linux-image-2.6.26-2-xen-686
Luego se pasa a la instalación de Xen Hypervisor a través de la instalación del paquete ubuntu-xen-desktop ejecutando el siguiente comando:
sudo apt-get install python2.5 ubuntu-xen-desktop
Luego de finalizada la configuración e instalación se debe reiniciar el sistema, aparecerá una nueva entrada en el grub correspondiente al kernel de Xen, su selección permite 'bootear' con dicho kernel, iniciando la capa de software del hypervisor. Una vez iniciado el sistema, tras la selección de la nueva opción, podremos utilizar Xen quedando habilitados a manipular las maquinas virtuales y su configuración, por ejemplo creando máquinas virtuales para la instalación de los distintos Sistemas Operativos que se desee.

## Solución de posibles dificultades
### Problema al instalar paquete ubuntu-xen-desktop

En el momento de realizar la instalación de Xen es posible que el comando sudo apt-get install python2.5 ubuntu-xen-desktop nos de problemas de dependencias incumplidas, sobre todo si estamos trabajando con una instalación limpia, sin haber realizado actualizaciones. Como alternativa de instalación se plantea la siguiente línea de comando:
sudo apt-get install bridge-utils libbeecrypt6 librpm4.4 libxen3 python-dev python-rpm python-xen-3.3 python2.5 python2.5-minimal python2.6-dev xen-hypervisor-3.3 xen-utils-3.3
Con la línea anterior estamos instalando los paquetes necesarios para tener a Xen funcionando, de todas formas cabe aclarar que se están exluyendo paquetes que de instalarse con ubuntu-xen-desktop estarían incluídos, un ejemplo es el paquete Convirt.

### Sin conexión a la red en dom0

Uno de los problemas que podemos encontrarnos luego de iniciar Xen es que no tenemos acceso a la red desde el dom0. Para arreglar este problema se propone la siguiente alternativa:
Remover el administrador de red (Network-Manager) con el siguiente comando:
sudo apt-get remove network-manager
luego se debe modificar el archivo /etc/network/interfaces agregándole el siguiente contenido:
auto lo iface lo inet loopback
auto eth0 iface eth0 inet dhcp

## Creación y administración de maquinas virtuales
### El comando xm

Una vez instalado Xen Hypervisor vamos a introducir brevemente la utilización del software para crear y administrar maquinas virtuales. El comando xm es el más básico, sin embargo el mismo nos permite encender las máquinas virtuales, conectarnos rápidamente a sus consolas, es perfectamente posible utilizar solo xm, todos los demás comandos pasan a ser opcionales. A continuación se presenta una lista con ejemplos de los comandos más utilizados.
xm create /etc/xen/server01.cfg: Cargar la máquina virtual, recibe como parámetro el archivo de configuración, en este caso server01.cfg
xm console server01: Se conecta a la consola de la máquina virtual.
xm shutdown server01: Apaga la máquina virtual.
xm destroy server01: Apaga la máquina virtual de manera forzada, es el equivalente a cortar la energía eléctrica a una máquina real.
xm reboot server01: Reinicia la máquina virtual.
xm vncviewer server01: Se conecta a la máquina virtual mediante vnc viewer, el resultado es una nueva ventana donde vemos gráficamente la máquina virtual.
xm list: Muestra las máquinas virtuales activas.

### Crear e iniciar una nueva máquina virtual

En cuanto a la configuración de las máquinas virtuales, la misma esta formada por una imagen (generalmente un .img) y un archivo de configuración (nombre.cfg). A continuación se presenta un ejemplo de secuencia de comandos que permite crear e iniciar una nueva máquina virtual de manera 'manual'.
mkdir /home/xen
mkdir /home/xen/domains
mkdir /home/xen/domains/win01
sudo dd if=/dev/zero of=/home/xen/domains/win01/disk.img bs=1M count=4096
sudo xm create win01.cfg

### El archivo de configuración de la máquina virtual

La configuración para cada dominio se puede establecer en un archivo nombre.cfg. El siguiente es un ejemplo del contenido de un archivo de configuración básico de un dominio de Xen:
kernel, permite especificar el kernel se utilizara dentro del dominio. En general se debe especificar un kernel modificado que permita paravirtualización.
memory, permite especificar la cantidad de memoria de que el dominio dispondrá (en Mb)
name, se utiliza para especificar un nombre del dominio
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, permite configurar las unidades de disco virtuales. En éste ejemplo, la partición hda7 sera 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.
extra, permite especificar parámetros adicionales al kernel de Linux. En este caso se usa para iniciar el runlevel 2.
Esta configuración ya sirve como base para iniciar una máquina virtual.

#### Otros elementos del archivo de configuración

Asignación de CPUs
Para cada dominio, se maneja el concepto de CPU virtual. A un dominio específico se le puede asignar una cantidad de CPUs virtuales, mediante la siguiente línea:
Con lo cual el dominio dispondrá de dos CPUs virtuales. Xen también permite asociar los CPUs virtuales de un dominio con los CPUs reales del sistema, permitiendo administrar de forma óptima el poder de procesamiento entre los distintos dominios. Los CPUs reales son enumerados como primero en profundidad, por ejemplo:
Como se ve en la figura, Xen detecta como CPUs incluso las unidades HT en procesadores compatibles con HT. De ésta manera, se pueden asignar CPUs físicos al dominio mediante su archivo de configuración. Para ésto se puede usar uno de los siguientes ejemplos:
Utilizando la primera línea, se utilizará el CPU 1, usando la segunda el 0, 1 y 2, y, utilizando la última se deja a que se configure automáticamente.
Dispositivos USB
Xen 3.3 brinda soporte para emular dispositivos USB de baja velocidad (USB 1.1) dentro de los diferentes dominios. Para configurar dispositivos USB se pueden utilizar las siguientes configuraciones dentro del archivo de configuración del domU correspondiente:
Lo que habilita la emulación del controlador USB.
Habilita la emulación de dispositivos de tipo mouse USB estilo PS/2
Habilita la emulación de dispositivos de tabla USB
Para habilitar un dispositivo USB específico, se puede utilizar la siguiente línea
Lo que habilitaría efectivamente un dispositivo cuyos vendor ID (vid) y product ID (pid) son los especificados. Para conocer éstos códigos, se puede utilizar el comando lsusb, que eventualmente mostrará una lista como la del siguiente ejemplo:
Luego, para activar por ejemplo el mouse USB cuyo vid=0458 y pid=0035, se deberá configurar la siguiente línea en el archivo de configuración:
Virtualización por hardware
Para especificar que el dominio utilizará virtualización por hardware en lugar de paravirtualización, se deben realizar los siguientes cambios en el archivo de configuración:
El kernel, será reemplazado por un cargador HVM (HVM loader) que permite utilizar las extensiones de virtualización del procesador y luego bootear el SO correspondiente según la configuración de arranque (especificada mediante boot). Generalmente se utiliza el cargador hvmloader, de la siguiente forma:
Tambien se debe especificar la función de construcción para el dominio 'hvm'
Otras características especiales del modo de virtualización por hardware son las siguientes:
Para habilitar la funcionalidad ACPI:
Para habilitar la funcionalidad APIC:
Para habilitar la funcionalidad PAE:
También se puede habilitar el uso de soporte de paginado asistido por hardware (AMD-V nested paging o Intel VT's extended paging por ejemplo), mejorando la administración de memoria:

### La herramienta xen-tools

Esta herramienta tiene como propósito la asistencia en la creación de las máquinas virtuales, pero no el mantenimiento subsecuente. A continuación se presenta uno de los comandos más destacados.
xen-create-image --hostname guest01, este comando requiere tener montado en /mnt un disco local. Luego de disparado el comando van a crearse los archivos correspondientes bajo el directorio /mnt/xendomains/domains. Se genera automáticamente el archivo de configuración /mnt/xendomains/domains/guest01.cfg y el .img correspondiente. Esto es muy útil cuando se desean crear varias máquinas virtuales con configuraciones similares.
El archivo de configuración de xen-tools es /etc/xen-tools/xen-tools.conf, en el mismo pueden cambiarse los parámetros por defecto que indican como va a ser la configuración de las máquinas virtuales a crear.

## Referencias

http://www.xen.org
http://bits.xensource.com/Xen/docs/user.pdf
http://web.archive.org/web/20070719185237/http://www.xtech.com.ar/articulos/xen/xen-intro.pdf