Qemu (qemu.org, paquete qemu), es un programa que ejecuta máquinas virtuales. Es decir, simula un ordenador completo, incluyendo el procesador y los periféricos y permite ejecutar un Sistema Operativo dentro de Linux como si fuera una aplicación más (incluso se puede acceder a Internet desde la máquina virtual). También se suele utilizar para obtener capturas de pantalla de procesos de inicio e instalación.
Equivalencias en Windows: MS-Virtual PC.
Vamos a ver cuatro casos:
- instalar Windows (o cualquier otro SO) con Qemu
- ejecutar un live-CD Linux con Qemu
- ejecutar un disquete de arranque Linux con Qemu
- lanzar Qemu con qemu-launcher
Instalar Windows o cualquier otro SO con Qemu
Veamos cómo instalar Windows en una máquina Linux con Qemu.
- Primero tenemos que crear una imagen de disco. La imagen de disco es el archivo donde vamos a instalar Windows
(o cualquier otro Sistema Operativo) y representa el disco duro. Crearemos la imagen de disco con el comando:
$ qemu-img create /mnt/winxp.iso 6G
Este comando es similar a:
$ dd if=/dev/zero of=/mnt/winxp.iso bs=1024 count=6000000
- Arrancaremos desde un disquete de arranque de Windows con el comando:
$ qemu -m 512 -fda /dev/fd0 -cdrom /dev/cdrom -boot a /mnt/winxp.iso
También podemos arrancar desde el CD de Windows:
$ qemu -m 512 -cdrom /dev/cdrom -boot d /mnt/winxp.iso
- -m 512: tamaño de la RAM virtual en MB dedicada a la máquina virtual.
- -fda /dev/fd0: fichero que representa la disquetera que verá la máquina virtual.
- -cdrom /dev/cdrom: fichero que representa el CD que verá la máquina virtual.
- -boot a: para que arranque desde la disquetera.
- -boot d: para que arranque desde el CD.
- Procedemos a instalar Windows:
- lanzamos el proceso habitual de instalación de Windows:
- cuando el sistema se reinicie cerraremos la ventana de Qemu con <Ctrl+C> y
volveremos a ejecutarlo pero esta vez arrancando desde el disco duro, con la opción -boot c:
$ qemu -m 512 -cdrom /dev/cdrom -boot c /mnt/winxp.iso
- continuará la instalación:
- arrancará Windows:
- y ya tendremos Windows corriendo en nuestra máquina virtual:
- Una vez instalado Windows, lo arrancaremos con el comando:
$ qemu -m 512 -cdrom /dev/cdrom -boot c /mnt/winxp.iso
Notas
- Cuando estemos dentro de la ventana de Qemu, para que el ratón vuelva a afectar a nuestras X y no a la máquina virtual, pulsaremos <Ctrl+Alt>.
- Para pasar a pantalla completa pulsaremos <Ctrl+Alt+f>.
- Qemu dispone de una consola desde la que podemos ejecutar comandos de forma interactiva, a la que accederemos pulsando <Ctrl+Alt+2>.
Módulo acelerador kqemu
Qemu dispone del módulo acelerador kqemu (paquetes kqemu-common kqemu-modules-2.6-486), que hace que las operaciones sean manejadas por el procesador del host y no por el invitado, lo cual aumenta la velocidad de forma considerable. Lo cargaremos en el kernel con:
# modprobe kqemu major=0 |
y lo activaremos con la opción -kernel-kqemu. Para comprobar que kqemu está cargado accederemos a la consola de Qemu pulsando <Ctrl+Alt+2> y ejecutaremos:
(qemu) info kqemu |
Si no hemos activado kqemu con la opción -kernel-kqemu obtendremos:
kqemu suport: enabled for user code |
Si lo hemos activado obtendremos:
kqemu suport: enabled for user and kernel code |
Si no se activa kqemu y recibimos el mensaje:
Could not open '/dev/kqemu' - QEMU acceleration layer not activated |
lanzaremos Qemu con permisos de root.
Ejecutar un live-CD Linux con Qemu
Para ejecutar un live-CD Linux con Qemu no necesitamos crear la imagen de disco. Simplemente ejecutaremos:
$ qemu -m 512 -cdrom /dev/cdrom -boot d |
y el live-CD se ejecutará en la ventana de Qemu.
Para probar una imagen de un live-CD sin tostar un CD haremos:
$ qemu -m 512 -cdrom /home/francis/livecd.img -boot d |
Ejecutar un disquete de arranque Linux con Qemu
Ejecutar un disquete booteable con Qemu es similar a un live-CD, simplemente ejecutaremos:
$ qemu -m 512 -fda /dev/fd0 -boot a |
Para probar una imagen de un disquete booteable sin usar la disquetera haremos:
$ qemu -m 512 -fda /home/francis/disquete.img -boot a |
Acceder a Internet desde Qemu con tun/tap
Configurar el acceso a Internet desde Qemu no es nada sencillo. Hay varios sistemas, veamos cómo lo he conseguido usando tun/tap.
- Cargamos el módulo tun en el kernel:
# modprobe tun
Esto hace que tengamos disponible en el ordenador real la interfaz tap0, que actuará como gateway para la máquina virtual. Si hacemos:
$ ifconfig -a
comprobaremos que tap0 no aparece, a pesar de que la opción -a muestra todas las interfaces, incluso las down. No aparecerá hasta que no arranque Qemu.
- Comprobamos que existe el script /etc/qemu-ifup, cuyo contenido es:
#!/bin/sh sudo -p "Password for $0:" /sbin/ifconfig $1 192.168.0.9
Qemu, con la opción -net tap, ejecuta el script /etc/qemu-ifup, que configura la IP de tap0 (192.168.0.9). El nombre del dispositivo de red (tap0, tap1…) lo pasa como parámetro ($1).
- Configuramos el enrutamiento (192.168.0.6 es la IP de eth0):
# route add -host 192.168.0.6 gw 192.168.0.9
y hacemos masquerading NAT:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # echo 1 > /proc/sys/net/ipv4/ip_forward
- Ejecutamos Qemu como root para no tener problemas de acceso a tap0:
# qemu -m 512 -cdrom /dev/cdrom -boot c /mnt/sarge.iso -net nic -net tap
- Una vez lanzado Qemu, comprobamos:
- que aparece tap0 y tiene la IP correcta:
$ ifconfig
- que IPtables tiene el masquerading configurado:
$ iptables -t nat -nvL
- el enrutamiento:
$ route
- que aparece tap0 y tiene la IP correcta:
- La configuración de la red en la máquina virtual será:
- IP: 192.168.0.6
- gateway: la IP de tap0, 192.168.0.9
- DNS: el mismo que en el ordenador real.
Terminado, ya tenemos acceso a Internet desde la máquina virtual.
Lanzar Qemu con qemu-launcher
Podemos lanzar Qemu con qemu-launcher (paquete qemu-launcher), que nos facilitará mucho establecer opciones de arranque.
Desde qemu-launcher podemos activar qemuctl (paquete qemuctl), que ejecuta una consola interactiva que nos permite modificar el comportamiento de Qemu mientras se está ejecutando: montar/desmontar unidades, etc.
Emm me gusto mucho el tutorial xD pero… como hago si mi ip es dinamica?
Hola, los paquetes kqemu-common y kqemu-modules ¿de qué distro son? He probado a buscarlos en Ubuntu Dapper, pero no encuentra nada :-( (quizá falte algún repositorio).
@Eddie: aunque tu PC tenga IP dinámica, el proceso para el sistema virtual es el mismo.
Muchas gracias por tu tutorial. Con el he conseguido instalar qemu en ubunt 8.0 para un Latitude DELL D420.
KVM me daba problemas por que no explicaban bien lo del reboot.