Busindre » Blog Archive » Compilación de Pemu "Emulador PixOs para GNU/Linux"

Compilación de Pemu "Emulador PixOs para GNU/Linux"

June 24th, 2007 by Busindre

PEMU es un emulador de "CISCO Pix Firewall Operating system", el cual esta basado en el conocido emulador de código abierto "QEMU". Este emulador nos permitirá correr el sistema operativo de los firewalls de la casa CISCO en nuestra distribución de GNU/Linux, gracias a una emulacion del Hardware usado por los dispositivos firewall de CISCO. La Web / Foro principal es http://7200emu.hacki.at/ donde podremos encontrar un sin fin de temas, trucos, preguntas relacionados con dicho software, vamos a ver como compilarlo y ponerlo en funcionamiento de forma básica.

La recomendación es usar kernel 2.6 y gcc 3.4. Todo lo que se salga de ahí puede acarrear algún problema. Siempre podemos usar los archivos binarios, los cuales, en principio deben funcionar sin problema. De todas formas explicaremos como hacerlo bajo otro compilador como prueba de concepto desde un punto de vista formativo.

Instalación Pemu

Paquete (sources): pemu_public2007-04-20.tar.bz2

Otros paquetes / Mirrors (Requieren registro en el foro):

Pemu Binarios Windows: pemu_win32_031, pemu_win32_02

Pemu Binarios GNU/Linux: pemu_public_bin2007-04-20

Pemu (Sources) GNU/Linux: pemu_public2007-04-20

Compilación:


$ tar -xvjf pemu_public2007-04-20.tar.bz2
$ cd pemu_public2007-04-20/

En el archivo de Makefile podemos optimizar el código para la compilación indicando la arquitectura y modelo de procesador, pero como sabemos esto va unido a las posibilidades de nuestro compilador GNU de C (gcc):

Por defecto usará (Makefile):


CC=gcc-3.4
HOST_CC=gcc-3.4

Lo cambiamos al que nosotros usemos (No muy recomendable):


CC=gcc-3.3.6
HOST_CC=gcc-3.3.6

De no cambiar la versión del compilador a usar, mostrara el error:


gcc-3.4 -Wall -O3 -fno-strict-aliasing -fomit-frame-pointer -march=pentium4 -mtune=pentium4 -I. -I.. -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I./fpu -I./slirp -c -o vl.o vl.c
make: gcc-3.4: No se encontró el programa
make: *** [vl.o] Error 127

AVISO: Pemu NO es compatible con los gcc de la rama 4.x, debemos usar un 3.x y entre ellos muy aconsejable el "gcc 3.4". También es recomendable compilarlo bajo kernels de la rama 2.6 para evitar problemas.

Por defecto se compila optimizado para P IV:


TUNE_FLAGS=-march=pentium4 -mtune=pentium4

Por ejemplo estos parámetros de optimización solo son validos en gcc.3.4 y en otras versiones del compilador pueden variar. Nosotros para este articulo usaremos el compilador "gcc versión 3.3.6" el cual no permite estos parámetros de optimización. Para saber cuales parámetros son efectivos en nuestra versión de gcc, usaremos el comando "man gcc" e iremos a la sección de "Intel" (O lo que nuestro hardware use) donde encontramos lo siguiente:


i386 and x86-64 Options -mcpu=cpu-type -march=cpu-type -mfpmath=unit -masm=dialect -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-double -mpreferred-stack-bound-
ary=num -mmmx -msse -msse2 -msse3 -m3dnow -mthreads -mno-align-stringops -minline-all-stringops -mpush-args
-maccumulate-outgoing-args -m128bit-long-double -m96bit-long-double -mregparm=num -momit-leaf-frame-pointer
-mno-red-zone -mcmodel=code-model -m32 -m64

Como vemos la opción: "-mtune=pentium4" No la encontramos, por lo que al compilar son retocar el archivo Makefile saldrá un error de este tipo:


