martes, 15 de septiembre de 2009

Olive sobre Ubuntu... "No hay color"

Esta es la traducción de una guia disponible en ingles en el siguiente enlace Using QEMU with Olive to emulate Juniper Routers. Esta guia describe los pasos de instalacion sobre un sistema Linux. Yo personalmente la he verificado sobre un sistema con Ubuntu 8.04 Hardy, sobre el actualmente ejecuto sin problemas una instancia con ocho routers virtuales sobre los que corren RIP, OSPF y BGP.

Instalar QEMU

Dependencias

Antes de compilar o ejecutar QEMU deben estar instaladas las siguientes dependencias:

sudo apt-get install build-essential
sudo apt-get build-dep qemu
sudo apt-get install libpcap-dev

Para la compilacion, deben estar instalados los siquientes paquetes:

sudo apt-get install gcc-3.4
sudo apt-get install subversion

Instalar el modulo "Kemu" (se necesita el 1.4.0pre1)

wget http://www.nongnu.org/qemu/kqemu-1.4.0pre1.tar.gz
tar zxfv kqemu-1.4.0pre1.tar.gz
cd kqemu-1.4.0pre1
./configure
make
sudo make install

Cargamos el modulo en la configuracion en ejecucion

sudo modprobe kqemu

Descargar el codigo de QEMU desde SVN en un directorio temporal

mkdir ~/src
cd ~/src
svn co svn://svn.savannah.nongnu.org/qemu/trunk -r 5193

Descargar e instalar el parche para Olive (habilita multicast en el chipset Intel emulado)

Este enlace funciona: http://shef.net.ru/misc/qemu-cvs20080910-brb_01-olive.patch

cd trunk
wget http://shef.net.ru/misc/qemu-cvs20080910-brb_01-olive.patch
patch -p1 < qemu-cvs20080910-brb_01-olive.patch

Compilacion e instalacion

Ejecutamos configure para fijar el prefijo (normalmente /usr/local/) y activar opciones proporcionadas por el parche

./configure --prefix=/usr/local/ --target-list=i386-softmmu

Una vez finalice con exito el script configure, ejecutamos make y make install

sudo make
sudo make install

Ahora la version de QEMU parcheada esta disponible en el prefijo especificado anteriormente
Instalacion de FreeBSD como SO invitado.

Descargar la imagen de FreeBSD 4.11 mini desde ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/4.11/4.11-RELEASE-i386-miniinst.iso

Creamos una imagen qcow2 para usar como disco duro de Olive. Le asignamos un tamaño de 4 gigabytes.

qemu-img create olive-base.img -f qcow2 4G

Iniciamos QEMU indicandole que arranque desde la imagen de FreeBSD descargada, que use de disco duro la imagen qcow2 y con el interfaz de red en modo "user", lo que permitira posteriormente copiar la imagen de junos via SCP.

sudo qemu -m 256 -hda olive-base.img -cdrom 4.11-RELEASE-i386-miniinst.iso -boot d -localtime -net nic,macaddr=00:aa:00:00:01:01,model=i82559er -net user

Seguir los pasos de instalacion por defecto de FreeBSD (modo de instalacion "User" estandar, sin instalar servicios adicionales o puertos). Cuando se llegue a la fase de particiones, usar los siguientes valores:

Punto de montaje: / Tamaño: 512M
Punto de montaje: swap Tamaño: 1024M
Punto de montaje: /config Tamaño: 12M
Punto de montaje: /var Tamaño: resto

En el paso de la instalacion donde pregunta si se usara DHCP para configurar el interfaz de red, hacerlo.



Una vez finalizada la instalacion de FreeBSD, se reiniciara la maquina virtual. En cuanto lo haga, salir de QEMU o matar el proceso para evitar que comience otra vez la instalacion.

Instalacion de Olive

Estamos listos para la instalacion de Olive en el host Qemu que hemos creado. Se necesitara disponer de una imagen de Junos (jinstall) recomendandose que sea una version menor de la 8.5, (ya que las versiones 8.5 y superiores se basan en FreeBSD 6).

Iniciamos el host que hemos creado pero esta vez desde el fichero imagen (olive-base.img en nuestro ejemplo). Una vez mas vinculamos el interfaz de red al proceso "user".

sudo qemu -m 256 -hda olive-base.img -boot c -localtime -net nic,macaddr=00:aa:00:00:01:01,model=i82559er -net user

Una vez que ha iniciado completamente la maquina FreeBSD, accedemos como "root". Ejecutamos el comando:

netstat -r grep default

para encontrar el default gateway (nuestra maquina anfitriona). Es necesario que nuestra maquina anfitriona disponga de un servidor SSH ejecutandose.Una vez encontrado el default gateway, compiar la imagen de Junos via SCP sobre el SO invitado FreeBSD.

scp [usuario]@[IP_invitado]:[ruta_origen]/[fichero_jinstall.tgz] [ruta_destino]

Por ejemplo:

scp bbennett@10.0.2.2:~/Desktop/jinstall-8.3R1.5-domestic-signed.tgz /var/tmp

Modificacion del fichero Jinstall

Si la imagen de Junos es de una version superior a la 7.4, hay que modificar el fichero "jinstall" antes de instalar el paquete, ya que incluye un binario ("checkpic") que comprueba el hardware sobre el que se va a instalar y fallara. Para modificarlo, seguir los pasos descritos en el siguiente enlace:
http://inetpro.org/wiki/Using_QEMU_with_Olive_to_emulate_Juniper_Routers#Modify_jinstall_file

Instalando Olive

Si es una version 7.4 o inferior, no es necesario nada mas para instalar Junos, para lo que ejecutaremos el siguiente comando:

pkg_add -f [ruta]/[fichero_jinstall.tgz]

Por ejemplo:

pkg_add -f /var/tmp/jinstall-8.3R1.5-domestic-olive.tgz

Una vez haya finalizado la instalacion, detener la maquina virtual con el comando "halt" y matar el proceso de Qemu.

Primer arranque

Segun la version el fichero "jinstall" solo ha instalado un entorno de bootstrap por lo que es necesario un reinicio mas del SO invitado para finalizar la instalacion. Si en el paso anterior se reinicio la maquina virtual en lugar de detenerla, se observa que no hay salida a pantalla. Esto se debe a que un router Juniper no tiene salida VGA y lo redirige todo al puerto serie. En este caso no es un problema porque Qemu puede redirigir el puerto serie hacia la salida stdio o un puerto telnet.

Si en el paso anterior se detuvo la maquina virtual, es necesario el reinicio para redirigir la consola al puerto telnet.

sudo qemu -m 256 -hda olive-base.img -boot c -localtime -nographic -serial stdio

Esperar a que el proceso de bootstrap finalice. La maquina virtual Olive reiniciara automaticamente. Una vez finalizado el reinicio accederemos con el usuario "root". Ejecutar el comando halt y matar el proceso de Qemu.

En este punto, ya tenemos una imagen instalada de Olive

Es recomendable hacer una copia de esta imagen por si aparecen en el futuro problemas de disco o si se quieren tener distintas imagenes para distintos routers en lugar de usar routers virtuales dentro de una misma instancia.

qemu-img create -b olive-base.img -f qcow2 R1.img

Ahora se puede arrancar el router con el siguiente comando y comenzar a configurarlo:

sudo qemu R1.img -m 96 -nographic -daemonize -serial telnet::1001,server,nowait -localtime -net nic,macaddr=00:aa:00:60:00:01,model=i82559er -net socket,listen=:6000

No hay comentarios:

Publicar un comentario