Tag Archives: KVM

Configurar una interfaz de red en puente (bridge) en ArchLinux

Introducción

En este procedimiento se establecen los pasos necesarios para configurar una interfaz de red (br0) en puente con la interfaz de la red alámbrica (eth0) para permitir el acceso directo a la red LAN de las máquinas virtualizadas con KVM instalado previamente.

Para este montaje se utilizó ArchLinux en su versión mas reciente, la 2011.08.19, en la cual se observaron algunos cambios en los archivos de configuración, especialmente en los relacionados con la configuración de redes lo cual impacta directamente con lo descrito a continuación.  Para versiones anteriores del sistema operativo se ofrece una alternativa de configuración que no ha sido probada en producción.

Instalar los paquetes necesarios

Para la configuración de múltiples interfaces de red.

$ sudo pacman -S netcfg

Para la creación del puente entre las interfaces de red.

$ sudo pacman -S bridge-utils

Desactivar la configuración original de red

En esta versión de ArchLinux la configuración de una interfaz de red se realiza de manera diferente a múltiples interfaces de red.  En este caso partimos de una única interfaz de red (eth0) a tener dos (eth0 + br0), por este motivo es necesario desactivar la configuración actual para implementar la otra aproximación.

Comentar las líneas relacionadas con la configuración de la interfaz de red actual.

$ sudo vi /etc/rc.conf

## interface=eth0
## address=192.168.1.250
## netmask=255.255.255.0
## broadcast=192.168.1.255
## gateway=192.168.1.254

Remover la invocación de network de la variable DAEMONS.

Configurar las múltiples interfaces de red

En este paso se deberá configurar la interfaz de red removida en el paso anterior junto con la interfaz correspondiente al puente a crearse con ella.

$ sudo vi /etc/rc.conf

  1. Agregar la invocación de net-profiles en la variable DAEMONS.
  2. Agregar la referencia de las nuevas interfaces en la variable NETWORKSde la siguiente manera.

    NETWORKS=(eth0 br0)

Crear la especificación de la configuración de las nuevas interfaces bajo /etc/network.d.  Para mayor información al respecto consultar los ejemplos ubicados en /etc/network.d/examples.

$ sudo vi /etc/network.d/eth0

INTERFACE="eth0"
CONNECTION="ethernet"
DESCRIPTION="Wired network interface"
IP='static'

$ sudo vi /etc/network.d/br0

INTERFACE="br0"
CONNECTION="bridge"
DESCRIPTION="KVM Bridge connection"
BRIDGE_INTERFACES="eth0"
POST_UP='brctl setfd br0 0'
IP='static'
ADDR='192.168.1.250'
GATEWAY='192.168.1.254'
DNS=('8.8.8.8', '8.8.4.4')

Versiones anteriores

 Otra aproximación a la implementación de esta solución que aparentemente era útil en versiones anteriores del sistema operativo consiste en realizar los ajustes necesarios al archivo /etc/conf.d/bridges de la siguiente manera.

$ sudo vi /etc/conf.d/bridges

bridge_br0="eth0"
config_br0="brctl setfd br0 0"
BRIDGE_INTERFACES=(br0)

Finalmente se actualiza el archivo /etc/rc.conf para incluir a br0 como una nueva interfaz de red.

$ sudo vi /etc/rc.conf

eth0="eth0 up"
br0="br0 192.168.1.250 netmask 255.255.255.0 up"
INTERFACES=(lo eth0 br0)

Enlaces

Instalando libvirt en ArchLinux

Introducción

Libvirt es un API de código abierto y una herramienta de administración para diferentes sistemas de virtualización entre los que se encuentran Xen, OpenVZ, Virtualbox, VMWare, Microsoft Hyper-V y por supuesto KVM/Qemu instalado en el servidor de desarrollo previamente.

Este software es ideal para la gestión de las máquinas virtuales y su administración remota a través de conexiones seguras con SSH.  Además incluye una librería en C para el desarrollo de aplicaciones e incluye además interfaces para diversos lenguajes como Python, Perl, Ruby, Java y PHP.

Instalación del software

