Error apr_array_clear en Apache
|Hola a tod@s, en este post vamos a documentar un error que se presentó en el servidor web Apache y que puede ser de utilidad si llegasen a tener el mismo en algún momento.
El error que se esta presentando es el siguiente: /usr/sbin/httpd: symbol lookup error: /usr/sbin/httpd: undefined symbol: apr_array_clear al ejecutar algun comando de apache como por ejemplo apachectl -t o apachectl -S.
Este error puede ocurrir en cualquier lugar donde se utilice la biblioteca APR (Apache Portable Runtime), que es una biblioteca de bajo nivel utilizada por Apache para proporcionar una capa de abstracción sobre el sistema operativo subyacente.
Antes de ver las posibles causas del error, les doy un poco de contexto del por que se empezó a presentar el mismo. Se tiene la siguiente tarea: reemplazar el servidor web IHS de IBM por el servidor web Apache.
Una vez se realiza la instalación de apache se va a verificar que la sintaxis de los viritualhost sea la correcta y al ejecutar el comando `apachectl -t` se evidencia el siguiente error:
`/usr/sbin/httpd: symbol lookup error: /usr/sbin/httpd: undefined symbol: apr_array_clear`
Se intentan ejecutar otros comandos de apache pero se presenta el mismo error. Por lo tanto investigamos un poco porque se puede presentar y aqui dejo algunas posibles causas del mismo:
- Puede ser un error en el código que está utilizando la biblioteca APR.
- Puede ser una incompatibilidad entre las versiones de la biblioteca APR y Apache que está utilizando.
Sin embargo eesta misma versión de apache es probada en otro servidor y no presenta el mismo problema por lo cual no deberia ser alguna de las dos opciones anteriores, pero efectivamente si tiene que ver con la biblioteca o librearias APR.
Ahora vamos a la solución que se dió a este inconveniente:
1. Se verifica que librerias esta cargando el binario de apache.
`ldd /sbin/httpd`
De acuerdo a la imagen anterior se evidencia que la libreria apr esta siendo cargada desde /opt/IBM/HTTPServer, y dicha ruta pertenece al path de instalación de IHS , por lo tanto desde algun lugar se le esta definiendo que se tome de allí.
2. Verificar archivos conf que estan en la ruta /etc/ld.so.conf.d/:
El directorio `ld.so.conf.d` es un directorio en sistemas basados en Linux donde se pueden colocar archivos de configuración para el cargador dinámico de enlaces (ld.so). Estos archivos de configuración especifican los directorios donde el cargador dinámico buscará las bibliotecas compartidas requeridas por los programas que se ejecutan en el sistema.
Al ir a la ruta /etc/ld.so.conf.d/ se detecta el archivo httpd-lib.conf, el contenido de esté es el siguiente:
/opt/IBM/HTTPServer/lib /opt/IBM/HTTPServer/gsk8/lib64
Lo anterior nos indica que de allí se estan tomando las librerias, por lo cual para dar solución se elimina el archivo y se aplica el comando ldconfig para que recargue nuevamente las librerias del sistema, y con esto se da solución al inconveniente. Para verificar nuevamente con ldd vemos de donde se estan tomando las librerias apr y luego ejecutamos comandos con apachectl para confirmar que no tengamos inconveniente.
rm -rf /etc/ld.so.conf.d/httpd-lib.conf ldconfig
Como se aprecia en la imagen anterior las librerías ya no estan tomando la ruta del ihs, y al ejecutar algún comando de apache no tenemos ningún error.
Espero les sea de utilidad!
gracias por compartir!