viernes, 27 de agosto de 2010

Instalar Firebird 2.1.3 en FreeBSD 8

La ultima versión de Firebird en la lista de los ports de Freebsd8 es la 2.0.3, sin embargo la ultima versión estable de firebird liberada es la 2.1.3 ya hace casi un año. La verdad es que no entiendo porque han tardado tanto en portar esta ultima versión y quizas no lo hagan por mucho mas tiempo, pero no puedo seguir esperando para poderla utilizar.

Teóricamente utilizando los fuentes de la ultima versión de firebird puedo compilarlo en FreeBSD asi que vamos a obra:

Necesitamos descargar e instalar todas las dependencias de Firebird manualmente, pero cuales son estas? pues las dependencias de la versión 2.0.3 son las mismas que la 2.1.5, asi que solo visualizamos el paquete de la 2.0.3:

B-deps: autoconf-2.62 autoconf-wrapper-20071109 automake-1.9.6_3 automake-wrapper-20071109 bison-2.4.1,1 gettext-0.17_1 gmake-3.81_3 icu-3.8.1_2 libiconv-1.13.1 libtool-2.2.6a m4-1.4.13,1 perl-5.8.9_3 R-deps: icu-3.8.1_2

Si ya tenemos el servidor 2.0.3 instalado con anterioridad, pues nos ahorramos esto, solo desintalamos el servidor y el cliente con pkg_delete

Descargamos el código fuente de la versión 2.1.3 a nuestro equipo, este viene empaquetado en formato tar.bz2

Una vez descomprimido en nuestro equipo comenzamos a instalar: make && make install && make clean

Nuestro primer error:

Error expanding embedded variable.

Esto se debe a que debemos compilar los fuentes con: gmake && gmake install.

Siguiente error:

vi.c:919:74: error: macro "__weak_reference" requires 2 arguments, but only 1 given vi.c: In function 'get_alias_text': vi.c:919: error: expected declaration specifiers before '__weak_reference' vi.c:924: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:954: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:999: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:1055: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:1104: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token vi.c:919: error: parameter name omitted vi.c:1125: error: expected '{' at end of input ...
`/usr/home/martin/downloads/Firebird-2.1.2.18118-0/extern/editline/src' gmake[4]: *** [all-recursive] Error 1 gmake[4]: Leaving directory `/usr/home/martin/downloads/Firebird-2.1.2.18118-0/extern/editline' gmake[3]: *** [all] Error 2 gmake[3]: Leaving directory `/usr/home/martin/downloads/Firebird-2.1.2.18118-0/extern/editline'

En este punto debemos de compilar el firebird sin utilizar esta librería "editline", al parecer no funciona bien FreeBSD.

./configure --without-editline
gmake
gmake install

Siguiente error:

mkdir: /usr/local/firebird/UDF: File exists find: ./firebird/examples/v5: No such file or directory Example files have not been built! chmod: examples/*.fdb: No such file or directory gmake[2]: Leaving directory `/usr/home/erick/Firebird-2.1.3.18185-0/gen'

Realmente no es un error, simplemente son los últimos mensajes que aparecen después de la instalación lo cual no me convence, es como si terminara a medias. Revisando el script que realiza la instalación "install.sh" señala que ciertamente esto es todo!

Los mensajes que presenta de que no pudo encontrar algunos archivos, realmente no es nada importante ya que se trata algunos archivos de ejemplos, asi que procedo a probar mi servidor después de recargar los servicios inetd.

Intentando conectarme desde una aplicación remota no logro establecer la conexion sin obtener algun mensaje de error claro. En el mismo servidor Freebsd verifico si el puerto 3050 de firebird esta escuchando con el comando "sockstat" y todo esta en su lugar. Proceso a utilizar el isql y desde que intento de ejecutar el comando veo el siguiente mensaje de error:

/libexec/ld-elf.so.1: Shared object "libicuuc.so.30" not found, required by "libfbembed.so.2.1"

Al parecer algunas librerías no se copiaron en donde deberían de estar en el proceso de instalación, asi que lo hago manual ya que todas ellas se encuentran en el firebird compilado.

Dentro de la carpeta de los fuentes se crea una carpeta nueva llamada "gen", aqui se deposita el binario del servidor, dentro de la carpeta "lib" estan nuestros archivos, procedemos a copiarlos en las rutas que son necesitados:
cp -v libicu* /libexec/ cp -v libicu* /usr/local/firebird/lib

Volvemos a probar isql y este accede sin problemas, ahora tratare de conectar mi aplicación externa a mi nuevo servidor y se produce un nuevo mensaje de error:

CHARACTER SET ISO8859_1 is not installed.

En caso de que nuestra aplicación y base de datos no este usando ningun "character set", probablemente no surgiría ningún mensaje de error.

Los diferentes character set estan registrados en un archivo llamado fbintl.conf, al revisar mi instalacion dicho archivo no existe, pero si esta en el compilado, entramos al forder gen/firebird/intl procedemos a copiarlo:

cp -v fbintl.conf /usr/local/firebird/intl

Nuevamente entro a mi aplicación externa y pruebo... pasa la prueba ! hago algunas inserciones, modificaciones y consultas complejas, todo en orden :)

Sin poseer la instalación portable oficial para FreeBSD se hace muy tedioso el aventurarnos a instalar un paquete por medio de los código fuentes, ya que nos pueden mostrar un sin fin de inconvenientes en el proceso.

1 comentario:

Leonardo M. Ramé dijo...

Hola, ¿has probado con Freebsd 8.1 AMD64?, a mi me da este error al compilar con lo siguiente:

export CFLAGS="-DAMD64"
./configure --without-editline
gmake

... después de unos 5 minutos ...:

../temp/superclient/common/config/dir_list.o ../temp/superclient/common/classes/ClumpletReader.o ../temp/superclient/common/classes/ClumpletWriter.o -lm -lsupc++ -lgcc_eh -D_THREAD_SAFE -pthread
/usr/bin/ld: /usr/lib/libsupc++.a(tinfo2.o): relocation R_X86_64_32S can not be used when making a shared object; recompile with -fPIC
/usr/lib/libsupc++.a: could not read symbols: Bad value
gmake[2]: *** [../gen/firebird/lib/libfbclient.so.2.1.3] Error 1
gmake[2]: Leaving directory `/usr/home/martin/desarrollo/Firebird-2.1.3.18185-0/gen'
gmake[1]: *** [libfbclient] Error 2
gmake[1]: Leaving directory `/usr/home/martin/desarrollo/Firebird-2.1.3.18185-0/gen'
gmake: *** [firebird] Error 2

¿Alguna idea?.

Gracias por el post,
Leonardo.