gcc-3.3.6 -Wall -O3 -fno-strict-aliasing -fomit-frame-pointer -march=pentium4 -mtune=pentium4 -I. -I.. -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I./fpu -I./slirp -c -o vl.o vl.c
cc1: error: invalid option `tune=pentium4'
make: *** [vl.o] Error 1

Por lo que debemos borrar ese parámetro o bien cambiarlo por otro, en este caso lo borramos:

TUNE_FLAGS=-march=pentium4

Tambien podemos eliminar estas lineas del archivo de Makefile para optimizar o añadir las de otras arquitecturas (Powerpc, sparc, AMD,..) que nos mostrara el manual de nuestro gcc usado. Pero aunque no usemos este tipo de parámetros en compilación el emulador es perfectamente funcional. Para terminar, compilar solo requiere del siguiente comando.

$ make

NOTA: No debemos preocuparnos por los avisos producidos en el proceso de compilación.

Debemos crear el archivo FLASH

$ dd if=/dev/zero of=FLASH bs=1k count=16k
16384+0 records in
16384+0 records out
16777216 bytes (17 MB) copied, 0,194996 seconds, 86,0 MB/s

Debemos bajar los Sistemas operativos del firewall, llamados PIXOS (Firewall Operating System of CISCO), PEMU esta testeado con las versiones 6.35 y 7.21 de PixOs, lo cual no quiere decir que las demás imágenes de este sistema operativo de firewall no sea funcional

PixOS 6.35 -> http://www.mtsac.edu/~jgau/Download/CISS25/Pix6.35/pix635.bin
PixOS 6.35 -> http://www.qalansawa.net/pix635.bin

PixOS 7.21 -> http://www.defenseindepth.net/Cisco/7.2/pix721.bin

PixOS 7.22 -> http://www.defenseindepth.net/Cisco/7.2/pix722.bin

md5sum PixOS


6.35 md5sum: 503f6dfc38626652eec90b9658bb30ac
7.21 md5sum: d1b4e66fc4ddde86bd15bf8e240544aa
7.22 md5sum: d2641f1441347b0204449da1d4a06758

* PixOS 6.35


$ mkdir pixos
$ cd pixos_635
$ unzip pix635.bin
Archive: pix635.bin
warning [pix635.bin]: 153408 extra bytes at beginning or within zipfile
(attempting to process anyway)
warning: skipped "../" path component(s) in ../obj/pix
inflating: obj/pix

$ mv obj/pix ./

* PixOS 7.21 / PixOS 7.2.2

$ mkdir pixos_721
$ cd pixos_721
$ unzip pix721.bin
Archive: pix721.bin
warning [pix721.bin]: 75776 extra bytes at beginning or within zipfile
(attempting to process anyway)
warning: skipped "../" path component(s) in ../target/f1/pix
inflating: target/f1/pix

$ mv target/f1/pix ./

Configurando Pemu (pemu.ini)

pemu.ini (Seleccionamos la Imagen a usar)

serial=0x12345678
image=pixos_365/pix
key=0x00000000,0x00000000,0x00000000,0x00000000
bios1=mybios_d8000
bios2=bios.bin
bios_checksum=1

ifup.ini (No es necesario tocarlo):

tap0 10.0.0.1 255.255.255.0
tap1 10.1.0.1 255.255.255.0
tap2 10.2.0.1 255.255.255.0
tap3 10.3.0.1 255.255.255.0
tap4 bridge eth0

Ejecutar Pemu (firewall con dos interfaces):


./pemu -net nic,vlan=1,macaddr=00:aa:00:00:02:01 -net tap,vlan=1,script=ifup -net nic,vlan=2,macaddr=00:aa:00:00:02:02 -net tap,vlan=2,script=ifup -serial stdio -m 128 FLASH

Puede ser por ejemplo que encontremos con mensajes de este tipo cuando no ponemos la catidad de memoria adecuada, por ejemplo al ejecutar una imagen de pix-7.22 con la opción "-m 250":

Panic: kernel - map_p2l_4k(1ff000, 1ff000) already mapped to f9b6807

Insufficent memory for this version of image -- Please upgrade to 128MB

Aviso: echo 1024 > /proc/sys/dev/rtc/max-user-freq Puede ayudarnos

AVISO: La recomendacion es usar kernels de la rama 2.6 y gcc 3.4. El PixOs 6.35 necesita clave obligatoriamente, al arrancarlo de no tener la key correcta mostrara un mensaje de este tipo.


This activation key is not valid.
Rebooting....

En kernels como puede ser el 2.4.31 y con compiladores no gcc 3.4 podemos encontrarnos ciertos errores a la hora de arrancar Pemu con las imágenes de PixOS, esto dependerá de la suerte de cada uno y su combinación kernel + gcc:

Violación de segmento

Operación Invalida

Instrucción Ilegal

De ahí la importancia de usar las recomendaciones vistas anteriormente para compilar o bien usar binarios.

Posted in Hardware |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.