Emulador Qemu

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.

  1. 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
  2. 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.
  3. Procedemos a instalar Windows:
    1. lanzamos el proceso habitual de instalación de Windows:

      Instalador MS-DOS de Windows

    2. 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
    3. continuará la instalación:

      Instalador de Windows

    4. arrancará Windows:

      Arranca Windows en Qemu

    5. y ya tendremos Windows corriendo en nuestra máquina virtual:

      Windows en Qemu

  4. 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.

Linux live-CD con 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.

  1. 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.

  2. 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).

  3. 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
  4. 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
  5. Una vez lanzado Qemu, comprobamos:
    1. que aparece tap0 y tiene la IP correcta:
      $ ifconfig
    2. que IPtables tiene el masquerading configurado:
      $ iptables -t nat -nvL
    3. el enrutamiento:
      $ route
  6. 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.

qemu-launcher

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.

qemuctl

Artículos en la categoría "Virtualización"

  1. Centralitas telefónicas IP PBX
  2. Clusters Beowulf/PVM
  3. Clusters Beowulf/MPI
  4. Clusters OpenMosix
  5. Clusters Kerrighed
  6. Clusters HA con LVS
  7. Clusters UltraMonkey
  8. Clusters LVS + Keepalived
  9. Emulador Qemu
  10. Máquina virtual VirtualBox
  11. Máquina virtual Xen
  12. API de Windows para Linux: WINE
  13. La jaula en Linux: chroot
  14. Cómo ejecutar aplicaciones Android en Linux
  15. RAID (discos redundantes)
  16. LVM (volúmenes lógicos)
  17. AoE (ATA over Ethernet)
  18. Mirror remoto con DRBD

3 Comments:

  1. Emm me gusto mucho el tutorial xD pero… como hago si mi ip es dinamica?

  2. 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.

  3. 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.