[ratings]
Antes de comenzar quiero dedicarle el siguiente documento a petato, aquel integrante superactivo y dedicado del LUG Zona Norte (léase ironía) que tanto me viene pidiendo sobre el tema.
Cuando en el documento hablo de maquina host me refiero a la maquina física corriendo el sistema operativo real. Mientras que un sistema invitado es el emulado.
La herramienta que voy a analizar es Qemu.
Qemu es un completo emulador que posee dos modos:
-Emulación completa de un sistema: incluyendo uno o varios procesadores además de sus periféricos. Puede ser utilizado para arrancar un sistema operativo dentro del sistema actual sin necesidad de bootear la maquina.
-User mode (solamente si la maquina host es linux): donde podemos arrancar procesos compilados para un determinado tipo de cpu. Por ejemplo podemos hacer pruebas de cross-compiling o cross-debuging observando como se comportaría una aplicación desarrollada para un procesador de tipo ARM.
Qemu usa una técnica de traducción dinámica que consiste en convertir el código binario de la arquitectura fuente en código entendible por la arquitectura host, con la consiguiente ventaja de que la velocidad de emulación sea mucho más rápida que otros emuladores tipo Bochs.
Actualmente soporta los siguientes tipos de systemas completos emulados:
* PC (x86 o x86_64)
* ISA PC (equipos viejos sin slot PCI)
* PREP (PowerPC)
* G3 BW PowerMac (PowerPC)
* Mac99 PowerMac (PowerPC)
* Sun4m (32-bit Sparc)
* Sun4u (64-bit Sparc)
* Malta board (32-bit MIPS)
* ARM Integrator/CP (ARM1026E)
Para el caso de User Mode: x86, PowerPC, ARM, MIPS y Sparc32/64.
Posee soporte smp por lo que podemos emular de 1 a 255 procesadores y redes pudiendo simular 1 o varias placas conectadas al mismo equipo virtual, además de poder arrancar x instancias emuladas y elevar la complejidad del sistema a emular.
Las placas de red se pueden conectar a un numero arbitrario de VLANs (Virtual local área network). Las VLANs pueden ser conectadas entre instancias separadas de Qemu para simular grandes infraestructuras de redes. Para poder tener estructuras complejas de redes se necesita arrancar el emulador con privilegios de root.
Para un uso simple, existe un modo no privilegiado denominado user mode network que nos brinda un servicio básico de red.
Para que puede servirnos un sistema emulado?
1-Necesidad de ejecutar cierta aplicación por ejemplo los malditos programas de la AFIP que no hay versión mas que para windows y se torna imposible correrlo atraves de las APIS de WINE por ejemplo.
2-Hacer pruebas sobre un sistema emulado sin romper el real.
3-Ejecutar liveCDs sin salir del sistema opertativo actual.
4-Sentirnos superiores frente amigos o conocidos.
Porque Qemu y no otro sistema?
Porque vamos a tener las siguientes ventajas:
1-Está licenciado en parte con la LGPL y la GPL de GNU.
2-Mejoras y actualizaciones frecuentes
3-Multiplataforma por lo que la maquina host puede ser Windows, *nix, *BSD o MAC.
4-Menor consumo de memoria por parte del emulador y mayor rendimiento al no poseer interfaz gráfica.
5-Diferentes tipos de Sistemas completos emulados con diferentes sistemas operativos que lo ponen por encima de productos comerciales
La única desventaja que le veo es la de no poseer interfaz gráfica como su contraparte comercial VmWare ya que los newbies se van a volver un poco locos con la cantidad de parámetros que tiene.
Armando una imagen:
Lo primero que vamos hacer es preparar un disco virtual para poder alojar el sistema invitado. Para ello vamos a utilizar el comando qemu-img. veamos un ejemplo grafico:
qemu-img create win95.img 2GB
con el siguiente comando lo que acabamos de crear es un disco de 2GB con formato raw que es el que toma por defecto.
Qemu soporta los siguientes formatos de imagen de disco:
raw: es el formato por defecto además este formato se puede portado a otros emuladores
Qcow: es el formato de Qemu, se lo utiliza para tener imágenes mas pequeñas. Es util para los sistemas Windows.
Cow: Este tipo de imagen tiene la característica que se puede ampliar en caso de ser necesario. No es compatible con sistemas win32.
Vmdk: Compatible con Vmware 3 y 4. Por lo que podremos utilizar imágenes generados por dicho emulador.
cloop: útil en el caso de utilizar CDROMs comprimidos como el caso de Knoppix.
Supongamos que tenemos el sistema operativo en cd y lo queremos instalar en el disco recién generado, entonces deberíamos ejecutar lo siguiente:
qemu -boot d win95.img -cdrom /dev/cdrom -m 64
De esta manera le decimos a qemu que es una maquina estándar con 64MB RAM y que debe bootear de la unidad de cdrom y que el disco rígido virtual es win95.img. A partir de aquí debemos seguir las instrucciones del nefasto sistema operativo windows 95 que estamos instalando hasta finalizar y retirar el cdrom.
Para poder ejecutar el sistema operativo guest debemos hacer lo siguiente:
qemu win95.img -m 64
Con esto obtendríamos al cabo de unos minutos nuestro sistema operativo invitado corriendo en una pc virtual estándar con 64MB RAM en todo su explendor en una ventana.
Ahora vamos a probar un par de cosas mas complejas, por ejemplo habilitar el sonido (sound Blaster 16bits) , la de red y que tome la hora local del sistema.
qemu -boot c -hda win95.img -net nic -net user soundhw sb16 -m 64 -localtime
Acelerando el sistema:
Puede suceder también que el sistema emulado funcione lento, para ello existe un modulo que acelera significativamente el sistema invitado. Kqemu, que lo pueden bajar de la siguiente dirección http://fabrice.bellard.free.fr/qemu/download.html. Recuerden que deben compilar el modulo para que funcione. Una vez compilado pueden pasar el parámetro de la siguiente forma:
qemu -boot c -hda win95.img -net nic -net user -soundhw sb16 -m 64 -kernel-kqemu
De esta forma notaremos un mayor rendimiento y menor uso del procesador.
Otro truco interesante es poder bootear una imagen iso sin necesidad de grabarla a CD, para ello usamos el parámetro -cdrom.
Por ejemplo:
qemu -cdrom liveCD.iso -m 256 -boot d
Accediendo a información del equipo Host:
Puede que tengamos la necesidad de tener algún directorio compartido para poder ser accedido desde el sistema emulado invitado. Para ello utilizamos el parámetro -smb
Por ejemplo:
qemu -smb $HOME/share win2k.img
recuerden editar en el sistema invitado C:\WINDOWS\LMHOSTS (para windows 9x/Me) o C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS (Windows NT/2000/XP)y agregar el siguiente parámetro:
10.0.2.4 smbserver
En windows vayan por inicio, buscar, equipos, escriban “smbserver” sin las comillas y le dan buscar. Cuando encuentre smbserver le dan doble clic y aparecerá qemu. Luego clic derecho, conectar unidad de red, elijen una letra, le dan aceptar y listo!. Ya tenemos mapeado la unidad de red.
Recuerden que en el sistema host debe estar arrancado el servidor samba y tener shareado algun directorio.
A veces necesitamos montar una imagen para hacer alguna modificación o agregar información, el método que encontré es el siguiente, tengan en cuenta que solamente sirve para el formato raw.
mount -oloop,offset=sector_size*partition_start -t vfat nombre_imagen.img
/mnt
sector_size generalmente es 512 y parition_start es 63. Para comprobar estos valores correr el siguiente comando:
fdisk -lu nombre_imagen.img
Armando estructuras de redes virtuales complejas:
Una de las posibilidades que ya comente al principio es la de simular redes con un grado de complejidad que otros emuladores no pueden.
Vamos a un ejemplo gráfico:
Supongamos que queremos armar una red entre dos sistemas guest:
El método que voy a utilizar es TCP y socket.
El sistema 1 es un Puppy Linux y el sistema 2 es un DSL (Damm Small Linux).
ahora vamos a ejecutar dos instancias de qemu
qemu -cdrom puppy.iso -m 64 -net nic -net socket,listen=localhost:1234
qemu -cdrom dsl.iso -m 128 -net nic,macaddr=52:54:00:12:34:57 -net socket,connect=localhost:1234
Como podrán ver la primera instancia se define la opción listen en el puerto 1234 y la segunda instancia la opción connect al mismo puerto. En el segundo caso también definimos una macaddress para evitar problemas con la primera placa de red.
Ahora basta configurar ambos sistemas virtuales para que se vean:
Puppy>ifconfig eth0 10.0.2.16
DSL>ifconfig eth0 10.0.2.17
A partir de ahora se podra hacer entre ambas maquinas: ping, telnet, ssh, etc.
También se podría haber hecho lo mismo pero en vez de utilizar TCP y Sockets, por UDP.
Por ejemplo:
qemu -cdrom puppy.iso -m 64 -net nic,macaddr=52:54:00:12:34:56 -net socket,mcast=230.0.0.1:1234
qemu -cdrom dsl.iso -m 128 -net nic,macaddr=52:54:00:12:34:57 -net socket,mcast=230.0.0.1:1234
Luego configuramos igual que el caso anterior ambas placas de red.
La ventaja de usar UDP es que no debemos preocuparnos si tenemos varias maquinas conectadas y una de ellas se cae.
En cambio al utilizar TCP y sockets se pierde la comunicación entre las maquinas si una de ellas se cae.
Pueden armar VLANs e intercontectarlas, darle salida a internet a traves del equipo host, etc. El limite es la imaginación.
Si desean mayor información o bajar la ultima versión disponible para compilar en su distro favorita accedan al siguiente link:
http://fabrice.bellard.free.fr/qemu/
Asi que si alguien les dice que Vmware es mejor, ya saben que contestar.
ESTE TEXTO SE PUBLICA BAJO LICENCIA CREATIVE COMMONS BY-NC-SA 2.5 AR.
Por lo tanto, usted es libre de: 1) Copiarlo, distribuirlo y exhibirlo. 2) Hacer obras derivadas. Bajo las siguientes condiciones: 1) Debe dar atribución mencionando el nombre del autor y del LUG Zona Norte. En caso de las notas que no llevan firma, mencionar sólo el nombre del LUG.
2) Usted no puede usar esta obra con fines comerciales. 3) Si usted altera, transforma, o crea sobre este texto, sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta.
Más detalles y texto legal de la licencia en: http://creativecommons.org/licenses/by-nc-sa/2.5/ar

