Não é possível compilar o Apache: “Erro, as bibliotecas SSL / TLS estavam faltando ou eram inutilizáveis”

6
  • 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

Estes detalhes são provavelmente irrelevantes, mas: Eu estou usando o yaourt com o customizepkg para construir o Apache a partir da fonte toda vez que houver uma atualização disponível para que eu possa mudar o suexec docroot para o que eu quero sem editar manualmente o PKGBUILD.

No passado, isso funcionou perfeitamente; no entanto, parece que agora, por qualquer motivo, o Apache não irá compilar. Acabei de fazer uma atualização completa do sistema para que possa 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}

Quando tento construir, parece correr 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, muitos relataram que a solução era export LDFLAGS=-ldl , mas isso não teve efeito para mim, seja no script de construção ou no meu perfil bash.

    
por Hugh Guiney 16.07.2012 / 05:55

5 respostas

4

Outras pesquisas no Google podem levar você a definir algumas variáveis de ambiente como estas:

$ env LDFLAGS=-ldl

OR

$ export LIBS=-ldl

O primeiro falhou para mim e me deu o mesmo erro, mas o segundo funcionou.

Se o primeiro não estiver funcionando para você, porque você precisa executar o comando como linha única. Como ele toma a variável LDFLAGS run-time e não irá salvar.

Ex: env LDFLAGS="- ldl" \ ./configure --prefix = / some / path ...

    
por 06.05.2013 / 19:20
2

Parece que a configuração do httpd está incluindo 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 opção --with-ssl para corresponder ao prefixo da sua instalação mais recente do OpenSSL.

--enable-ssl \
--with-ssl=/usr/local \
    
por 03.08.2012 / 16:06
2

Eu 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 ambiente de configuração consertaria 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 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 eu ainda não tenho uma resposta para isso.

Vou continuar a procurar respostas sobre o problema do sslv2 e publicá-lo no tópico relevante do stackexchange quando tiver resolvido o problema.

    
por 13.08.2014 / 13:12
0

Não sei se mais alguém está com esse problema. Eu me deparo com esse problema ao criar um script no meu mac. O problema foi com a compilação openssl . Basicamente, o openssl estava sendo compilado como i386 em vez de x86_64. Então eu usei o openssl configure assim:

./Configure darwin64-x86_64-cc shared --prefix=/usr/local/openssl-1.0.2g

Eu nunca tive esse problema no servidor do Office, porque openssl é compilado como x86_64 por padrão.

    
por 23.07.2016 / 22:51
0

Isso acontece porque o arquivo pkg-config para o openssl não especifica mais uma dependência na libdl. Veja as versões mais recentes do openssl.pc e você verá que o -ldl não está mais incluído.

É por isso que a configuração de LIBS=-ldl funciona (e possivelmente outras abordagens que afetam o uso de objetos compartilhados).

De acordo com o log de CHANGES, uma modificação foi feita passando de 0.9.6h para 0.9.7, de forma que o openssl nem sempre precisa de carregamento dinâmico de objetos compartilhados. Eu não acredito que a mudança para o arquivo openssl.pc aconteceu ao mesmo tempo. Não encontrei quando essa alteração foi feita.

Então eu acho que isso é tecnicamente um bug no uso do pkg-config pelo Apache para determinar as bibliotecas necessárias para construir. Acabei de me deparar com o mesmo problema ao tentar construir o Apache 2.2.31, por isso o problema já existe há algum tempo.

    
por 03.12.2016 / 10:25