Para lograr la correcta compilación y funcionamiento de la plataforma ISODE es necesario realizar algunos cambios en archivos del código fuente, estos cambios serán expuestos a continuación.
3.3.1.3.1 Archivo general.h.
3.3.1.3.1.1 Descripción: Este archivo es el encargado de definir las compatibilidades generales con el sistema, es decir define la configuración especifica al sistema Linux que estamos usando para que ISODE reconozca que librerías podrá usar, ya que ISODE al igual que OSIMIS permite ser instalado sobre diferentes sistemas operativos como Sun, Solaris y HP-UX y el archivo general.h se encarga de definir los objetivos específicos para el sistema correcto.
3.3.1.3.1.2 Ubicación: El archivo general.h se encuentra en la ruta “/tesis/isode-
8.0/h”.
3.3.1.3.1.3 Modificaciones: Es necesario acceder a editar el archivo general.h y realizar los siguientes cambios.
Eliminar la línea donde se redefine la función sprintf() como se muestra en la Figura #9A.
... Línea # 138
#if defined(BSDSTRS) && !defined(BSD44) && (!defined(BSD43) || defined(SUNOS4) || defined(vax) || defined(RT) || (defined(mips) && defined(ultrix))) && !defined(XOS_2)
#if !(defined(__STDC__) && defined(__GNUC__) && defined(mips) && defined(ultrix)) char *sprintf ();
#endif #else
int sprintf (); ELIMINAR ESTA LINEA.
#endif
char *getenv ();
33
. . .
Figura #9A Edición del Archivo general.h
Eliminar la línea donde se redefine la función strdup(), como se muestra en la Figura #9B.
... Línea # 229
void (*set_smalloc_handler()) (); char *smalloc ();
char *strdup (); ELIMINAR ESTA LINEA.
/* MISC */
char *sys_errname (); . . .
Figura #9B Edición del Archivo general.h
Eliminar desde las líneas donde se redefinen la funciones htonl(), htons(), ntohl(), ntohs(), como se muestra en la Figura #9C.
... Línea #265 #ifndef __STDC__ extern time_t time (); #endif
/* ntohs etc */
#ifndef ntohs unsigned short ntohs (); #endif #ifndef htons unsigned short htons ();
#endif ELIMINAR ESTAS LINEAS.
#ifndef ntohl unsigned long ntohl (); #endif #ifndef htonl unsigned long htonl (); #endif
34
int bcd2char ();
. . .
Figura #9C Edición del Archivo general.h
3.3.1.3.1.4 Justificación de las Modificaciones: Todas las modificaciones anteriores son necesarias debido a que cada una de ellas presenta el mismo problema de compilación, este problema lo expresa el compilador con la frase “conflicting types for ...” la cual nos permite conocer que el problema es la redefinición de las funciones, por lo tanto es conveniente utilizar la definición que hacen de ellas los diferentes archivos cabecera del sistema operativo, en lugar de la redefinición que se hace en el archivo general.h, esta redefinición se presenta debido a que estamos utilizando un Kernel del sistema operativo más nuevo (kernel versión 2.0.35) al recomendado para compilar ISODE (kernel versión 1.2.*), y en este kernel nuevo no es necesario la definición de estas funciones en el archivo de compatibilidades generales (general.h).
La Tabla #6 nos muestra que archivos definen estas funciones en nuestro sistema operativo.
Función Archivo Definiéndola
sprintf() /usr/include/stdio.h
Strdup() /usr/include/string.h
htonl(), htons(), ntohl(), ntohs() /usr/include/netinet/in.h
35
3.3.1.3.2 Archivo manifest.h.
3.3.1.3.2.1 Descripción: En este archivo se definen muchas de las constantes que usará el software ISODE, así como también se definen algunas estructuras importantes que dejaremos intactas.
3.3.1.3.2.2 Ubicación: El archivo manifest.h se encuentra en la ruta “/tesis/isode-
8.0/h”.
3.3.1.3.2.3 Modificaciones: Es necesario acceder al archivo manifest.h y adicionar la línea mostrada en la Figura #10.
... Línea #42 #ifdef BSD42 #undef SYS5NLY #define BSDSIGS
#define SIGEMT SIGUSR1 AGREGAR ESTA LINEA.
#endif
#ifdef ROS #undef SYS5NLY
#define BSDSIGS . . .
Figura #10 Edición del Archivo manifest.h
3.3.1.3.2.4 Justificación de las Modificaciones: Existe un archivo llamado isore.c ubicado en “/tesis/isode-8.0/support/” el cual ayuda a la terminación de los programas TSAP de ISODE (demonio tsapd), el archivo isore.c implementa el monitoreo del tráfico TCP/IP, tan eficientemente como sea posible y envía la señal SIGEMT al demonio tsapd para terminarlo cuando la red genera un evento DATA.INDICATION. El problema que se presenta en la compilación con isore.c es que la señal SIGEMT aparece como no definida, por lo tanto debemos definirla y
36
la mejor forma de hacerlo es ubicándola en el archivo donde se definen las principales constantes del software ISODE (manifest.h), y debemos darle a esta señal el valor de una señal de “exit”, lo cual podemos hacer dándole el valor de una señal especial de Linux, en este caso usamos SIGUSR1.
3.3.1.4 Compilación.
En este punto ya tenemos todo listo para poder realizar la compilación del software ISODE, y es recomendable resetear los datos de los archivos de configuración del sistema, lo cual hacemos con el siguiente comando:
“ $ ./make once-only ”
solo nos queda generar el sistema básico lo cual hacemos de la siguiente manera:
“ $ ./make everything “
al ejecutar el comando anterior se desplegaran en la salida estándar (monitor) todas las acciones que esta ejecutando la compilación; en el caso que deseemos enviar estas a un archivo para su posterior estudio podemos escribir:
“$ ./make everything > 2>&1”
donde es el nombre del archivo en el que deseamos guardar las acciones realizadas.
Con los cambios efectuados anteriormente y siguiendo los pasos dados, el software ISODE debe compilar correctamente y generar los archivos ejecutables necesarios, para asi poder pasar a la instalación de este.
37
3.3.1.5 Instalación.
La instalación del software base de ISODE es un paso muy corto puesto que en la edición del archivo CONFIG.make (bsd42.make) ya hemos seleccionado los caminos adecuados para los archivos ejecutables, archivos cabecera etc. Por lo tanto ahora sólo debemos escribir:
“ $ ./make install “ o
“ $ ./make install > 2>&1 ”
en el ultimo caso es el nombre del archivo en el que deseamos guardar las acciones de instalación realizadas.