Instalar los paquetes del repositorio oficial.

# pacman -S libvirt urlgrabber dnsmasq bridge-utils

Inicio automático del demonio

Configurar el demonio de libvirtd para que se inicie automáticamente junto con el sistema operativo.

# vi /etc/rc.conf

DAEMONS = (… libvirtd …)

Debe tenerse en cuenta que el demonio libvirtd requiere ser invocado después de dbus y avahi-daemon.

Autorizar la administración a usuarios sin privilegios

Si se desea que usuarios sin privilegios (diferentes de root) administren las máquinas virtuales, estos deberán ser explícitamente autorizados de la siguiente manera.

# vi /etc/polkit-1/localauthority/50-local.d/org.libvirt.unix.manage.pkla

[Allow a user to manage virtual machines]
Identity=unix-user:jimezam
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Si en lugar de administración se desea conceder la autorización para monitorear las máquinas se deberá especificar la siguiente acción.

org.libvirt.unix.monitor

Permitir el acceso a través de SSH

Para permitir el acceso a las máquinas virtuales a través de herramientas como virsh o virt-viewer a través del protocolo SSH (qemu+ssh) es necesario contar con paquete netcat de OpenBSD instalado de la siguiente manera.

$ sudo pacman -S openbsd-netcat

Si se cuenta adicionalmente con el paquete netcat convencional instalado es posible que este se haya apoderado del enlace /usr/bin/nc y libvirt intente utilizarlo erróneamente generando el siguiente mensaje de error.

