miércoles, 6 de noviembre de 2013

Instalar una máquina virtual con Windows XP con KVM

Otra entrada mientras sigo intentando enterarme de eso de OpenCL. Ya me he tragado 6 horacas de podcast con bastante poco código, a ver si para la semana que viene se puede tener algo medianamente listo. (^_^)

A lo que vamos, que si no no terminamos nunca.

Ayer se me planteó la necesidad de utilizar un sistema de "usar y tirar" para probar un par de chapucillas sin dejar rastro en mi sistema. Y para hacerlo, nada más sencillo que una máquina virtual, la montas, haces lo que sea, y la tiras a la papelera. Sencillo, fácil y divertido. Por problemas de compatibilidad con las chapucillas, necesitaba que mi sistema fuese un Windows, así que conseguí una copia de Windows XP y me dediqué, durante varias horillas a echarla a andar utilizando KVM.

Por supuesto, y esperando que a nadie le pase lo mismo que a mí... drivers del demonio, os explicaré de forma fácil y sencilla cómo se debe/puede montar una máquina virtual con Windows utilizando KVM.


Necesitaremos los siguientes ingredientes:
  • Los paquetes qemu y libvirt instalados en nuestro equipo. Desde hace un tiempo kvm está integrado en qemu así que no hay problema por esa parte.
  • Un disco/una iso de Windows XP.
  • Los drivers de virtio para Windows. Con estos drivers podremos utilizar los dispositivos "virtio", que deberían tener un rendimiento mucho mejor que otras opciones como son virtualizar un hardware concreto.
    Se pueden conseguir de aquí: Virtio-win (el archivo se llama virtio-win-0.1-65.iso)
  • Un par de guantes. Con esto podremos evitar tocar todo lo relacionado con Windows, aunque sea en una máquina virtual, si nos da grima.
Muy bien, ya estamos listos para empezar. Si no sabéis si podéis utilizar KVM para virtualizar un sistema, basta con que ejecutéis el siguiente comando:
 grep -E "(vmx|svm)" /proc/cpuinfo
Si no devuelve nada, me temo que no podréis utilizar KVM, lo siento, no tendréis el mismo rendimiento.

Pero sigamos adelante. Una vez que ya tenemos todo lo necesario, tendremos que crear un disco donde vayamos a colocar nuestra máquina virtual. Para ello, vamos a nuestro directorio de trabajo y utilizamos qemu-img create para eso... ¡crear! 
qemu-img create -f qcow2 windoze.qcow2 10G
Con esto, le digo que me cree una imagen de tipo "qcow2" de tamaño 10G que se llame windoze.qcow2. Y aquí será donde trabajaremos. Ahora viene la parte en la que es recomendable ponerse guantes, ya que empezaremos a tocar Windows.

Lo primero será instalar nuestro sistema en su sitio, para ello, utilizamos el siguiente comando:
qemu-system-x86_64 -enable-kvm -cpu host -m 512 windoze.qcow2 -cdrom
Mini-explicación: -enable-kvm: queremos kvm, ¿no?; -cpu host: utiliza todas las extensiones que puedas y que soporte mi cpu; -m 512: asigna 512 MB de memoria RAM para la máquina virtual; y --cdrom : en la unidad de cdrom coloca el disco de windows, que es lo que queremos instalar.

Y ahora a instalar... supongo que todos sabemos instalar Windows, ¿no? Siguiente, siguiente, siguiente, (acepta usted vender su alma al diablo) aceptar. Lo único, sí que hay un punto que le suele costar bastante y es el de "Installing Devices", de hecho, lo dejé una hora y no había avanzado nada... luego reinicié la instalación un par de veces y terminó... Así que no os preocupéis, insistid que se instala.


Una vez hayamos terminado, vamos a hacer lo primero que se tiene que hacer en todo sistema Windows: descargarnos un navegador de verdad para no tener que utilizar nunca jamás de los jamases el internet explorer. Probamos a abrir el explorer y... no hay interneeeeeeee..... eeeee....


¡No desesperemos! Al menos todavía. Lo que pasa es que Windows no nos reconoce el controlador de red que está emulando qemu y por eso no tiene ni idea de como conectarse a la red.


Ahora tenemos dos alternativas, si tenemos mucha prisa por usar internet y no nos importa tener un peor rendimiento, podemos emular una tarjeta de red normalita para que no se queje y arreando. Si escogemos esto, la solución es ejecutar la máquina virtual con este comando:
qemu-system-x86_64 -enable-kvm -cpu host -m 512 windoze.qcow2 -net nic,model=rtl8139 -net user
Si ya que hemos llegado hasta aquí, queremos ir con todo el equipo, y utilizar virtio para obtener mejor rendimiento, ejecutaremos la máquina virtual con este otro comando:
qemu-system-x86_64 -enable-kvm -cpu host -m 512 windoze.qcow2 -net nic,model=virtio -net user
Al arrancar nos dirá que ha encontrado nuevo hardware. Claro, es como si le hubiésemos cambiado la tarjeta de red, pero sigue sin tener ni idea de cómo utilizarla... Por supuesto, Windows es muy listo y propone conectarse a internet para buscar drivers de la tarjeta que le permitiría conectarse a internet, ya sabes "¿Quiere buscar en internet ayuda sobre cómo conectarse a internet?" Todo muy lógico

Pero claro, no nos habríamos bajado un montón de drivers solo por tenerlos de adorno, ¿no? Apagamos y volvemos a arrancar la máquina virtual, esta vez diciéndole que ponga en el cd-rom el disco de drivers que habíamos creado.
qemu-system-x86_64 -enable-kvm -cpu host -m 512 windoze.qcow2 -net nic,model=virtio -net user -cdrom
 Vale, esta vez va la vencida. Vamos al administrador de dispositivos, buscamos la controladora ethernet que no reconoce (Red Hat VirtIO Ethernet Adapter) y le pedimos que reinstale los drivers. Y... ahora mágicamente encuentra algo que puede utilizar como drivers. ¡Estamos salvados! ¡Interneeeeeee! ¿Eh? ¿Qué? ¿Cómo que drivers corruptos?


Este es otro de los momentos en los que Windows demuestra su "infinita sapiencia" y que puede dar más de un quebradero de cabeza. Resulta que en el disco de drivers los hay para diversos sistemas Windows. Pero XP, que es más chulo que nadie pilla el primero que encuentra, que es el de Windows8, y por supuesto no funciona ni nada. Y su solución es decir que están corruptos... porque ya se sabe, si no es lo que quiero entonces está mal hecho.

La solución es coger la carpeta "XP" del cd y dejarla en el disco C. Luego pedimos que expulse el cd para que deje de dar la tabarra. El siguiente paso es decirle a Windows que es idiota y que queremos elegir nosotros a mano el driver. Para ello intentamos reinstalar el driver, pero seleccionamos la opción de "Instalar de una localización específica" y luego "No busques, yo lo elijo" En la ventanita que nos sale escogemos "Tengo disco" y buscamos la carpeta que hemos copiado antes, aquí tendremos dos carpetas, escogemos "X86", seleccionamos el archivo que hay dentro y "Abrir". Ahora ya es siguiente, siguiente, siguiente hasta que lo instale.

Vamos al navegador y voilá de ese, ya tenemos internet. Ya podemos hacer lo que sea que queramos hacer con el entorno virtual antes de tirarlo a la papelera.


Espero que os haya sido útil y os evite estar una hora de "prueba y error" con la red.

Más información:
- KVM 
- QEMU

No hay comentarios: