lunes, 12 de mayo de 2008

Poniendo a andar WinXP bajo entorno QEMU en FreeBSD 7.0


Debido a que no habia podido conseguir instalar IE4Linux bajo FreeBSD 7.0, me tome a la tarea de buscar la manera de poder correrlo y opte por la ultima instancia que era emularlo o virtualizarlo. Como sigo la metodologia de ports, instale y utilice QEMU para poder virtualizar una instancia de WinXP y poder asi correr Internet Explorer 7 bajo esa instancia.
Estos fueron los pasos para la creacion de la imagen, instalacion y arranque de l sistema operativo. Es imprescindible que qemu soporte aceleracion instalando el modulo kqemu. Por lo pronto lo cargamos con: kldload aio
Si el port de qemu no soporta la aceleracion kqemu entonces realice:
# cd /usr/ports/emulator/qemu
# make -DWITH_KQEMU
# kldload aio
# make install clean
o
# make deinstall
# make reinstall clean (si estaba instalado previamente)


1. crear carpeta local ~/windows y acceder a ella (cd ~/windows)
2.
$ qemu-img create -f qcow2 c.qcow 4G
Es importante utilizar el formato de archivo qcow2 (version 2) ya ke el formato qcow legacy no lo soporta y puede aparecer un error como este al intentar iniciar qemu para instalar XP en este caso desde un cd-rom:
$ qemu -cdrom /dev/acd0 -hda c.qcow -m 256 -boot d
qemu: could not open disk image /dev/acd0
aparentemente no reconoce la imagen del archivo generado por qemu-img.

3. Habilitacion manual del modo bridge para interfaces de red en FreeBSD 7.x:
# ifconfig tap create
# ifconfig bridge create
# ifconfig bridge0 addm tap0 addm rl0 up

donde en este caso, rl0 seria la interfaz por la cual fisicamente esta conectada a internet.

4. Instalacion de WinXP bajo qemu desde cdrom:
# qemu -cdrom /dev/acd0 -hda c.qcow -m 256 -net nic -net tap -boot d
La ruta correspondiente al cdrom es relativo a la ruta asignada en el inicio del nucleo.

5. Suspender la maquina virtual y ...:
crear el fichero /etc/qemu-ifup con lo siguiente:
#!/bin/sh
ifconfig ${1} 0.0.0.0

aplicarle atributos:
# chmod 755 /etc/qemu-ifup

6. Definir permiso al dispositivo default que genera qemu cuando se invoca el bridge con el parametro -net nic -net tap

Para esto, hay que agregar en /etc/devfs.conf:
own     tap9    user:group
Esto hara que en modo de arranque del sistema el dispositivo se configure de esta manera para que qemu pueda utilizarlo.

7. Proceso de arranque para que QEMU pueda ejecutar en la maquina virtual, la version de WinXP que se instalo con soporte al menos de la NIC ya virtualizada enlazandose al bridge

a. en /boot/loader.conf agregar:

aio_load="YES" #needed for qemu
kqemu_load="YES" #needed for qemu
if_bridge_load="YES" #needed for qemu
if_tap_load="YES" #needed for qemu
kern.hz="1024" #needed for qemu


b. en /etc/rc.conf agregar:

cloned_interfaces="bridge0"
ifconfig_rl0="up promisc -rxcsum -txcsum"
ifconfig_bridge0="addm rl0 up"
autobridge_interfaces="bridge0"
autobridge_bridge0="tap*"


8. Reiniciar maquina.

9. Si todo sale bien sin contratiempos ejecutar:
qemu -localtime -hda c.qcow -m 512 -net nic,vlan=0\
tap,vlan=0,ifname=tap9,script=/etc/./qemu-ifup -boot c
Gracias a la recopilacion que realice mas organizada de algunos comos en la red, toco contemplar y empezar a verificar como sería la manera de que la linea de comando me permitiera ejecutar el sistema operativo y ke al menos por ahora me reconociese el controlador de red generico en XP.

Referencias:
http://people.freebsd.org/~maho/qemu/qemu.html
http://blog.xwings.net/?p=48

No hay comentarios :