Como compilar librerías nativas de Tomcat 7 en Redhat EL 6.3

Tomcat provee principalmente dos librerias nativas (dll o so), una conocida mod_jk que se utiliza en el servidor web Apache y la otra libreria conocida como conector APR es cargada por el proceso java del Tomcat.
En este artículo voy a describir los pasos necesarios para compilar e instalar estas librerias nativas, cabe destacar que no es objetivo de este articulo describir las diferencias entre los diferentes conectores que provee Tomcat, tambien parto de ciertos conocimiento previo de Tomcat pro lo que no entra en detalles salvo los estrictamente necesarios.


Recomendacion


Es aconsejable compilar las librerias nativas para cada versión de Tomcat, es decir si te descargar una version super, vuelve a compilar y reinstalar las librerias nativas, de esta forma evitaras problemas de compatibilidad.

Entorno


Redhat Enterprise Linux 6.3 (64-bit)
Tomcat 7.0.37 instalado en /opt/tomcat/apache-tomcat

Prerequisitos


Antes de iniciar la fase de compilación es necesario validar e instalar algunos paquetes.

yum list installed  | egrep "apr-devel|openssl-devel|httpd-devel|httpd|openssl"

Si algun paquete no esta instalado ejecuta el siguiente comando

yum install apr-devel
yum install openssl-devel
yum install httpd-devel
yum install httpd
yum install openssl

Es necesario tener el gcc y make instalado

Generación del connector APR


1) Obtener el codigo fuente del conector.

El código fuente del conector APR viene incluido en cada versión de Tomcat, por defecto se distribuye en el directorio bin/tomcat-native.tar.gz, también se puede descargar de la página de Tomcat, en mi caso lo he desplegado en /tmp como root

cd /tmp
tar -xzvf /opt/tomcat/apache-tomcat/bin/tomcat-native.tar.gz

2) Configurar el entorno de contrucción

cd /tmp/tomcat-native-1.1.27-src/jni/native
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/opt/tomcat/jdk1.6.0_41_x64 --with-ssl=yes --prefix=/opt/tomcat/apache-tomcat

3) Compilar
./make

NOTA: Si todo funciona correctamente el make debe generar los siguientes ficheros en ./.libs


-rw-r--r-- 1 root root 1169636 Apr  8 11:04 libtcnative-1.a
lrwxrwxrwx 1 root root      19 Apr  8 11:04 libtcnative-1.la -> ../libtcnative-1.la
-rw-r--r-- 1 root root    1034 Apr  8 11:04 libtcnative-1.lai
lrwxrwxrwx 1 root root      23 Apr  8 11:04 libtcnative-1.so -> libtcnative-1.so.0.1.27
lrwxrwxrwx 1 root root      23 Apr  8 11:04 libtcnative-1.so.0 -> libtcnative-1.so.0.1.27
-rwxr-xr-x 1 root root  815933 Apr  8 11:04 libtcnative-1.so.0.1.27

4) Instalar la librería compartida

./make install

Verificar en $CATALA_HOME/lib que esten las librerias nativas, en mi caso la ruta es /opt/tomcat/apache-tomcat/lib

5) Iniciar tomcat con la librería nativa.

Exportar la variable LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/tomcat/apache-tomcat/lib

Iniciar el proceso Tomcat.
Si todo funciona correctamente deberías ver las siguientes entradas en el log de tomcat


Apr 5, 2013 2:16:18 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.3.9.
Apr 5, 2013 2:16:18 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Apr 5, 2013 2:16:19 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.0-fips 29 Mar 2010)

NOTA: Si se compila la librería en 64 bit, debes utilizar un JRE/JDK de 64 bit de lo contrario la librería falla al cargar.

Para generar la librería en 32-bit es necesario instalar los siguientes paquetes en 32-bit:

yum install openssl-devel.i686
yum install apr-devel.i686

Cabe destacar que no esta documentado como generar la librería nativa de 32-bit en un entorno 64-bit, para ello tuve que modificar manualmente los siguientes ficheros:

tomcat-native-1.1.27-src/jni/native/Makefile (cambiar lib64 por lib)
tomcat-native-1.1.27-src/jni/native/build/rules.mk (cambiar parametro CFLAGS -m64 por -m32, cambiar lib64 by lib).

NOTE: Recomiendo generar libreria nativa 32-bit en un entorno linux 32-bit

Generación del modulo mod_jk


1) Descargar codigo fuente.
Debes descrgar el tar.gz del site de Tomcat http://tomcat.apache.org/connectors-doc/ el codigo fuente del connector.

cd /tmp
tar -xzvf /tmp/tomcat-connectors-1.2.37-src.tar.gz

2) Configurar el make

En este punto se indica donde esta instalado el apxs, el comando /usr/sbin/apxs esta incluido en el paquete httpd-devel (ver prerequisitos)

cd /tmp/tomcat-connectors-1.2.37-src/native
./configure  --with-apxs=/usr/sbin/apxs

3) Generar la libería nativa

make

Si el make finaliza correctamente dejará la libreria (.so) en ./apache-2.0/.libs/mod_jk.so

4) Instalación de la librería compartida.

Las nueva libreria debe ser publicada, para ello es necesario instalarla en determinados directorios (/usr/lib64/httpd/modules)

make install





Comentarios

Entradas populares