Compilación, instalación y uso de QEMU y kqemu en Ubuntu GNU/Linux

QEMU es un conocido emulador que permite ejecutar otros sistemas (como Hasefroch u otras distribuciones de GNU/Linux) en una ventana. Desafortunadamente, el sistema emulado funcionará unas diez veces más lento que una instalación nativa. kqemu es un acelerador de QEMU, un módulo para el núcleo escrito por el mismo autor de QEMU, que acelera notablemente el funcionamiento de éste (multiplica la velocidad por cinco) si emulamos un x86 en un x86 (pues qemu permite ejecutar binarios compilados para una arquitectura sobre otra distinta).

Debe advertirse que, por el momento, kqemu es gratuito, pero no libre (el autor está dispuesto a liberarlo si alguien le da dinero para compensar el tiempo invertido en él):

As a supporter of open source, the author accepts to open source the QEMU Accelerator Technology provided a company invests enough money to support the project and to recompense the author from the potential loss of revenue. Interested companies can look at the roadmap and make suggestions to the author.

(Cita de http://fabrice.bellard.free.fr/qemu/qemu-accel.html)

Ya se está desarrollando un acelerador libre, llamado qvm86, pero parece estar todavía en estado pre-alpha y no lo he probado.

Algunas alternativas a QEMU son Xen y Bochs (quizás también OpenVZ, que todavía no he mirado, pero me parece que es más comparable a Linux-VServer o User Mode Linux (UML)). Como opción privativa estaría VMWare.

Instalacion de QEMU

Para emplear el módulo acelerador no podemos instalar QEMU desde el paquete .deb binario, sino que debemos compilarlo todo nosotros mismos. Empezamos instalando las dependencias y programas necesarios para compilar:
aptitude install libsdl1.2-dev zlib1g-dev linux-headers-`uname -r` build-esential checkinstall nasm vgabios bochsbios

A continuación descargamos el código fuente de la última versión de QEMU de

http://fabrice.bellard.free.fr/qemu/download.html

y lo descomprimimos en /usr/local/src.

Parece ser que QEMU da problemas cuando se compila con gcc 4.x, así que debe compilarse con gcc 3.x:
# cd /usr/local/src/qemu-0.8.2
# ./configure --cc=gcc-3.4 --host-cc=gcc-3.4
# make
# checkinstall (para instalar usando un paquete debian, o bien make install)

Para evitar que nuestro paquete pueda ser sobreescrito al hacer un aptitude upgrade perdiendo así la aceleración, bloqueamos el paquete con
# echo "qemu hold" | dpkg --set-selections

Instalación de kqemu

Ahora descargamos de la misma página el tarball del módulo acelerador de QEMU (kqemu), y lo descomprimimos. El módulo kqemu debe compilarse con la misma versión del compilador que el núcleo que usamos (se puede ver con cat /proc/version), y para el mismo procesador, u obtendremos un error similar a
FATAL: Error inserting kqemu (/lib/modules/2.6.15-26-686/misc/kqemu.ko): Invalid module format
En nuestro caso, observamos que el núcleo ha sido compilado con la versión de gcc que usa por omisión el sistema, así que no nos preocupamos de ello.

Pensaba que con las cabeceras del núcleo linux sería suficiente, pero me encontré con este error:
# ./configure
Could not find kernel includes in /lib/modules or /usr/src/linux - cannot build the kqemu module
Source path /usr/local/src/kqemu-1.3.0pre9
C compiler gcc
Host C compiler gcc
make make
host CPU i386
./configure: line 344: test: =: se esperaba operador unario

Así que instalé el paquete del código fuente del núcleo, lo descomprimí, creé un enlace simbólico «linux» al directorio del código fuente, y copié en él el fichero de configuración.
# aptitude install linux-source-2.6.15
# cd /usr/src/
# tar jxvf linux-source-2.6.15.tar.bz2
# ln -s linux-source-2.6.15 linux
# cp /boot/config-2.6.15-26-686 linux/.config

Pero entonces pasé a encontrarme con este otro error al intentar hacer el make:
WARNING: Symbol version dump /usr/src/linux-source-2.6.15/Module.symvers
is missing; modules will have no dependencies and modversions.

y otros indicando que no encontraba autoconf.h, etc.

Finalmente lo resolví con
# cd /usr/src/linux
# make

Si quisiéramos aprovechar para personalizar nuestro núcleo, sería buena idea editar el Makefile antes de compilar, y cambiar la variable EXTRAVERSION.

Finalmente pude ya compilar kqemu:
# cd /usr/local/src/kqemu-1.3.0pre9/
# ./configure
# make

Durante el make aparece una advertencia:
Warning: could not find /usr/local/src/kqemu-1.3.0pre9/.kqemu-mod.o.cmd for /usr/local/src/kqemu-1.3.0pre9/kqemu-mod.o
pero podemos prescindir de ella.

Primero intenté instalarlo usando un paquete debian, pero me daba el error
dpkg: error al procesar /usr/local/src/kqemu-1.3.0pre9/kqemu_1.3.0pre9-1_i386.deb (--install):
intentando sobreescribir `/lib/modules/2.6.15-25-686/modules.alias', que está también en el paquete linux-image-2.6.15-25-686
dpkg-deb: el subproceso paste fue terminado por la señal (Tubería rota)

así que finalmente lo he instalado con
# cp /lib/modules/2.6.15-26-686/modules.alias /lib/modules/2.6.15-26-686/modules.alias.bak
# make install

Para cargar el módulo normalmente ejecutaríamos
# modprobe kqemu
pero como Ubuntu utiliza udev, lo hacemos con
# modprobe kqemu major=0
para que se cree el dispositivo /dev/kqemu (por supuesto también podríamos crearlo con # mknod /dev/kqemu c 250 0).

También podemos utilizar modconf para que se cargue siempre automáticamente (el módulo está en la sección misc).

Ahora debemos dar permisos al dispositivo kqemu para que todos los usuarios puedan acceder a él:
# chmod 666 /dev/kqemu
Para que udev ponga automáticamente los permisos adecuados en el arranque, editamos el fichero /etc/udev/rules.d/40-permissions.rules añadiendo las líneas
# Permisos para /dev/kqemu
KERNEL=="kqemu", MODE="0666"

Si no diésemos estos pasos, nos encontraríamos con este error al intentar usar QEMU:
Could not open '/dev/kqemu' - QEMU acceleration layer not activated
es decir, que a pesar de tener el módulo cargado, el acelerador no funcionaría.

Mientras estamos emulando algún sistema, para comprobar que el módulo acelerador está efectivamente en funcionamiento, pasamos al monitor de QEMU pulsando Ctrl-Alt-2, e introducimos la orden info kqemu. Deberíamos obtener algo así:
QEMU 0.8.2 monitor - type 'help' for more information
(qemu) info kqemu
kqemu support: enabled for user and kernel code
(qemu)

Para volver al sistema emulado pulsamos Ctrl-Alt-1

Al utilizar QEMU por primera vez me apareció esta curiosa advertencia:
Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal
error, but for better emulation accuracy either use a 2.6 host Linux kernel or
type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.

y la califico de curiosa porque sí que estoy usando un núcleo Linux 2.6… En fin, podemos hacer que se calle ejecutando esa orden.

Utilización de QEMU

Tras estudiar como instalar QEMU y el módulo acelerador kqemu en un sistema Ubuntu o Debian GNU/Linux, veamos ahora cómo usar las opciones básicas. Para más información, se puede consultar la documentación de QEMU.

Para probar la imagen ISO de una distribución en live-CD, ejecutaremos una orden similar a
$ qemu -boot d -m 224 -kernel-kqemu -cdrom gluz2_beta1.iso

La opción -boot d indica el dispositivo desde el que debe arrancar: disquete (a), disco duro (c) o CD-ROM (d).

La opción -m 224 indica cuanta memoria le asignamos a QEMU. Por omisión son 128 MB, pero si disponemos de más memoria libre, es recomendable asignarle más.
-kernel-kqemu es una nueva opción que habilita el modo de virtualización completa: tanto el código de usuario como el del núcleo invitado se ejecutan directamente en la CPU anfitriona (en el modo normal, sólo se ejecuta directamente el código de usuario, mientras que el código de núcleo es traducido dinámicamente por QEMU). Esto no funciona para todos los sistemas operativos invitados (sí la mayoría de los recientes, como GNU/Linux y Windows 2000/XP, aunque estos últimos no durante la instalación), y de momento sólo de 32 bits.

Y con la opción -cdrom gluz2_beta1.iso indicamos que la máquina virtual debe usar como unidad de CD-ROM ese fichero de imagen ISO.

Otra opción es -soundhw es1370, que habilita el sonido emulando una tarjeta con chip ENSONIQ AudioPCI ES1370 (como la SoundBlaster 128). A mí me da problemas, pero es posible que sea debido al hardware de mi máquina.

Si lo que necesitamos es poder usar dos sistemas operativos distintos simultáneamente, lo mejor es hacer una instalación en el disco duro. Para ello, empezamos creando una imagen de disco, que es un fichero que contendrá un sistema de ficheros con el sistema emulado, actuando como su disco duro

Esto se podría hacer con dd, pero normalmente lo haremos con la orden qemu-img, que admite varios formatos de imagen de disco:

raw
formato de imagen de disco en bruto (formato predeterminado). Este formato tiene la ventaja de ser sencillo y fácilmente exportable a los demás emuladores. Si nuestro sistema de ficheros admite agujeros (como ext2 y ext3), solamente se reservará espacio para los sectores escritos. Podemos conocer el tamaño real que usa la imagen con qemu-img info o ls -ls en sistemas de tipo Unix.
qcow
Formato de imagen de QEMU, el más versátil. Se usa para obtener imágenes más pequeñas en sistemas de ficheros que no admiten agujeros, como el de Windows, cifrado AES opcional y compresión basada en zlib.
cow
Formato de imagen Copy On Write de User Mode Linux. Antiguamente era el único formato de QEMU que podía crecer. Ahora se conserva solamente para mantener compatibilidad con las versiones anteriores. No funciona en Windows.
vmdk
Formato de imagen compatible con VMware 3 y 4.
cloop
Imagen Loop comprimido de GNU/Linux, útil para usar directamente imágenes de CD-ROM comprimidas, como la que usa Knoppix. Ubuntu usa squashfs en vez de cloop.

Si necesitásemos instalar uno de los sistemas de Hasecorp, podríamos ejecutar por ejemplo:
$ qemu-img create -f qcow winxp.img 10G
qcow es el formato recomendado para Hasefroch, winxp.img es el nombre del fichero de imagen, y 10G es el tamaño que le damos.

Para instalar el sistema en el fichero imagen, introducimos el CD-ROM de instalación y ejecutamos
$ qemu -boot d -m 224 -cdrom /dev/cdrom -hda winxp.img
Con la opción -hda indicamos que utilice como disco duro ese fichero de imagen.

Tras realizar la instalación, podremos arrancar el Hasefroch XP con
qemu -boot c -m 224 -hda winxp.img
Por omision arranca con la opción -net user, que proporciona una manera de usar la red. Sin embargo hay otra manera más fina de configurar la red, usando un dispositivo tun y el paquete bridge-utils (véase la documentación). Una cosa que me estaba volviendo loco: desde el sistema emulado, no podemos hacer ping a máquinas de Internet. Sin embargo, sí podemos navegar por la web, etc.

También es posible tener un directorio en el sistema anfitrión al que el Windows emulado pueda acceder por SMB de forma transparente (véase la documentación).

¿Llevas tiempo deseando echar un vistazo a FreeBSD, Plan 9 o Minix? En FreeOsZoo puedes descargar imágenes para QEMU de estos y otros sistemas, y así probarlos fácilmente.

6,807 Responses to “Compilación, instalación y uso de QEMU y kqemu en Ubuntu GNU/Linux”

  1. teskmon dice:

    Hace poco también me dispuse a probar QEMU con aceleración en mi Ubuntu y seguí las instrucciones de: http://www.ubuntu-es.org/node/15126

    Como puedes obervar no da tantos “problemas” en la instalación como tu receta.
    Lo único que cambiaría del howto del enlace es la solución de cambiar el enlace simbólico para que use la versión 3.4 del GCC (que me parece un poco burrada).

    Un saludo.

    PD: ¿Qué bien viene QEMU para probar LiveCDs sin tener que reiniciar, eh?

  2. zqgxxdxrff dice:

    GbKHDB ahzexgvhqutl, [url=http://ngccuxongghf.com/]ngccuxongghf[/url], [link=http://nnlkblflvdfl.com/]nnlkblflvdfl[/link], http://szpwprhiptto.com/

  3. ayidzqa dice:

    nh9fOz swaicuzijjgb, [url=http://czkkvgqnpxgm.com/]czkkvgqnpxgm[/url], [link=http://tnbtefinwzly.com/]tnbtefinwzly[/link], http://fbhwqjchupby.com/

  4. hydrolyze dice:

    I have ended up looking all over for this post. Luckily I discovered this on Google.

    DAPHNE

  5. AnnyGurl91 dice:

    i love the way you write ;)

  6. commandlink dice:

    prednisone 955 diet pill acomplia also called rimonaban 2021 cheap online aciphex oaodn

  7. nelly dice:

    cialis 103677 buy tramadol us pharmacies 12028 ambiencr 8DDD propecia 8P

  8. general dice:

    xanax prescriptions =PPP tramadol for dogs %-]]] phentermine lib acomplia oii

  9. tomfans dice:

    cialis nfbaw valium yhdail ambien cr 415280 buy propecia online %)

  10. tramadol online 339601 cheap cheap drug propecia tramadol 8-[[ order doxycycline 9859 generic ultram gfpirm

  11. angus dice:

    tramadol hqt propecia eoref aciphex cidtmn accutane jtsb

  12. tramadol online in florida =) doxycycline 5125 ambien and weight gain %-P purchase cialis 24863

  13. verzeichnis dice:

    lowest prices for tramadol online ewhmby accutane :-( (( order xanax :-] prednisone 8-))

  14. Pharme518 dice:

    Hello! kfaadkc interesting kfaadkc site!

  15. Pharmg321 dice:

    Very nice site! [url=http://ypxaieo.com/oooxvty/2.html]cheap cialis[/url]

  16. Pharme933 dice:

    Very nice site!

  17. nelly dice:

    auto insurance quotes 7664 auto insurance 4824 auto insurance 49666

  18. florin dice:

    health insurance tlulv car insurance 73972 carinsurance 804 auto insurance :]]

  19. Pharmd197 dice:

    Hello! cdfbfed interesting cdfbfed site!

  20. Pharmk4 dice:

    Very nice site! [url=http://oixypea.com/oxoxvtr/2.html]cheap cialis[/url]

  21. Pharmb853 dice:

    Very nice site!

  22. John Miller dice:

    E-Book geschrieben und blogge auch sehr viel aber dieser Blog-Artikel ist wirklich einer der besten

  23. lawmap dice:

    life insurance 550692 home insurance 5568 cheap life insurance 83949 home insurance 862

  24. nashira dice:

    cheap car insurance mjqrbd car insurance quotes :P PP cheap auto insurance %))) homeowners insurance :-)

  25. austin dice:

    life insurance =-P life insurance rntsnt homeowners insurance 300238

  26. tecktonik dice:

    car insurance quotes :O home insurance :O health insurance fjk

  27. cortisone dice:

    health insurance quotes 1354 health insurance quotes >:( life insurance 8D life insurance quotes 8-((

  28. Bao Badgero dice:

    Good BPO site to find projects.

  29. fontiette dice:

    http://smokefreearizona.us/hypnotherapy/chemical-names-of-the-vitamins.html chemical names of the vitamins vitamins made outside of u s acai berry benefit prednisone for government flores acai 3000

  30. http://imgwebsearch.com/34327/imgblog.cronopios.net/Fioricet/1_pharma9.png

    http://imgwebsearch.com/34327/imgblog.cronopios.net/Fioricet/2_pharma9.png

    http://imgwebsearch.com/34327/imgblog.cronopios.net/Fioricet/3_pharma9.png

    http://imgwebsearch.com/34327/imgblog.cronopios.net/Fioricet/4_pharma9.png

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    order cheap buy Fioricet online
    online buy Fioricet
    purchase generic Fioricet online
    buy Fioricet without rx
    cheapest place to order Fioricet online
    order Fioricet online cod
    order cheap order Fioricet online
    order Fioricet online cod
    purchase generic Fioricet online
    buy Fioricet online discount
    buy Fioricet fast delivery
    buy Fioricet cheap online us
    cheap Fioricet pills online
    price Fioricet
    buy Fioricet fast delivery
    purchase generic Fioricet online
    buy Fioricet fast delivery
    generic online buy Fioricet
    .
    .
    Purchase Fioricet Online
    .

    .
    Fioricet buy fedex
    buy Fioricet with saturday delivery
    discount Fioricet
    order Fioricet overnight
    online pharmacy Fioricet no prescription
    Fioricet with no prescriptions
    Fioricet no prescription cod
    Fioricet without a script
    overnight delivery of Fioricet
    cod shipping on Fioricet
    cheap Fioricet no prescription next day delivery
    how to buy Fioricet on line
    cheap Fioricet overnight saturday delivery
    Fioricet Overnight COD no prescription
    online Fioricet no prescription overnight
    online pharmacy Fioricet cod
    recommend where to buy Fioricet online
    buy drug Fioricet
    buy Fioricet cod next day fed ex
    Fioricet overseas
    Fioricet pay cod
    us Fioricet fedex
    ordering Fioricet online
    Fioricet and overnight
    no prescription Fioricet cash on delivery
    fioricet for cheap
    buy Fioricet overnight fedex
    Fioricet saturday
    Fioricet non prescription for next day delivery
    where to buy Fioricet no prescription no fees
    cheap Fioricet overnight delivery
    Fioricet fedex delivery
    Fioricet shipped COD on saturday delivery
    online Fioricet
    purchase Fioricet COD
    online pharmacies Fioricet saturday delivery
    generic Fioricet
    buy Fioricet rx
    order Fioricet overnight cod
    order Fioricet online
    Fioricet c.o.d overnight delivery
    online Fioricet cod pharmacy
    how to buy Fioricet online without a prescription
    get Fioricet over the counter
    Fioricet overnight delivery cheap
    Fioricet overnight delivery saturday
    next day delivery Fioricet with no script
    Fioricet orders cod
    Fioricet cod no prescription
    Fioricet cheap no membership

    Buy Fioricet Online

  31. rnjpbirwew dice:

    akznhsthxzjxryzplkcy, eilksfbrdw , [url=http://www.aclmjglpdc.com]rooptffpyh[/url], http://www.yrzwdclfwo.com eilksfbrdw

  32. zjqkkbgikocejimizsgc, Generic Levitra, tUlEjnT.

  33. forex bot dice:

    lkmxcyivixivaubnozhg, forex trading, msdVhts.

  34. Phentermine dice:

    nznddvcwfhuiwpasyqjy, Buy Phentermine, MqPMIem.

  35. Acai Berry dice:

    vnjqtappwnwexwovsgdk, Acai Berry, NcfyNgH.

  36. Buy Tramadol dice:

    qimffasyxkqpqrrymltt, car insurance quotes, VJQMbiO, Golf ridge, VadiGUU, Cialis, cnQWskP, Vicodin, nnRsUqS, Buy Ambien, VWJludF, Cheap Tramadol, wBboolj, Taylor made golf, EnyueMV, Butalbital, iamYBiP.

  37. tdthgdlmuuioxzfsomhi, Ambien, jjtWQVv, VigRX Plus, buxokXh, Propecia, KXwlaBR, Vicodin, SZwhqnB, Air Filter, iUwroBn, Outdoor Decor, nBSXmSJ, Valium, pJRGRJa, baby stroller, yhrZPXM.

  38. goth girls dice:

    ejgrfepyjcqpiimzbuze, Sex, pkcwYIQ, Porn, qBBoUui, gothic, bCRmstI, All nude celebrities, vlZvFNg, Digital music download, dGVxCnv, Reseller Hosting, mrqRMal.

  39. kjqiujxujwpaeqjhspcr, Buy Tramadol, NTGEznE.

  40. unxoxh dice:

    9UL4PR xzkhnvgexxkz, [url=http://fpyfscfqjson.com/]fpyfscfqjson[/url], [link=http://uuuhoggstkvn.com/]uuuhoggstkvn[/link], http://oerevlqzprjf.com/

  41. Cialis dice:

    nznbalvhcagfkiprdcny, Cialis coupons, bGlFPgZ.

Leave a Reply