
- Arco Linux 2011.08.19 (Linux 3.4.2 i686)
- Apache 2.2.22 → 2.2.22 (recompilar y reinstalar)
- OpenSSL 1.0.1.c-1
Es probable que estos detalles sean irrelevantes, pero: estoy usando yaourt concustompkg para compilar Apache desde el código fuente cada vez que hay una actualización disponible para poder cambiar el docroot suexec a lo que quiero sin editar manualmente PKGBUILD.
En el pasado esto ha funcionado perfectamente; sin embargo, parece que ahora, por alguna razón, Apache no compila. Acabo de realizar una actualización completa del sistema, por lo que puede que tenga algo que ver con eso.
Aquí está la línea de configuración del PKGBUILD modificado:
../configure --enable-layout=Arch \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-suexec \
--with-suexec-caller=http \
--with-suexec-docroot=/srv/www \
--with-suexec-logfile=/var/log/httpd/suexec.log \
--with-suexec-bin=/usr/sbin/suexec \
--with-suexec-uidmin=99 --with-suexec-gidmin=99 \
--enable-ldap --enable-authnz-ldap \
--enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
--enable-ssl --with-ssl \
--enable-deflate --enable-cgid \
--enable-proxy --enable-proxy-connect \
--enable-proxy-http --enable-proxy-ftp \
--enable-dbd \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--with-pcre=/usr \
--with-mpm=${mpm}
Sin embargo, cuando intento compilar, parece funcionar bien hasta que llega a las cosas de OpenSSL:
mkdir modules/ssl
checking whether to enable mod_ssl... checking dependencies
checking for SSL/TLS toolkit base... none
checking for OpenSSL version... checking openssl/opensslv.h usability... yes
checking openssl/opensslv.h presence... yes
checking for openssl/opensslv.h... yes
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... yes
checking for openssl/ssl.h... yes
OK
forcing SSL_LIBS to "-lssl -lcrypto "
adding "-lssl" to LIBS
adding "-lcrypto" to LIBS
checking openssl/engine.h usability... yes
checking openssl/engine.h presence... yes
checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no
checking for ENGINE_init... no
checking for ENGINE_load_builtin_engines... no
checking for SSL_set_cert_store... no
configure: error: ... Error, SSL/TLS libraries were missing or unusable
==> ERROR: A failure occurred in build().
Aborting...
==> ERROR: Makepkg was unable to build apache.
==> Restart building apache ? [y/N]
==> -------------------------------
==>
Al buscar en Google, muchos informaron que la solución era export LDFLAGS=-ldl
, pero esto no tuvo ningún efecto para mí, ya sea que esté configurado en el script de compilación o en mi perfil de bash.
Respuesta1
Tuve el mismo problema al actualizar openssl de 0.9.8zb a 1.0.1i.
$/tmp/src/openssl-1.0.1i/ ./config --prefix=/usr/local/openssl -fPIC
$/tmp/src/openssl-1.0.1i/ make test
$/tmp/src/openssl-1.0.1i/ sudo make install
$/tmp/src/httpd-2.2.27/ ./config --enable-so --enable-ssl=shared --with-ssl=/usr/local/openssl
...
$configure: error: ... Error, SSL/TLS libraries were missing or unusable
Ninguna de las soluciones con configuración del entorno solucionaría el mensaje de error que recibí.
Mi solución fue:
$/tmp/src/openssl-1.0.1i/ ./config --prefix=/usr/local/openssl-1.0.1 -shared -fPIC
$/tmp/src/openssl-1.0.1i/ make clean
$/tmp/src/openssl-1.0.1i/ make
$/tmp/src/openssl-1.0.1i/ make test
$/tmp/src/openssl-1.0.1i/ sudo make install
$sudo /sbin/ldconfig -v /usr/local/openssl-1.0.1/lib
$/tmp/src/httpd-2.2.27/ make clean && make distclean
$/tmp/src/httpd-2.2.27/ ./configure --enable-so --enable-ssl=shared --with-ssl=/usr/local/openssl-1.0.1
$/tmp/src/httpd-2.2.27/ make
$/tmp/src/httpd-2.2.27/ sudo make install
El problema se solucionó con el valor compartido en la configuración de openssl. Ahora me enfrento a otro problema que dice que no se puede acceder a un método sslv2. Pero eso no está relacionado con este problema y todavía no tengo una respuesta.
Continuaré buscando respuestas sobre el problema de sslv2 y las publicaré en el tema de stackexchange correspondiente cuando lo haya resuelto.
Respuesta2
Otras búsquedas en Google pueden llevarle a configurar algunas variables de entorno como estas:
$ env LDFLAGS=-ldl
O
$ export LIBS=-ldl
El primero me falló y me dio el mismo error, pero el segundo funcionó.
Si el primero no funciona para usted, debe ejecutar el comando como una sola línea. Ya que toma el tiempo de ejecución de la variable LDFLAGS y no se guardará.
Ej: env LDFLAGS="-ldl" \ ./configure --prefix=/some/path ...
Respuesta3
Parece que la configuración httpd incluye la versión incorrecta de OpenSSL.
checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no
Esto puede suceder si tiene varias instalaciones de OpenSSL. Intente configurar la --with-ssl
opción para que coincida con el prefijo de su última instalación de OpenSSL.
--enable-ssl \
--with-ssl=/usr/local \
Respuesta4
Esto sucede porque el archivo pkg-config para openssl ya no especifica una dependencia de libdl. Mire las versiones más recientes de openssl.pc y verá que -ldl ya no está incluido.
Es por eso que la configuración LIBS=-ldl
funciona (y posiblemente otros enfoques que afectan el uso de objetos compartidos).
Según el registro de CAMBIOS, se realizó una modificación al pasar de 0.9.6h a 0.9.7 de modo que openssl no siempre necesita la carga dinámica de objetos compartidos. No creo que el cambio en el archivo openssl.pc haya ocurrido al mismo tiempo. No he encontrado cuándo se realizó ese cambio.
Así que creo que esto es técnicamente un error en el uso de pkg-config por parte de Apache para determinar las bibliotecas necesarias para compilar. Me encontré con el mismo problema al intentar compilar Apache 2.2.31, por lo que el problema existe desde hace bastante tiempo.