#1 by FedeTheGreat on 16/11/2006 - 9:17
Yo cuando probe ELive venia con el Qemu laucher que me permitio instalar varios SO diferentes, loq ue nunca logre averiguar fue como Bootearlos luego de instalados…
Desde lInea de comandos como haces para indicarle el directorio donde tiene que crear la maquina virtual?
#2 by sechole on 16/11/2006 - 14:14
Fede, segui el documento ahi lo explico.
Para bootear la imagen generada es facil, desde una Shell:
qemu nombre_imagen.img
Estas confundiendo maquina virtual con el disco virtual.
Desde linea de comando para generar una imagen tenes que usar el comando qemu-img como explique.
Si queres generarlo en otro lado simplemente dale la ruta sin los corchetes:
qemu-img create [/ruta/imagen.img] [capacidad en MB o GB]
Lo normal es que tengas la imagen en tu HOME.
Saludos
#3 by FedeTheGreat on 16/11/2006 - 22:48
Bunisimo ahora me pongo a probar! gracias!
#4 by FedeTheGreat on 16/11/2006 - 23:04
Problema, cree la imagen sin problema, pero a la hora de empezar la instalacion qemu -boot d Ubuntu.img /dev/cdrom -m 200
me dice enla ventana de qemu:
FATAL: could not read the boot disk
#5 by FedeTheGreat on 16/11/2006 - 23:27
Pude bootear una imagen iso peor no se como hacer uqe me reconozca un disco virtual o maquina virtual para instalar dicho SO contenido enla iso en esta maquina.
qemu -cdrom deli-0.7.1.iso -m 256 -boot d
#6 by sechole on 17/11/2006 - 0:37
Fede fijate que pusiste lo siguiente:
qemu -cdrom deli-0.7.1.iso -m 256 -boot d
Te falto poner el disco virtual por ejemplo:
qemu -hda deli.img -cdrom deli-0.7.1.iso -m 256 -boot d
De esa manera le decis que el primer disco rigido (hda) es deli.img donde se va a instalar el sistema.
Con respecto al error que te dio al tratar de instalar ubuntu:
proba de la siguiente manera
qemu -hda Ubuntu.img -cdrom /dev/cdrom -m 200
Si aun asi te sigue dando error:
1- El cd booteable esta mal
2- Tenes seteado el automount en el sistema host, proba de deshabilitarlo.
Saludos
#7 by FedeTheGreat on 17/11/2006 - 7:42
Gracias ahora ya estoy instalando deli! a ver que onda!
#8 by FedeTheGreat on 17/11/2006 - 20:26
Estoy Instalando de maras Ubuntu Edgy, muy bueno el tutoria y re simple!
y qemu no me come nada de recursos.
#9 by granec on 06/07/2007 - 9:34
A mi lo que más me interesaría, en principio, de un emulador como Qemu es que permita correr los programas de la AFIP (SIAP y sus módulos) bajo Linux o FreeBSD (más que nada porque es lo que usa ahora). Mientras esto no se logre, Linux quedará en segundo plano en Argentina.
Así que, si sabés la forma de hacer funcar las porquerías de la AFIP, te agradecería mucho que lo escribas en otro post o me envíes un email.
#10 by sechole on 09/07/2007 - 21:44
granec, que tiene que ver los programas de la AFIP con el éxito de Linux?
El tema de la AFIP es algo aparte que esta ligado a una “licitación” de cierta empresa que trabaja con versiones viejas de Visual Basic.
Llama al 0800 y preguntales si funciona en Windows Vista.
La respuesta es NO y que tampoco lo van a soportar.
Asi que también las versiones futuras de Windows van a quedar en segundo plano.
El futuro son los sistemas multiplataforma.
El problema es que hasta que no venza el contrato actual, la AFIP no va a poder hacer nada. Ya que no pueden romper el contrato actual asi porque si.
Me llegaron noticias que se esta pensando en el SIAP 3.0 que va a ser multiusuario y via web independientemente del sistema operativo, como debe ser.
Hay gente que logro hacerlo funcionar con las versiones nuevas de WINE.
http://www.preguntaslinux.com.ar/showthread.php?tid=3311
http://www.lugmen.org.ar/pipermail/lug-list/2000-December/007187.html
http://www.proposicion.org.ar/lurker/message/20060110.220438.e3076f31.es.html
Yo todavía no me puse pero pronto lo hare ya que mi hermano es Contador y estoy planeando migrar la maquina de él a Linux.
Te cuento lo que podes hacer.
Proba con algun soft que empaquete para hacer deploys en varias máquinas, como winoffer. Generalmente lo que hace este tipo de softs es armar un directorio con todo descompactado, las entradas de la registry en un archivo .reg y un archivo .vbs que es el script instalador que se utiliza con winup.
Lo importante es ver que archivo copia a cada directorio y prestar atención al .reg
Luego haces la instalación con wine en tu Linux o FreeBSD, importas el .reg y copias las dlls faltantes revisando el esqueleto de directorios y archivos que te armo el winoffer.
Calculo que de esa manera vas a poder correr al menos los principales modulos del sistema.
Saludos
#11 by Leo on 11/03/2008 - 20:02
Hola, estoy incursionando con qemu por que necesito correr os2 warp 3, el tema es que bootea de un diskette, estuve utilizando el quemu manager desde win y nada, como deberia armar la linea de comando desde la consola?.
Muchas gracias.