Also in English.
Resumen:
En este documento buscamos explicar la forma de correr QEMU como un usuario normal (no como root). Este documento puede ser útil para otras distribuciones de GNU/Linux.
- Instalación de los programas que necesitamos
- Creación de la partición
- Ejecución de qemu
- Ejecutar qemu y ponerlo en la red
- Problemas
- Enlaces
Instalación de los programas que necesitamos
- QEMU
apt-get install qemu
- tunctl
apt-get install uml-utilities
- bridge-utils
apt-get install bridge-utils
Se recomienda instalar kqemu, un módulo libre (GPL) para acelerar QEMU. Para instalarlo, se necesitan las cabeceras del kernel.
- linux-kernel-headers
apt-get install linux-kernel-headers
- kqemu
apt-get install kqemu-source cd /usr/src m-a prepare m-a a-i kqemu
Note que es posible que la versión de Debian que tiene instalada traiga módulos precompilados. Busque paquetes con la cadena "kqemu-modules".
Creación de la partición
Este comando creará un archivo disperso que qemu usará.
qemu-img create image.img 4300M
El tamaño del sistema de ficheros depende de lo que usted prefiera. Nos gustó la idea de poder hacer backups en DVD.
Note que si desea hacer backups de la imagen recién creada (digamos, justo después de que ha instalado el SO), puede aprovechar que el sistema de ficheros está en un archivo disperso, y usar la opción {-S} del programa tar, que permite hacer archivos más pequeños de esta forma.
tar cjSf backup-image.tar.bz2 image.img
Por ejemplo, el backup de un sistema de ficheros de 4.4G ocupaba sólo 679M. El backup se hizo después de instalar Win2k SP4 y los últimos parches.
Ejecución de qemu
Antes de correr qemu, es probable que usted necesite ejecutar los siguientes comandos con privilegios de root:
modprobe tun # Para poner qemu en red chmod 666 /dev/net/tun # Darle acceso a todos los usuarios modprobe kqemu # Se deberÃa usar el módulo de aceleración mknod /dev/kqemu c 250 0 /bin/chmod 666 /dev/kqemu # Darle acceso a todos los usuarios
Es bueno saber que también puede usar sudo para correr modprobe. No nos gusta esa forma. Si va a correr qemu con frecuencia, es mejor adicionar las lÃneas que están arriba a los scripts de inicio.
Necesitaremos que el usuario joe ejecute ifconfig (no hablemos de seguridad ahora), asà que editamos {/etc/sudoers} para que contenga las siguientes lÃneas:
root ALL=(ALL) ALL Cmnd_Alias QEMU=/sbin/ifconfig
# Especificación de los permisos del usuario root ALL=(ALL) ALL joe ALL=NOPASSWD: QEMU
Ejecutar qemu y ponerlo en la red
tun/tap
Necesita que el usuario joe use tap0. Es probable que necesite adicionar las siguientes lÃneas a los scrips de arranque.
# tunctl -d tap0 Set 'tap0' nonpersistent # tunctl -u joe -t tap0 Set 'tap0' persistent and owned by uid 1000
Hacer un archivo scripts/up.sh, con el siguiente contenido:
#!/bin/sh sudo /sbin/ifconfig $1 192.168.2.1
Y ahora podemos ejecutar qemu:
qemu -m 350 -net nic -net nic,vlan=0 \
-net tap,vlan=0,ifname=tap0,script=scripts/up.sh \
-hda image.img -localtime -cdrom /dev/cdromUsamos -cdrom /dev/cdrom para poder instalar un sistema operativo desde CD/DVD.
Para tener acceso a la red local o a Internet:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.0.0.2 # Use su IP externa acá echo "1" > /proc/sys/net/ipv4/ip_forward
Uso de un bridge
En la página debian-bridge-es explicamos cómo se puede hacer un bridge en GNU/Linux.
Nos gustó el método descrito en esta página para pegar a qemu a un bridge. De esta forma, la máquina virtual podrá ser accedida directamente desde la red local por otros computadores.
En el archivo /etc/network/interfaces no usamos eth0 como interfaz externa. En su lugar, usamos un bridge.
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_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
En el archivo /etc/sudoers tenemos las siguientes lÃneas (No hablemos de seguridad ahora):
Cmnd_Alias QEMU=/sbin/ifconfig,/usr/sbin/brctl # Especificación de los privilegios del usuario root ALL=(ALL) ALL joe ALL=NOPASSWD: QEMU
Corremos qemu con este script:
#!/bin/sh # Necesitará la opción -win2k-hack si tiene que instalar Win2k. # Después de la instalación, deberÃa removerla. # Note que estamos usando 900MB de RAM para la máquina virtual. # Debe modificar esto de acuerdo a sus necesidades. ARGS="-hda image.img -boot c -cdrom /dev/cdrom -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup -m 900 -localtime" echo "Iniciando QEMU con..." echo $ARGS echo "...." exec qemu $ARGS
El script qemu-ifup que usamos:
#!/bin/sh echo "Ejecutando qemu-ifup" echo "Subiendo $1 en modo bridge..." sudo /sbin/ifconfig $1 0.0.0.0 promisc up echo "adicionando $1 to br0..." sudo /usr/sbin/brctl addif br0 $1 sleep 2
Tal vez quiera adicionar las siguientes lÃneas a sus scripts de inicio.
echo "Cargando el módulo kqemu ..." modprobe kqemu sudo mknod /dev/kqemu c 250 0 sudo chmod 766 /dev/kqemu /usr/sbin/tunctl -u joe
Problemas
Sin memoria
TodavÃa no sabemos si es necesario incrementar el valor de max_map_count. Eso se necesita en User Mode Linux para que un proceso dentro de la máquina virtual pueda apartar más de 256MB de memoria RAM.
echo 262144 > /proc/sys/vm/max_map_count
TODO: ¿Es esto cierto también para qemu?
Enlaces
- QEMU - Debian - Linux - TUN/TAP - network bridge
- How to run Windows XP under Ubuntu Dapper
- UML HOWTO : Setting up the network
Last update: 2007-09-11 (Rev 12932)