Como virtualizar Windows XP con soporte de Red en Debian usando Qemu
Hace ya unos años que oímos hablar del término Virtualización en el mundo de la informática, aunque es cierto que hace relativamente poco que podemos disfrutar de esta tecnología en nuestro PC de casa.
Existen varios productos de software gratuitos que nos permiten virtualizar un sistema operativo (invitado o guest) dentro de otro (host). Uno de los más populares, sin duda, es VMWare, que en su versión Server nos permite crear y ejecutar máquinas virtuales sin problema en Windows o Linux.
Otra alternativa es Qemu. Se trata de software libre y gratuito de emulación y que funciona perfectamente en Linux. Ya había oído hablar de Qemu hace unos meses aunque tanto en el trabajo como a modo particular mi software preferido era VMWare. Al final, dada mi necesidad de ejecutar un entorno windows para testear tipografías en Internet Explorer y Firefox, me he decidido a probar Qemu para virtualizar Windows.
A continuación, detallo los pasos seguidos para conseguir una máquina virtual de Windows XP en Debian utilizando Qemu.
Mi sistema actual
Actualmente mi PC corre una distribución Debian Etch (estable), con KDE 3.5. A grandes rasgos, se trata de un Core 2 Duo con 2 GB de memoria RAM, más que suficiente para ejecutar un Windows XP virtualizado.
Instalación de Qemu
Abrimos un terminal. El primer paso (como siempre) es actualizar las fuentes de instalación y seguidamente instalar el paquete qemu. Para los pasos que necesitan permisos administrativos, puedes usar sudo (si lo tienes instalado, o usas Ubuntu) en vez del comando clásico su.
su -c ‘apt-get update’
su -c ‘apt-get install qemu’
Ya tenemos Qemu instalado en nuestro sistema. Fácil, no?
Ejemplo de uso: crear una máquina virtual de Windows XP
Una vez instalado Qemu, estos son los pasos que hacen falta para virtualizar Windows XP en nuestro sistema. El primer paso es crear un disco vacío donde instalaremos el operativo invitado. En este caso, llamaremos windows al archivo contenedor del sistema invitado y tendrá un tamaño de 4 gigas.
qemu-img create -f qcow windows 4G
El paso siguiente es encender la máquina virtual para instalar windows a partir de un cd o de una imagen ISO. Para ello, ejecutamos el siguiente comando:
qemu -cdrom windowsxppro.iso -m 384 -localtime -boot d windows
Donde windowsxppro.iso es la imagen donde se encuentra el XP, y windows es el archivo contenedor que hemos creado en el paso anterior. El parámetro m indica la cantidad de memoria que utilizará el sistema invitado, y se puede indicar la cantidad que uno desee, en función de lo que necesitemos. El parámetro localtime indica al sistema invitado que debe tomar la hora del host. Finalmente, boot d indica al sistema invitado que debe arrancar del cd (virtual), que vendría a ser más o menos como si cambiásemos el orden de arranque en un sistema real para que arrancara primero el cd.
Si quisiéramos instalar directamente desde un cd (en vez de una imagen *.iso), el comando sería el siguiente:
qemu -cdrom /dev/cdrom -m 384 -localtime -boot d windows
A partir de aquí ya solo queda acabar la instalación de windows y volver a arrancar la máquina virtual cuando queramos.
Arrancar la máquina virtual con soporte de red
Para arrancar la imagen que acabamos de instalar, basta con escribir el comando siguiente:
qemu -localtime -m 384 -hda windows
Esto encenderá nuestra máquina virtual, pero no nos dará soporte de red propiamente dicho. Solo tendremos acceso al equipo host, mediante la IP 10.0.2.2. Si lo que realmente nos interesa es que nuestra máquina disponga de una IP en el rango de nuestra red y que se pueda conectar a internet, entonces debemos configurar la máquina host como bridge (puente).
Primero nos aseguramos que tenemos soporte para dispositivos tun/tap y ethernet bridging en nuestro kernel. Los siguientes comandos debería darnos como resultado algo como CONFIG_TUN=m, CONFIG_TUN=y o CONFIG_BRIDGE=m.
cat /boot/config-`uname -r` | grep CONFIG_TUN
cat /boot/config-`uname -r` |grep CONFIG_BRIDGE
Si no obtenemos el resultado deseado, entonces deberemos recompilar el kernel añadiendo soporte para dispositivos TUN/TAP y para el bridging (algo fuera del alcance de esta pequeña guía). Si el resultado es positivo continuamos. Si hemos configurado el soporte tun/tap i el ethernet bridging como módulos del kernel, los cargamos en memoria y los añadimos a la lista de módulos para cargar en el inicio de la máquina.
su -c ‘modprobe tun’
su -c ‘modprobe bridge’
Seguidamente instalamos un par de paquetes que contienen las utilidades para crear el puente.
su -c ‘apt-get install bridge-utils uml-utilities’
Y nos cercioramos que existe el dispositivo tun en /dev/net. Este dispositivo se crea cuando cargamos el módulo tun en el kernel.
ls /dev/net
Ahora vamos a configurar el puente para que qemu se pueda comunicar a través de nuestra red mediante el dispositivo tap0. Los siguientes comandos deben ejecutarse con root o bien mediante sudo
tunctl -u <ElUsuarioQueVaAEjecutarQemu> -t tap0
ifconfig eth0 down
ifconfig eth0 0.0.0.0 up
ifconfig tap0 0.0.0.0 promisc up
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 tap0
ifconfig br0 <TuIP> netmask <TuMáscaraDeSubred> up
route add default gateway <TuPuertaDeEnlace>
Llegados aquí, ya tenemos el puente hecho entre tap0 y eth0. De esta manera, el sistema que corramos en Qemu podrá comunicarse con la red local e internet como si fuera otro equipo más en la red. Ahora, arrancamos la imagen de windows de la siguiente manera con el usuario para el que hemos creado anteriormente el dispositivo tap0.
qemu -localtime -m 384 -net nic -net tap,ifname=tap0 -hda windows
Los parámetros que pasamos a qemu son los mismos de antes añadiendo un par para que sea capaz de utilizar tap0 como dispositivo de red. Arrancamos windows y configuramos la red como siempre. Una vez configurado windows, seremos capaces de encender el Explorer y conectarnos a internet sin problemas.
En la entrada siguiente explico como añadir todo esto a varios scripts para automatizar el proceso y no tener que picar todos los pasos cada vez.
[…] Como virtualizar Windows XP con soporte de Red en Debian usando Qemu Sábado 15 de Marzo, […]