php-logo

Recientemente tuve la necesidad de compilar PHP con soporte para LDAP. Sin embargo, al configurar el paquete con la opción --with-ldap, falla al momento del linking pues es necesario indicarle al linker que enlace con la librería -llber.

LDAP (Lightweight Directory Access Protocol) es un protocolo de capa aplicación para acceder y mantener servicios de información de directorio distribuidos sobre Internet. Los servicios de directorio juegan un rol importante en las aplicaciones de Internet e intranet al permitir compartir información acerca de usuarios, sistemas, redes, servicios y aplicaciones a través de la red. Los servicios de directorio pueden proveer un conjunto de registros organizados, generalmente en forma de estructura jerárquica, tales como un directorio de correo electrónico corporativo. Es el tipo de tecnología similar a la que se basan servicios propietarios ampliamente utilizadas en redes corporativas, tales como Microsoft Active Directory.

Si aplicación PHP autentica usuarios contra un servidor OpenLDAP, o realiza cualquier otro tipo de consultas o gestión de un directorio LDAP, será necesario compilarlo con soporte para el mismo:

LDAP Functions

Manos a la obra

En este caso se requiere compilar la última versión disponible de la rama 5.6 de PHP.

Descargar PHP 5.6.30 desde un mirror:

# wget http://br2.php.net/get/php-5.6.30.tar.bz2/from/this/mirror

Extraer el paquete:

# tar -axf php-5.6.30.tar.bz2
# cd php-5.6.30
# chown -R root:root .
# chmod -R o-rwx .

Opcionalmente, definir flags para optimizar la compilación (ver la página de manual de gcc):

export CFLAGS="-O3 -march=native -mtune=native -m64"
export CXXFLAGS="-O3 -march=native -mtune=native -m64"

Para poder compilar PHP con soporte para LDAP, es necesario utilizar las librerías -lresolv y -llber:

# export LIBS="-lresolv -llber"

De lo contrario falla el linker al momento de enlazar los binarios, arrojando el siguiente error:

/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_scanf@@OPENLDAP_2.4_2'
/usr/bin/ld: note: 'ber_scanf@@OPENLDAP_2.4_2' is defined in DSO /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/liblber-2.4.so.2: could not read symbols: Invalid operation
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_scanf@@OPENLDAP_2.4_2'
/usr/bin/ld: note: 'ber_scanf@@OPENLDAP_2.4_2' is defined in DSO /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/liblber-2.4.so.2: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit status

Limpiar el directorio con los fuentes y configurar el paquete:

make distclean
./configure --prefix=/usr/local/php-55.6.30 [OPCIONES] --with-ldap

Este artículo se enfoca en indicar cuales son las librerías y opciones necesarias para que compile con soporte para LDAP. Las opciones dependen de cada instalación. Varían mucho si se va a utilizar PHP como módulo de Apache, si se va a compilar o no el servidor FPM, a qué motor de base de datos será necesario conectarse, las características y extensiones necesarias de la aplicación PHP que correrá en el servidor (soporte para archivos comprimidos, imágenes, funciones criptográficas), etc. Generalmente es necesario agregar muchas opciones que no se encuentran habilitadas por defecto.

Para listar todas las opciones disponibles, ejecutar ./configure --help.

Finalmente es posible compilar e instalar PHP:

make -j4
make install
make clean

 

Referencias: man gcc | man make| man ld

Fuente: linuxito

¿Quién está en línea?

Hay 23672 invitados y ningún miembro en línea