error: server closed connection: nc: invalid option — 'U'
Try `nc –help' for more information.
error: failed to connect to the hypervisor

En ese caso es necesario indicarle a libvirt cual es la versión de netcat que debe utilizar.  Esto se puede realizar desde los parámetros extra del URI en cada invocación de acceso de la siguiente manera.

$ virsh -d 0 –connect qemu+ssh://usuario@servidor/system?netcat=/usr/bin/nc.openbsd

O de manera permanente modificando en el servidor el enlace /usr/bin/nc de la siguiente manera.

$ sudo mv /usr/bin/nc /usr/bin/nc.orig

$ sudo ln -s /usr/bin/nc.openbsd /usr/bin/nc

Enlaces

Instalando KVM en ArchLinux

Introducción

Por fin he destinado el tiempo necesario para reintalar mi servido de desarrollo, esta vez utilizando ArchLinux.  Había utilizado con éxito esta distribución en un par de ocasiones sin embargo no había tenido la oportunidad de explorarla con mayor profundidad.

A continuación se describen los pasos que se siguieron para instalar KVM en ArchLinux.

Verificaciones preliminares

Se requiere de un versión de kernel igual o superior a la 2.6.22.

# uname -a

Linux ivy.jorgeivanmeza.com 3.1.1-1-ARCH #1 SMP PREEMPT Fri Nov 11 22:28:29 CET 2011 x86_64 AMD Phenom(tm) 9650 Quad-Core Processor AuthenticAMD GNU/Linux

De igual manera se requiere que el procesador cuente con soporte físico para virtualización: VMX (Intel) o SVM (AMD).

# grep -E "(vmx|svm)" –color=always /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs npt lbrv svm_lock

Instalación del software

Instalar los paquetes del repositorio oficial.

# pacman -S qemu-kvm

Agregar las cuentas de los usuarios que utilizarán el software al grupo kvm para que puedan acceder a /dev/kvm.

# gpasswd -a jimezam kvm

Verificar la carga de los módulos de kernel dependiendo del proveedor del procesador.

Para IntelPara AMD

# modprobe kvm

# modprobe kvm-intel

# modprobe kvm

# modprobe kvm-amd

Una vez cargados deberán aparecer en el listado de módulos activos.

# modprobe -l 'kvm*'

kernel/arch/x86/kvm/kvm-amd.ko.gz
kernel/arch/x86/kvm/kvm.ko.gz

En caso de fallar la carga pero haber pasado la verificación inicial, verificar en la configuración de la BIOS si las extensiones de virtualización se encuentran desactivadas.

Configurar la carga automática de los módulos del kernel.

# vi /etc/rc.conf

MODULES=(kvm kvm-amd)

Enlaces

Problemas de permisos para ejecutar las máquinas KVM después actualizar a Ubuntu 10.10 Server

Introducción.

Después de actualizar mi servidor de desarrollo a Ubuntu 10.10 server empecé a tener problemas para iniciar las máquinas virtuales basadas en KVM.  Básicamente se quejaba por problemas de permisos en /u/vms donde se almacenan las imágenes de los discos duros virtuales (por defecto es /var/lib/libvirt/images -global- o ~/.libvirt/storage -usuario-).

En los logs de las máquinas virtuales ubicados bajo /var/log/libvirt/qemu se pueden apreciar mensajes como el siguiente.

char device redirected to /dev/pts/1
qemu: could not open disk image /u/vms/sandbox_ubuntuserver-10.10_x64.img: Permission denied

Las imágenes de los discos duros pertenecen a root:root y esta relación es restaurada cada vez que se intenta ejecutar cada una de las máquinas virtuales así que modificarlas manualmente es infructuoso.

$ ls -l /u/vms

-rw——- 1 root root 7516192768 2010-08-11 23:32 c-head.img
-rw——- 1 root root 7516192768 2010-08-04 18:21 c-wn1.img
-rw——- 1 root root 7516192768 2010-07-24 16:42 c-wn2.img
-rw——- 1 root root 7516192768 2010-07-15 00:34 c-wn3.img

Solución.

Indicar explícitamente que root será el grupo y el usuario que ejecutará los procesos de QEMU.  Para hacer esto es necesario realizar el siguiente ajuste de configuración.

$ sudo vi /etc/libvirt/qemu.conf

# The user ID for QEMU processes run by the system instance
user = "root"

# The group ID for QEMU processes run by the system instance
group = "root"

Reiniciar el servicio para tener en cuenta los cambios recién realizados.

$ sudo service libvirt-bin restart

Conclusiones.

Aparentemente la nueva versión de KVM en Ubuntu trae consigo cambios en la forma como este se ejecuta, siendo ahora bajo usuarios sin privilegios y antes como root.  El proceso de actualización, al menos en mi caso, parece que no consiguió realizar todas las modificaciones necesarias para alcanzar este objetivo y por ello fue necesario indicar explícitamente que se utilizaba a root para ejecutar los procesos (método antíguo).

Otra posible solución a este problema podría haber sido indicarle a QEMU/libvirt (o a quien corresponda) que efectivamente se desea ejecutar los procesos con usuarios sin privilegios (método nuevo) sin embargo por el momento no he logrado encontrar quien es el responsable de los cambios de estos cambios de propiedad de los archivos.

Enlaces.

Instalar ubuntu64-general basado en Ubuntu Server 9.10 64 bits en KVM

Introducción.

De manera análoga a como se realizó anteriormente la instalación de una imagen con CentOS (para Scientific Linux se igual procedimiento) procedimos a crear una máquina virtual KVM con una instalación genérica de Ubuntu Server 9.10 para futuras experimentaciones con un plan de trabajo ligeramente modificado.

  1. Actualización de paquetes.
  2. Instalar ACPID.
  3. Instalación del JDK de Java.
  4. Instalación del ambiente de desarrollo C/C++.
  5. Instalación del servidor X y IceWM como administrador de ventanas.
  6. Depurar el software instalado.

Creación de la máquina virtual para la instalación del sistema operativo.

$ virt-install \
–connect qemu:///system \
-n ubuntuserver-9.10_x64-general \
-r 384 \
–os-type linux \
–os-variant generic26 \
–hvm \
–cdrom /u/isos/ubuntu-9.10-server-amd64.iso \
–network bridge:br0 \
–disk path=/u/vms/ubuntuserver-9.10_x64-general.img,size=7 \
–vnc –noautoconsole \
–accelerate

Conexión remota a la KVM para el proceso de instalación y administración.

$ /usr/bin/virt-viewer -c qemu+ssh://ivy/system ubuntuserver-9.10_x64-general

Actualización de paquetes.

$ sudo aptitude update

$ sudo aptitude safe-upgrade

Instalación de ACPID.

$ sudo aptitude install acpid

Instalación del JDK de Java.

$ sudo aptitude install sun-java6-bin sun-java6-fonts sun-java6-jdk sun-java6-jre sun-java6-plugin

Instalación del ambiente de desarrollo C/C++.

$ sudo aptitude install build-essential

Instalación del servidor X y IceWM como administrador de ventanas.

$ sudo aptitude install xorg icewm icewm-themes

Instalar centos64-general basado en CentOS 5.4 64 bits en KVM

Introducción.

El fin del presente artículo es el de preparar una imagen básica del sistema operativo, en este caso CentOS 5.4 de 64 bits, para futuros usos en experimentos y pruebas.  La infraestructura de virtualización que utilizo para implementarla es KVM.

En términos generales estos son las adecuaciones que tendrá está imagen básica.

  1. Actualización de paquetes.
  2. Instalar ACPID.
  3. Permitir la ejecución de sudo para el usuario jimezam.
  4. Bloquear la contraseña del usuario root.
  5. Instalación del JDK de Java.
  6. Instalación del ambiente de desarrollo C/C++.
  7. Depurar el software instalado.

Creación de la máquina virtual para la instalación del sistema operativo.

$ virt-install \
–connect qemu:///system \
-n
centos-5.4_x64-general \
-r 384 \
–os-type linux \
–os-variant generic26 \
–hvm \
–cdrom /u/isos/CentOS-5.4-x86_64-bin-DVD.iso \
–network bridge:br0 \
–disk path=/u/vms/
centos-5.4_x64-general.img,size=7 \
–vnc –noautoconsole \
–accelerate

Conexión remota a la KVM para el proceso de instalación y administración.

$ /usr/bin/virt-viewer -c qemu+ssh://ivy/system centos-5.4_x64-general

Actualización de paquetes.

# yum check-update

# yum update

Instalación de ACPID.

# yum install acpid

Activar el acceso a sudo para wheel.

# visudo

%wheel     ALL=(ALL)    ALL

# usermod -G wheel jimezam

Bloquear la contraseña del usuario root.

# passwd -l root

Instalación del JDK de Java.

# yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel

Instalación del ambiente de desarrollo C/C++.

# yum install gcc gcc-c++ autoconf automake

Instalación básica de Linux CentOS 5.4 en KVM

Introducción.

A continuación se realizará la instalación de un Linux CentOS 5.4 básico en una máquina virtual basada en KVM utilizando LibVirt.

Preparación preliminar.

  • La infraestructura necesaria para la virtualización basada en KVM se encuentra instalada y configurada.
  • Se ha descargado la imagen ISO de la última distribución (5.4 en este caso) de Linux CentOS de su sitio web.
    http://www.centos.org/modules/tinycontent/index.php?id=15
  • La imagen ISO de Linux CentOS se ha ubicado en /u/isos.
  • La imagen del disco duro de la máquina virtual se creará en /u/vms.
  • La red de la máquina virtual se implementará sobre una interfaz puente (br0) en el huésped.  Puede utilizarse también la configuración de NAT por defecto de KVM sin nigún problema.
  • La máquina virtual (dominio) será identificada por la etiqueta centos-general.
  • Se le asignarán 256MB de memoria RAM y un disco duro de 7GB a la máquina virtual.

Creación de la máquina virtual.

$ virt-install \
–connect qemu:///system \
-n centos-general \
-r 256 \
–os-type linux \
–os-variant generic26 \
–hvm \
–cdrom /u/isos/CentOS-5.4-i386-bin-DVD.iso \
–network bridge:br0 \
–disk path=/u/vms/centos-general.img,size=7 \
–vnc –noautoconsole \
–accelerate

Conexión a la interfaz gráfica de la máquina virtual.

$ /usr/bin/virt-viewer -c qemu+ssh://IP_SERVIDOR/system centos-general

  • Si la conexión es remota utilice el protocolo qemu+ssh y reemplace la constante IP_SERVIDOR por la dirección IP o nombre FQDN del huésped.
  • En caso de realizarse una conexión local utilice el protocolo qemu y obvie la dirección del servidor.

Instalación normal de Linux CentOS.

Realice la instalación habitual de Linux CentOS 5.4 mediante el visor de la máquina virtual recién invocado.

Configurando un puente en la interfaz de red para las KVM en Linux Ubuntu 9.10

Introducción.

Cuando se instala KVM se crea una red privada por defecto (192.168.122.0) para las máquinas virtuales las cuales sólo son accesibles desde el mismo huésped.

(revisar) Si lo que se desea, como en mi caso, es que las máquinas virtuales obtengan una dirección del servicio de DHCP y puedan ser accedidas desde la red LAN como un servidor real es necesario crear un puente en la interfaz de red del servidor para permitirle a las máquinas virtuales acceder a la red física a través de este.

El procedimiento para hacer esto es simple y se describe a continuación.

Advertencia acerca de la red inalámbrica.

Utilizando el método convencional para la creación de puentes no es posible utilizar interfaces de red inalámbricas ya que sus tarjetas no permiten realizar ip spoofing necesario para su implementación.  Es necesario entonces contar con un acceso alámbrico a la red LAN para poder realizar el procedimiento descrito en este artículo.

Investigando en Internet encontré varios foros en los que se menciona que es posible dar solución a este problema sin utilizar el procedimiento estándar sino utilizando aproximaciones alternativas que no estarían supeditadas a la red alámbrica, sin embargo después de cuatro días de intentos y pruebas no me funcionaron así que tuve que utilizar la red cableada.  Las aproximaciones alternativas que sugieren mayor posibilidad de éxito son las siguientes.

En mi caso lo que revisió mayor dificultad para realizar las pruebas de estos procedimientos resultó, mas que la implementación de los mismos que de por si es bastante simple, la configuración de las máquinas KVM (he utilizado libvirt para su manipulación) para que utilicen la nueva interfaz de red ya que los ejemplos mejor descritos que encontré hacían referencia a Virtualbox y para KVM su configuración es notoriamente diferente.

Procedimiento.

Configurar el huésped (servidor de máquinas virtuales).

Instalar el paquete de utilidades para la creación de puentes de red.

$ sudo apt-get install bridge-utils

Editar el archivo de configuración de interfaces de red para agregar la configuración del puente.

$ sudo vi /etc/network/interfaces

Este procedimiento se puede realizar de dos maneras: de manera estática especificando la información precisa de conexión a la red o de manera dinámica permitiendo adquirir la configuración automática desde un servidor DHCP.

De manera estática se realiza de la siguiente manera.

auto br0
iface br0 inet static
address 192.168.1.10
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

De manera dinámica se realiza de la siguiente manera.

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

En ambos casos se está creando el puente br0 para acceder a la red a través de la interfaz eth0 (red alámbrica).

Reiniciar la configuración de red para tomar en cuenta los cambios recién realizados.

$ sudo /etc/init.d/networking restart

Verificar el estado de los cambios.

$ ifconfig

br0 Link encap:Ethernet  HWaddr 00:24:21:b6:12:11
inet addr:192.168.1.99 Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::224:21ff:feb6:1211/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:991 errors:0 dropped:0 overruns:0 frame:0
TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:62573 (62.5 KB)  TX bytes:14537 (14.5 KB)

eth0 Link encap:Ethernet  HWaddr 00:24:21:b6:12:11
inet addr:192.168.1.99 Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::224:21ff:feb6:1211/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:991 errors:0 dropped:0 overruns:0 frame:0
TX packets:898 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:77339 (77.3 KB)  TX bytes:67197 (67.1 KB)
Interrupt:27

Nótese como aparece la nueva interfaz de red del puente (br0) que toma igual configuración de red de su destino (eth0).

Configurar el invitado (máquinas virtuales).

Editar la información de especificación de la máquina virtual.

$ virsh edit IDENTIFICADOR_DOMINIO

Modificar la sección de la configuración de red (<interface>) con el siguiente estilo.

<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
<mac address='00:11:22:33:44:55'/>
</interface>

Actualice la información de la máquina virtual en el Hypervisor e iníciela.

$ virsh -c qemu:///system define /etc/libvirt/qemu/IDENTIFICADOR_DOMINIO.xml

$ virsh -c qemu:///system start IDENTIFICADOR_DOMINIO

Para confirmar el éxito de la configuración, en la máquina virtual consulte su dirección IP, la cual deberá coincidir con la especificada durante la configuración (estática) o la proporcionada por el servidor DHCP (dinámica).

Acerca de la dirección MAC de las interfaces virtuales.

Siempre es conveniente especificar una dirección MAC y que esta sea única entre las diferentes máquinas virtuales para evitar cualquier tipo de confusión.  Con respecto a esta dirección se recomienda que el primer valor sea par (como por ejemplo 00).

Para facilitar la generación de direcciones MAC al azar, la documentación de KVM en Ubuntu incluye un script muy útil.

$ sudo apt-get install randomize-lines

$ vi ~/bin/kvmGenMac               # Almacénelo donde desee.

#!/bin/sh
echo -n "54:52:00"
for i in 1 2 3; do
    echo -n ":"
    for j in 1 2; do
        for k in 0 1 2 3 4 5 6 7 8 9 A B C D E F; do
            echo $k
        done|rl|sed -n 1p
    done|while read m; do
        echo -n $m
    done
done
echo

$ chmod +x ~/bin/kvmGenMac

Para ejecutarlo simplemente invoque el shell y obtenga la dirección MAC al azar de la salida estándar.

$ ./bin/kvmGenMac

Enlaces.

Misterioso renombramiento de interfaces de red en Ubuntu Server 9.10 bajo KVM

Introducción.

Haciendo -muchas- pruebas con la configuración de red de las máquinas virtuales utilizando KVM empecé a tener un extraño problema.  La interfaz de red habitual, eth0, empezó a desaparecerse de la máquina virtual en la que estaba haciendo las pruebas.  Después de una inspección rápida a los mensajes del sistema encontré que había sido renombrada la interfaz a eth2.

$ dmesg | grep eth0

udev: renamed network interface eth0 to eth2

El problema.

En las pruebas que había hecho varias veces había cambiado la configuración de red de la máquina virtual, cambiando también la dirección MAC de la tarjeta de red virtual que KVM le asignaba al dominio provocando que al parecer, el sistema operativo se confundiera pensando que tenía todas esas tarjetas y sólo al inicio cuando verificaba las interfaces se daba cuenta cual era la tarjeta activa.

La solución.

$ vi /etc/udev/rules.d/70-persistent-net.rules

Remueva o comente las líneas correspondientes a las tarjetas de red con que ya no cuenta el servidor dejando únicamente la correspondiente a la MAC en uso.

Reinicie el servicio de red, el servidor o máquina virtual si es posible.

Enlaces.

Problemas para apagar remotamente las máquinas KVM bajo Ubuntu 9.10

La situación.

Cuando intentaba apagar gentilmente (shutdown) las máquinas virtuales desde el virsh recibía siempre el mensaje que se estaban apagando pero no era así, continuaban inmutables como si no recibieran la solicitud.

$ virsh -c qemu:///system shutdown UbuntuVM

Connecting to uri: qemu:///system
Domain UbuntuVM is being shutdown

El problema.

La falta de configurar e instalar ACPI, tanto en la especificación de la máquina virtual como en el sistema operativo invitado.

La solución.

ACPI en la máquina virtual.

Verifique que la máquina virtual cuente con el soporte de ACPI.

$ sudo vi /etc/libvirt/qemu/UbuntuVM.xml

<domain type='kvm'>
<name>UbuntuVM</name>

<features>
<acpi/>
<apic/>
<pae/>
</features>

</domain>

ACPI en el sistema operativo invitado.

Verifique el sistema operativo invitado cuente con el soporte para ACPI instalado.  Para hacer esto en Linux Ubutnu 9.10 ejecute el siguiente comando desde su consola.

$ sudo apt-get install acpid

Enlaces.