
- Arch Linux 2011.08.19 (Linux 3.4.2 i686)
- Apache 2.2.22 → 2.2.22 (recompilar e reinstalar)
- OpenSSL 1.0.1.c-1
Esses detalhes provavelmente são irrelevantes, mas: estou usando yaourt com customizepkg para construir o Apache a partir do código-fonte sempre que há uma atualização disponível para que eu possa alterar o docroot suexec para o que desejo sem editar manualmente o PKGBUILD.
No passado isto funcionou perfeitamente; entretanto, parece que agora, por alguma razão, o Apache não irá compilar. Acabei de fazer uma atualização completa do sistema, então isso pode ter algo a ver com isso.
Aqui está a linha de configuração do 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}
Porém, quando tento construir, parece funcionar bem até chegar ao material do 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]
==> -------------------------------
==>
Pesquisando no Google, muitos relataram que a solução era export LDFLAGS=-ldl
, mas isso não teve nenhum efeito para mim, seja definido no script de construção ou no meu perfil bash.
Responder1
Tive o mesmo problema ao atualizar o openssl de 0.9.8zb para 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
Nenhuma das soluções com configuração de ambiente corrigiria a mensagem de erro que recebi.
Minha solução foi:
$/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
O problema foi corrigido pelo valor -shared na configuração do openssl. Agora me deparo com outro problema dizendo que um método sslv2 não está acessível. Mas isso não está relacionado a esse problema e ainda não tenho uma resposta para isso.
Continuarei procurando respostas sobre o problema do sslv2 e postarei no tópico relevante do stackexchange quando o resolver.
Responder2
Outras pesquisas no Google podem levar você a definir algumas variáveis de ambiente como estas:
$ env LDFLAGS=-ldl
OU
$ export LIBS=-ldl
O primeiro falhou para mim e me deu o mesmo erro, mas o segundo funcionou.
Se o primeiro não funcionar para você, você precisa executar o comando como linha única. Como leva o tempo de execução da variável LDFLAGS e não será salvo.
Ex: env LDFLAGS="-ldl" \ ./configure --prefix=/some/path ...
Responder3
Parece que a configuração do httpd inclui a versão errada do OpenSSL.
checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no
Isso pode acontecer se você tiver várias instalações do OpenSSL. Tente definir a --with-ssl
opção para corresponder ao prefixo da sua instalação OpenSSL mais recente.
--enable-ssl \
--with-ssl=/usr/local \
Responder4
Isso acontece porque o arquivo pkg-config para openssl não especifica mais uma dependência do libdl. Observe as versões mais recentes do openssl.pc e você verá que -ldl não está mais incluído.
É por isso que a configuração LIBS=-ldl
funciona (e possivelmente outras abordagens que afetam o uso de objetos compartilhados).
De acordo com o log CHANGES, foi feita uma modificação ao passar de 0.9.6h para 0.9.7, de modo que o openssl nem sempre precisa do carregamento dinâmico de objetos compartilhados. Não acredito que a alteração no arquivo openssl.pc tenha ocorrido ao mesmo tempo. Não descobri quando essa alteração foi feita.
Então, acho que isso é tecnicamente um bug no uso do pkg-config pelo Apache para determinar as bibliotecas necessárias para construir. Acabei de encontrar o mesmo problema ao tentar construir o Apache 2.2.31, então o problema já existe há algum tempo.