La idea va a ser utilizar Ubuntu JeOS en el host... como ahora no tengo una máquina libre (y menos con virtualización de cpu por hardware), en principio voy a hacerlo sobre mi propio desktop a ver si se banca.

En principio me voy a guiar por las instrucciones en el wiki de ubuntu, el foro y la documentación oficial de virtualización de ubuntu

Instalación de algunos paquetes

sudo apt-get install kvm libvirt-bin ubuntu-vm-builder qemu bridge-utils
sudo adduser `id -un` libvirtd

Ahora hay que desloguearse y volver a loguearse (para que el usuario figure agregado al grupo libvirtd efectivamente)

Confirmo que tengo acceso... si todo está bien va a pasar esto:

$ virsh -c qemu:///system list
 Id Name                 State
----------------------------------

$

Si hay algún problema de permisos, va a pasar esto:

$ virsh -c qemu:///system list
libvir: Remote error : Permission denied
error: failed to connect to the hypervisor
$

(¿no te dije que había que desloguearse y volver a loguearse?)

networking

Al levantar (automáticamente por la instalación) el libvirt-bin, armó automáticamente una nueva interfase de red vnet0 (la red IP creo que la eligió al voleo dentro de RFC1918... ¿o es siempre 192.168.122.0/24?... tampoco sé si la MAC address de esta interfase la inventa o qué). Lo otro que hace es levantar un dnsmasq (que se instaló como dependencia de libvirt-bin) como servidor dhcp en la red de vnet0.

Por lo que veo, esta red (la IP y el rango que brinda el dhcp) están configurados en /etc/libvirt/qemu/networks/default.xml.

El /etc/network/interfaces (antes de tocarlo) es así:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#iface eth0 inet dhcp

(esto es una workstation y obtiene su IP por dhcp)

Un ifconfig me muestra lo siguiente:

eth0      Link encap:Ethernet  HWaddr 00:21:70:03:85:63
          inet addr:192.168.31.179  Bcast:192.168.31.255  Mask:255.255.255.0
          inet6 addr: fe80::221:70ff:fe03:8563/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:582796 errors:0 dropped:0 overruns:0 frame:0
          TX packets:486490 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:628984075 (599.8 MB)  TX bytes:197546144 (188.3 MB)
          Memory:fe9e0000-fea00000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5567 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5567 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:576076 (562.5 KB)  TX bytes:576076 (562.5 KB)

vnet0     Link encap:Ethernet  HWaddr e6:82:ac:c9:02:31
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::e482:acff:fec9:231/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:12900 (12.5 KB)

Apagar dhcdbd (sólo si está)

Ahora... como es un desktop, tengo que apagar y deshabilitar el dhcdbd (en los servers en general no está):

# esto sólo es necesario si está instalado el servicio dhcdbd
sudo invoke-rc.d dhcdbd stop
sudo update-rc.d -f dhcdbd remove

Crear un bridge

Creamos ahora un bridge en eth0 para que las virtual machines tengan salida al exterior.

Primero, bajo la red:

sudo invoke-rc.d networking stop

Editamos /etc/network/interfaces y agregamos la nueva interface br0... seguimos usando dhcp para esa interfase, ahora queda así todo el archivo:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#iface eth0 inet dhcp

# Bridge to virtual machines
auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

Levanto nuevamente la red:

sudo invoke-rc.d networking start

Ahora ifconfig me muestra lo siguiente:

br0       Link encap:Ethernet  HWaddr 00:21:70:03:85:63
          inet addr:192.168.31.179  Bcast:192.168.31.255  Mask:255.255.255.0
          inet6 addr: fe80::221:70ff:fe03:8563/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:114450 errors:0 dropped:0 overruns:0 frame:0
          TX packets:97460 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:116706558 (111.3 MB)  TX bytes:37166692 (35.4 MB)

eth0      Link encap:Ethernet  HWaddr 00:21:70:03:85:63
          inet6 addr: fe80::221:70ff:fe03:8563/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:593436 errors:0 dropped:0 overruns:0 frame:0
          TX packets:499587 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:632672723 (603.3 MB)  TX bytes:206603766 (197.0 MB)
          Memory:fe9e0000-fea00000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5642 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5642 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:611216 (596.8 KB)  TX bytes:611216 (596.8 KB)

vnet0     Link encap:Ethernet  HWaddr e6:82:ac:c9:02:31
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::e482:acff:fec9:231/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:97 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:14645 (14.3 KB)

Notar que la IP ahora la tiene br0 y no eth0.

configurar el template de ubuntu-vm-builder para que use el bridge por default

El template que usa ubuntu-vm-builder es /usr/share/ubuntu-vm-builder/templates/libvirt.tmpl. Tenemos que modificarlo para que use el bridge br0 por default. Abrir el archivo y cambiar:

    <interface type='network'>
      <mac address='%MAC%'/>
      <source network='default'/>
    </interface>

Por:

    <interface type='bridge'>
      <mac address='%MAC%'/>
      <source network='br0'/>
    </interface>

O lo podemos hacer automáticamente:

TS=`date +'%Y%m%d_%H%M%S'`
cd /usr/share/ubuntu-vm-builder/templates
sudo mv libvirt.tmpl libvirt.tmpl-BACKUP-${TS}
sed -e s"#<source network='default'/>#<source network='br0'/>#" libvirt.tmpl-BACKUP-${TS} | sudo tee libvirt.tmpl >/dev/null
# dejemos el owner y modo identicos al original
sudo chown --reference=libvirt.tmpl-BACKUP-${TS} libvirt.tmpl
sudo chmod --reference=libvirt.tmpl-BACKUP-${TS} libvirt.tmpl

Directorio para dejar las virtual machines

Como no queremos que las VMs estén en los directorios /home de los usuarios, creamos un directorio en /var y le damos permiso al grupo libvirtd para escribir en ese directorio. Como los usuarios que manejan VMs deben pertenecer a ese grupo, entonces les damos permiso para crearlas también.

De acuerdo a lo que me contestaron en el bug que habla del tema de permisos, esta es la forma razonable de hacerlo (it's not a bug, it's a feature).

# creamos un directorio para nuestras virtual machines
export VMDIR="/var/kvm"
sudo mkdir -pv ${VMDIR}
sudo chown root.libvirtd ${VMDIR}
sudo chmod 775 ${VMDIR}

Creación de una virtual machine

export VMNAME=vm_baby-01
sudo ubuntu-vm-builder kvm hardy --dest ${VMDIR}/${VMNAME} --domain ipark.tv --hostname vm01 --mem 256 --user baby --pass baby --mirror http://br.archive.ubuntu.com/ubuntu/ --components main,universe,restricted,multiverse --addpkg vim --addpkg openssh-server --libvirt qemu:///system
chgrp libvirtd ${VMDIR}/${VMNAME}

VirtualMachines/KvmQemu (última edición 2008-11-06 16:50:23 efectuada por MarianoAbsatz)