# Titulo: Compilacion/Instalacion/ de QEMU-0.9.0 + kqemu-1.3.0pre11 en Linux. # Fecha: Marzo 18 * 2007 # Objetivo: Documentar una referencia sobre Compilar/Instalar QEMU, KQEMU siendo asi # independiente de cada distribucion sea cual fuese. # Se admite toda copia, modificacion o aporte a este documento. Introduccion...y un par de cosas mas.. Antes que nada un saludo a usted lector. Uno de los objetivos de este documento es dejar documentado de una vez por todas como compilar sin problemas qemu y kqemu. El primer problema con que me encontre en muchos casos es que los docs sobre como instalar/usar qemu eran dependientes de la distribucion, debian, slack, suse, rhat, gentoo, pues que bien felicidades a los usuarios de esas distros, dado mi caso que no uso ninguna de ellas, sino que me construi una propia basada principalmente en el Proyecto "Linux From Scratch" por lo que no uso un package management como apt, yum, rpm, etc.. sino que compilo las aplicaciones, eso si puedo asegurar que van mas rapido ya que uso CXXFLAGS y CFLAGS para pentium4 y optimizacion del size de los binarios, en fin, al punto, lo que trato de decir es que compilar los programas da una ventaja muy sustanciosa y que nos pone un paso por delante de los precompilados, mas rendimiento por encima de todo, y lo mas importante lo que aprendemos con ello, es por eso que esta mini guia es aplicable a todas las distros actuales de Linux y como no, tambien una guia en muchos aspectos para otros sistemas. Primero permitanme mencionarles que hasta la fecha (ver arriba) la ultima version de qemu es la 0.9.0 y de kqemu 1.3.0pre11 por lo que si se sienten motivados y existe esa curiosidad vamos a lo que importa y a pasar un buen rato. Deben obtener estos files: http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz -> 1.8 M http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz -> 157 K Hay una alternativa al final del documento para los que no puedan compilar pero con la pega de que sin capa de aceleracion kqemu (emulacion mas lenta). Comenzando. Si ya tienes qemu no tienes que desinstalar el otro, el prefijo de instalacion sera /usr/local/qemu0.9 que despues ajustaremos para que el shell pueda encontrar los binarios que alli se alojen. Nota Sobre el Kernel. Esta guia la estoy escribiendo sobre el kernel 2.6.20.2 el cual hasta la fecha es el ultimo kernel, pero eso no es lo mas importante sino que a partir del 2.6.20 el soporte de virtualizacion se ha integrado para plataformas AMD e INTEL. Si tienes una de estas series del kernel y no la tienes activado lo cual beneficia claro esta entonces activela, recuerde que cuando se habla de qemu se esta hablando de virtualizacion, puedes activarla en la configuracion del kernel siguiente: Device Drivers -> Virtualizacion -> Y se presenta esto. Kernel-based Virtual Machine (KVM) support KVM for Intel processors support < > KVM for AMD processors support Si no lo tienen activado activenlo recompilen el kernel y reinicien con el nuevo kernel, este paso no es requerido pero ayuda tener un kernel con KVM a la hora de trabajar con maquinas virtuales. Version de GCC. Qemu es bien conocido por no compilar sobre gcc-4.x.x por lo que es requerido tener una version 3.x.x en el sistema para que puedan finalizar esta guia. En mi caso tengo 2 versiones gcc-4.1.2 y 3.3.6 claro esta con rutas diferentes, el compilador que uso por defecto es el gcc4 en un prefix comun, y el gcc3 en /opt/gcc-3.3.6, para que las detecciones del script configure me detecte el gcc3 en vez del gcc4 mi variable PATH luce asi PATH="/opt/gcc-3.3.6/bin:/usr/sbin:/sbin:/bin:/usr/bin:/usr/local/bin:/usr/local/lib:/usr/local/sbin/:/usr/X11/bin:/usr/X11/lib:/usr/X11/lib/pkgconfig:/opt/qt/bin:/opt/kde-3.5.6/bin:/usr/local/apache2/bin:/usr/local/MPLAYER:/usr/local/gdb/bin" Vean como antepongo antes que nada la ruta al gcc3, esto da como consecuencia que cualquier script configure u otros detecten que el compilador por defecto es gcc3 con lo cual van a guardar esa informacion en los makefiles por ejemplo como CC=/opt/gcc-3.3.6/bin/gcc Ya sabes, 'debes' compilar qemu con gcc3. Compilando qemu. Me cuesta un poco a veces eliminar los sources de los programas que compilo por eso siempre los pongo en /tmp para que el script de limpieza del sistema se encargue de hacerlo por mi. (que cual es el script de limpieza?:::: /etc/rc.d/init.d/cleanfs) esto es en mi caso, muy probablemente en tu disro no se llame asi y seguramente este ubicado en /etc/init.d/. Ejecutemos.. cd /tmp tar xzvf qemu-0.9.0.tar.gz cd qemu-0.9.0 ./configure --prefix=/usr/local/qemu0.9 --enable-alsa make "Descanse un poco" make install NOTA: agregue '--enable-alsa' si se esta usando alsa como sistema de sonido esto es solo compatible con Linux y distribuciones que usen alsa y no el ya casi obsoleto Open Sound System 'oss', por lo que la compilacion en un sistema con oss daria como resultado en un error ya que se intentaria compilar contra las librerias libasound de alsa que no existen. En mi caso qemu se ha compilado contra alsa y tambien contra libSDL entre otras que son basicas y generalmente libc las pone. Miren. webdeveloper@root->/tmp/qemu-0.9.0$ldd /usr/local/qemu0.9/bin/qemu linux-gate.so.1 => (0xffffe000) libm.so.6 => /lib/libm.so.6 (0xb7eef000) libz.so.1 => /lib/libz.so.1 (0xb7edb000) # libasound.so.2 => /usr/lib/libasound.so.2 (0xb7e1d000) # libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0 (0xb7d8c000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7d74000) libutil.so.1 => /lib/libutil.so.1 (0xb7d70000) librt.so.1 => /lib/librt.so.1 (0xb7d67000) libc.so.6 => /lib/libc.so.6 (0xb7c3e000) /lib/ld-linux.so.2 (0xb7f27000) libdl.so.2 => /lib/libdl.so.2 (0xb7c3a000) Si todo ha ido bien vamos a agregar al PATH la nueva direccion para que el shell pueda encontrar el binario de qemu y qemu-img cuando lo escribamos en el shell abra con un editor el ~./bashrc o /etc/profile y modifiquela debe quedar algo asi. PATH="/opt/gcc-3.3.6/bin:/usr/sbin:/sbin:/bin:/usr/bin:/usr/local/bin:/usr/local/lib:/usr/local/sbin/:/usr/X11/bin:/usr/X11/lib:/usr/X11/lib/pkgconfig:/opt/qt/bin:/opt/kde-3.5.6/bin:/usr/local/apache2/bin:/usr/local/MPLAYER:/usr/local/gdb/bin:/usr/local/qemu0.9/bin" Notese que he agregado otra ruta de busqueda al final aunque si ya tiene una version de qemu instalada agregelo al inicio del path para que utilize la nueva version. Haciendo finalizado esto ejecute source ~/.bashrc o source /etc/profile En dependencia del cual ha editado, esto es usado para recargar y actualizar las variables de entorno. Pruebe a escribir qemu la salida debe ser algo mas largo que esto. #webdeveloper@root->/tmp/qemu-0.9.0$qemu #QEMU PC emulator version 0.9.0, Copyright (c) 2003-2007 Fabrice Bellard #usage: qemu [options] [disk_image] # #'disk_image' is a raw hard image image for IDE hard disk 0 #Standard options: #-M machine select emulated machine (-M ? for list) #-fda/-fdb file use 'file' as floppy disk 0/1 image #..... A medio camino. Todo esta listo y si quisieramos podriamos comenzar a montar una maquina virtual pero dejenme decirles 'STOP', vamos a hacer las cosas como debe ser al proporcionarle a qemu una capa de aceleracion que acelerara en un 39% su velocidad segun he podido medir. Nota sobre las cabeceras del nucleo. Para compilar kqemu necesitaras las cabeceras del nucleo, en mi caso las cabecera del 2.6.20.2 las ubique en /kernelsource/linux-2.6.20.2/. Si se intenta compilar kqemu con un arbol del kernel previamente limpiado con 'make mrproper' la compilacion falla debido a que no encuentra ficheros con symbolos entre otros ficheros necesarios para la compilacion, asi que asegurate de por lo menos ejecutar un make menuconfig y salvar la configuracion y hacer por lo menos un 'make' para que se creen los ficheros necesarios, no importa que no compiles el kernel completamente como tal. Compilando kqemu. regresamos un nivel detras. cd .. tar xzvf kqemu-1.3.0pre11.tar.gz cd kqemu-1.3.0pre11 ./configure --help nos muestra esto: #webdeveloper@root->/tmp/kqemu-1.3.0pre11$./configure --help #Usage: configure [options] #Options: [defaults in brackets after descriptions] # #Standard options: # --help print this message # --prefix=PREFIX install in PREFIX [] # --kernel-path=PATH set the kernel path (configure probes it) # #Advanced options (experts only): # --source-path=PATH path of source code [/tmp/qemu-fast/kqemu-1.3.0pre11] # --cross-prefix=PREFIX use PREFIX for compile tools [] # --cc=CC use C compiler CC [gcc] # --host-cc=CC use C compiler CC [gcc] # --make=MAKE use specified make [make] # Para hacer las cosas con mas seguridad y mas exactamente vamos a ejecutar en base a donde tengas los headers del kernel el siguiente comando ajustelo para su caso y continue. ./configure --kernel-path=/kernelsource/linux-2.6.20.2 make make install El proceso lleva unos segundos si todo ha ido bien podemos cargar el modulo. modprobe kqemu. Un lsmod | grep kqemu deberia mostrarnos algo como: kqemu 123560 1 Como sea puede hacer una busqueda para comnprobar que el modulo esta en su lugar find /lib/modules/$(uname -r) -name kqemu.ko La salida debe ser algo parecida a esto: /lib/modules/2.6.20.2/misc/kqemu.ko Todo perfecto. Hasta aqui se ha cumplido el objetivo fundamental de esta guia, de todas formas voy a poner referencias de como crear espacio para una maquina virtual y cargar una en base a una imagen .iso. Creando el espacio que sera usado como disco duro virtual. Bien, mis imagenes virtuales las pongo en /mnt/tmp_filesystem usted alojelas donde desee. Para crear 2 GBs de disco virtual ejecutemos. qemu-img create virtual.img 2G Creo que no lleva mucha explicacion.... estoy creando el fichero 'virtual.img' de 2 Gigas con el parametro create. Vamos a cargar algo para probar... qemu -m 100 -cdrom gparted-livecd-0.2.5-3.iso -boot d virtual.img -kernel-kqemu -93 -> Qemu utilizara 100 megas de memoria fisica para el. -cdrom gparted-livecd-0.2.5-3.iso -> Aqui estoy cargando ese iso como si estuviera en el cdrom -boot -> que lo bootee desde un cd, disco, floppy, etc. d -> indica el 'device' voy a utilizar el fichero 'virtual.img' creado como dispositivo. -kernel-kqemu -> Con soporte para el acelerador kqemu NOTA: Al haber cargado el modulo kqemu se crea su contraparte en /dev/ osea /dev/kqemu La memoria a utilizar es variable todo depende de su sistema, aunque si tiene poca memoria e intenta arrancar qemu y ve un mensaje que el sistema de ficheros shm no tiene suficiente espacio puede hacer lo siguiente. umount /dev/shm mount -t tmpfs -o size=109m none /dev/shm O los megas que desee siempre teniendo en cuenta que se recomienda la mitad de la memoria fisica o algo mas, todo depende Aqui les paso la url de un screenshot que podran visualizar en mi sistema con qemu+kqemu corriendo el livecd de gparted. URL_SCREENSHOT ALTERNATIVA: Si el proceso de compilacion no se ha podido realizar por cualquier causa puede bajarse binarios de qemu ya compilados para Linux-X86 en esta url: http://fabrice.bellard.free.fr/qemu/qemu-0.9.0-i386.tar.gz Debe copiarla/descomprimirla en / la unica pega es que la virtualizacion decaera en su rendimiento ya que kqemu no existe, como sea, puede emular. Aunque cuando inicie qemu se queje de que /dev/kqemu no existe puede suprimir el mensaje pasando a qemu el parametro -no-kqemu. Espero que les haya sido de utilidad. Que la buena suerte (y la fuerza) siempre este con ustedes. END: -olr -> orestesleal13022@cha.jovenclub.cu Este fichero se encuentra albergado en http://www.lawebdelprogramador.com