configurando Windows XP en QEMU con KQEMU
Una rápida búsqueda en Google debería arrojar muchas guías de cómo instalar QEMU y KQEMU. Para hacer esta, me basé sobre todo en una hecha por Nik Farkis en su blog.
Lo primero es instalar QEMU1:
sudo apt-get install qemu
y en verdad eso es todo para eso. ¡Siguiente paso!
Una vez hecho eso, instalamos KQEMU:
Ejecutamos
sudo apt-get install module-assistant kqemu-common kqemu-source
para instalar los componentes del modulo (recuerden que KQEMU es un módulo del kernel que hace que QEMU corra más rápido).
Luego corremos
sudo module-assistant prepare
y
sudo module-assistant auto-install kqemu-source
para instalar el módulo y
sudo modprobe kqemu
para cargarlo en el kernel.
Para terminar, podemos correr
sudo chmod 666 /dev/kqemu
para dejar que esté disponible para todos los usuarios y, si queremos, podemos también agregar una línea que diga kqemu en el archivo /etc/modules para que el módulo se cargue cada vez que prendamos el computador, cosa de no tener que hacer esto cada vez que queramos correr QEMU. Si quieren asegurarse de que todo esté bien, pueden correr
ls -l /dev/kqemu
para revisar los permisos (debería decir crw-rw-rw- al principio); y
lsmod | grep kqemu
para verificar que el módulo está cargado (si después de esa línea no sale nada, entonces significa que el módulo no está cargado y algo hicieron mal).
Una vez hecho todo esto estamos listos para empezar a usar QEMU.
Lo primero entonces es crear una imagen de disco. Como lo que vamos a correr es una máquina virtual, todo lo que esa máquina va a considerar como suyo no va a ser más que una simulación. Por lo mismo, la imagen de disco que vamos a crear es lo que este sistema virtual va a considerar su disco duro, y en donde va a isntalar todas sus cosas y desde donde va a correr todo también.
La imagen, entonces, la creamos con
qemu-img create [nombre-del-archivo].img [tamaño]
cosa de que nos quede algo así:
qemu-img create windows.img 3G
que significaría que estamos creando una imagen que se llamará windows.img y tendrá un tamaño de 3 gigabytes. El tamaño se expresa por defecto en kilobytes, pero uno puede expresarlo en megas o gigas usando los sufijos M o G respectivamente.
Hecho esto, entonces, podemos cargar QEMU e instalar lo que queramos (WindowsXP en mi caso) dentro de esa imagen. Para hacerlo, escribimos
qemu -boot d -cdrom /unidad/de/disco -hda /imagen/de/disco.img
en donde pueden reemplazar /unidad/de/disco por lo que les convenga a ustedes, que puede ser la direccion de alguna imagen de disco que tengan o su unidad de disco local (que debería estar en /dev/cdrom o /dev/cdrom0 si están corriendo Ubuntu, no sé en otras distribuciones). Del mismo modo, reemplacen /imagen/de/disco.img por la ubicación de la imagen de disco que creamos recién con qemu-img.
Y deberíamos estar corriendo Windows ya. ¡Felicitaciones!
Ahora, sí hay un par de cambios que yo le hice a mi instalación para que funcionara mejor.
En el posteo de Nik Farkis se recomienda usar un paquete llamado qemu-launcher, que le permite a uno decidir qué cosas quiere que QEMU cargue al empezar y lo carga por nosotros. Práctico, conveniente. Sin embargo, las opciones que da ese programa son súper limitadas, y, si son como yo, luego querrán tener más control sobre lo que están cargando.
Por eso, yo les recomiendo generar su propio comando para lanzar QEMU y grabarlo por ahí (yo lo puse como un atajo en mi KMenu y quedó flor). Por eso, veamos un poco el comando que uso yo para ayudarlos a hacer el propio:
Si hacen esto tendrán todo lo bueno de qemu-launcher y todos los beneficios de poder controlar ustedes mismos cada detalle de su sesión de QEMU.
qemu -boot c -hda /imagen/de/disco.img -cdrom /dev/cdrom -m 256 -usbdevice tablet -net user -net nic -soundhw all
-boot le dice a QEMU desde que unidad comenzar, en este caso C, que vendría siendo como / para Windows.
-hda /imagen/de/disco.img le dice a QEMU qué imagen de disco usar como disco duro, en este caso /imagen/de/disco.img.
-cdrom /dev/cdrom determina qué dispositivo usar como unidad de disco óptico. Ahí pueden usar ustedes una imagen de disco, por ejemplo, y la máquina virtual nunca sabrá la diferencia.
-m 256 sirve para determinar cuánto RAM (en megas) tendrá nuestra máquina virtual. Si no especificamos nada, la memoria por defecto es 128 megas.
-usbdevice sirve para añadir manualmente (y al comenzar) un dispositivo USB. Si usamos tablet le decimos a QEMU que en vez de leer las coordenadas del mouse como coordenadas relativas, lo haga como coordenadas absolutas. Haciendo esto, QEMU simula un tablet (por eso el nombre del dispositivo que se usa aquí) y evitamos que QEMU necesite que le demos el uso exclusivo del mouse para que lo use. Con esto podemos tener la ventana de QEMU abierta y bastará con que pongamos el cursor del mouse encima para que QEMU lo lea correctamente como el mouse de la máquina virtual.
-net user -net nic simula la tarjeta de red y permite a la máquina virtual conectarse a la red. Y finalmente
-soundhw all habilita controladores para todas las tarjetas de sonido para las que QEMU tiene soporte.
¿Y con eso estamos listos?
No exactamente. Falta una última cosa.
Como están las cosas hasta aquí no hemos visto nada de cómo pasarle a QEMU el control de dispositivos USB que no estén conectados a la hora de empezar (que se podría hacer con -usbdevice). Y si lo hubiéramos visto, nos habríamos encontrado con el apestoso asunto de que QEMU no tiene acceso a los dispositivos USB por defecto (idioteces de la vida).
Para solucionar esto último antes de pasar de lleno a cómo pasarle dispositivos USB, debemos modificar el script /etc/init.d/mountdevsubfs.sh tal como dice aquí y descomentar las líneas que están después de la línea 40. Esto es, cambiar donde dice
#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb
por
#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb
y corremos el script modificado:
sudo /etc/init.d/mountdevsubfs.sh
Una vez hecho esto, podemos conectar cualquier dispositivo USB mediante el monitor de QEMU.
El monitor de QEMU. Click para una versión más grande y el listado de comandos.
Para tener acceso al monitor, basta con apretar Ctrl+Alt+2 desde QEMU y entrarán a una especie de consola de QEMU. Desde aquí tendrán acceso a una serie de herramientas para hacer un uso más efectivo de QEMU sin tener que reiniciarlo. Las que nos interesan para usar los dispositivos USB del huésped en la máquina virtual son info usbhost, usb_add y usb_del.
Con el primero tenemos un listado de todos los dispositivos USB que están conectados al huésped y sus direcciones de bus.
Una vez hayamos identificado el dispositivo que queremos lo pasamos a QEMU con usb_add y al salir del monitor (apretando Ctrl+Alt+1) ya estará siendo detectado. Cuando queramos sacarlo, basta con expulsarlo desde Windows, y una vez que esté fuera, lo sacamos con usb_del tal como sale en el siguiente GIF tutorial:
Pasos para conectar y desconectar dispositivos USB del huésped en el sistema virtual en QEMU. Click para una versión de mejor resolución.
Espero que les haya servido. Comenten si hay dudas o… comentarios. :P
- No se olviden de hacer
sudo apt-get update[volver] - ¿Pueden creerlo? ¡De verdad dice “Magic to make /proc/bus/usb work” pero viene comentado por defecto! [volver]
Pages: 1 2
June 5th, 2008 at 7:40 pm
1.- Echale un ojo a rdesktop y a su contraparte en qt krdesktop (o algo asi). Se supone que eso usa gnome (y kde e teoria) para lograr “virtualization integration” y correr vms como soporte a aplicaciones integradas en el desktop. onda correr iexplorer desde kmenu, sin que se “vea” que es un vm (para windows es mejor wine en todo caso…)
2.- Yo tenia entendido que a.- la memoria minima pa windosxp era de 384 mb b.- el valor por defecto de qemu era 384 mb.
3.- Yo habria puesto ademas una notita sobre que hacer cuando quieres usar mas ram del que esta disponible en shm (shm es la memoria compartida del kernel, armada entre ram y swap), que consiste en desmontar /dev/shm y remontarlo con un tamaño custom mas grande…
4.- ya que estai interesado en armar launchers pa esas cosas… hay costos asociados a tener kqumu cargado por que si? no seria mejor poner el modprobe en el mismo comando, o mejor aun, apuntar el menu a un wrapper que cargara kqemu y despues lanzara qemu? notese que yo SI lo cargo desde /etc/modules, puede que esto sea onanismo puro…
5.- lo que seria sweet seria que hicieras algo parecido, pero con xen. A mi me da un poco de lata instalar un hypervisor, pero tu tenis un computador extra
5.1.- y si uno arma una vm en qemu que bootee xen?!?!? oh, lav recursividad!
6.- hay miles de razones practicas para preferir qemu. empezando por que pasar de que se te ocurra usarlo a usarlo es tan sencillo como apt-get, modprobe, qemu. Ahora, asi mismo, hay serias limitaciones con qemu… no es asi como una herramienta “profesional”, sino mas bien un chiche de hobby.
7.- Nunca nadie ha podido responderme esta pregunta: existe alguna aplicacion que sea capaz de cargar como vm una particion real? eso seria sweet.
ya, mucho jugo. un abrazo.
June 5th, 2008 at 11:32 pm
Aclaraciones varias:
1. rdesktop no involucra virtualizacion. Es simplemente un cliente para el protocolo de acceso remote de Windows. rdesktop = “remote desktop”
2. Yo (y aparentemente Coquin) corro un par de VMs con Windows XP y 256mb de memoria.
3. La memoria disponible en /dev/shm no tiene relacion con la que esta disponible para la maquina virtual. Estas pensando en memoria virtual (lo “virtual” de esa memoria no tiene nada que ver con maquinas virtuales). Remontar /dev/shm con un taman~o mas grande de hecho *reduce* la memoria virtual. Para aumentar la memoria virtual sin dentrar a picar, la unica manera es agregar swap.
6. No menosprecies a qemu! Es bastante mas que un “chiche de hobby” y tiene una historia larga. Puede que no sea todo lo pulido que es vmware, pero uno podria decir lo mismo de Linux respecto de Windows!
7. No se de qemu, pero en vmware se puede, aunque no es una buena idea, a menos que el OS en la particion “real” lo hayas instalado desde vmware y solo lo uses ahi. Si no, a tu instalacion de Windows no le va a gustar nada que derepente todo el hardware cambie. De partida, XP se va a desactivar, pero puede que ni tenga los drivers necesarios.
Abrazos,
M.
June 14th, 2008 at 12:05 pm
Bueno.
Después de instalarle QEMU a la analfabeta tecnológica número uno que conozco (mi madre) me quedan algunas dudas.
1) Repito la pregunta 4 de JT. Osea: ¿no sería lo ideal que kqemu se cargue de manera automática con el lanzador? ¿no es onanismo tenerlo cargado en todo momento?
2) La guía omite un pequeño detalle al momento de explicar cómo bootear el guest OS. El problema es que no puedes señalar la dirección /media/nombre_de_disco_va_aqui (que sería lo más lógico), porque ese es simplemente el punto de montaje, sino que hay que señalar el dispositivo (yo use el symlink que sale en /dev al cdrom). Si intentas con /media… te tira un error (el cual no recuerdo) que al googlearlo me dio la solución (si sé que dice /dev de ejemplo, pero a mí no me había quedado tan claro).
3) Para pasar a pantalla completa sirve algo el ctrl+f (es una lata tener qemu en un cuarto de pantalla.
4) (sigo con mis comentarios intentando hacer una muy buena guía, una guía perfesta): Creo que la guía debería partir explicando que tienes que tener Ubuntu instalado (o por lo menos Debian): ya me imagino a alguien con Fedora o SuSE que ponga apt-get y le diga: “no such command” o algo así
(aunque sí, reconozco que es menos probable que un newbie utilice Fedora o SuSE a que utilice Ubuntu).
5) Tuve una duda que parece ser extendida: que la K en kqemu significa KDE y no, significa kernel.
6) También se podría colocar algún link a esas utilidades cómo shrink xp o similares que te permiten usar una versión minimizada que consuma menos recursos (existe una que se llama algo así cómo shrink vista, pero sería una tontera, sería cómo esperar que algún que Don Francisco tenga anorexia).
7) (imitando a las australianas del foro, aunque está relacionado, la única razón por la que me interesaría instalar windows) ¿alguno de los hermanitos Atria han tenido problemas con los archivos .doc creados en oo.o que se ven bien en algunas versiones de office, pero en otras no?
8) Cómo le dije a JT (fundamentalmente por razones de RAM) de verdad al finalmente lograr cargar windows dentro de linux fue cómo lograr lo que esperaba hace musho tiempo (y fue por esta guía). Gracias Coquín.
June 15th, 2008 at 6:09 pm
PD: También le falta lo que sale en la wiki de Ubuntu:
https://help.ubuntu.com/community/WindowsXPUnderQemuHowTo
También puedes montar el disco virtual de QEMU tal y cual cómo otro disco. Las imagenes QCOW no pueden ser montadas.
TIENES QUE ESTAR SEGURO DE NO ESTAR CORRIENDO QEMU CUANDO HAGAS ESTO.
Para montar el disco, primero se debe crear un directorio, por ejemplo “media/qemu”. Luego correr en la consola:
sudo mount -o loop,offset=32256 windows.img /media/qemu
Eso sería (si tienen una imagen QCOW salen instrucciones para solucionarlo en la página que di, in ingrish solamente).
PD2: ¿Cachaí porque mientras tengo abierto el QEMU no tengo sonido en Kubuntu?