Como criar curl com o mais recente openssl?

18

Então eu construo o openssl

./config
make
sudo make install
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

Eu construo onda

./configure --with-ssl 
make
make install

O OpenSSL parece instalado corretamente:

openssl version
OpenSSL 1.0.1g 7 Apr 2014

no entanto, o curl usa a versão antiga do openssl (1.0.1f em vez de 1.0.1g):

curl --version
curl 7.37.0 (x86_64-unknown-linux-gnu) libcurl/7.37.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 libssh2/1.4.3 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP 

como fazer curl usar nova versão?

Eu quero experimentar as versões mais recentes, porque estou lutando com um bug estranho no openssl / curl # 1 # 2

Edit: Eu também tentei ./configure --with-ssl=/usr/local/ssl/include/openssl, sem sucesso

Edit2: Até agora eu também tentei:

  • sudo ./configure --with-ssl --with-libssl-prefix=/usr/local/ssl
  • ./configure --with-ssl=/usr/local/ssl
  • PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure
  • PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --with-ssl
  • PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --with-ssl=/usr/local/ssl/include/openssl

sem sucesso...

Pedro
fonte

Respostas:

13

Você precisa especificar o diretório em que o OpenSSL está instalado (seu link simbólico não é necessário nem suficiente)

./configure --with-ssl=/usr/local/ssl

EDIT: Como alternativa, você pode definir sua PKG_CONFIG_PATHvariável de ambiente (conforme sugerido por ./configure --help):

PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure

Fkraiem
fonte
11
A primeira opção me dá. configure: error: OpenSSL libs and/or directories were not found where specified!Por favor, veja minha edição - não há erro, --with-ssl=/usr/local/ssl/include/opensslmas o antigo openssl é usado. segunda opção configura onda sem HTTPS
Peter
Talvez eu tenha entendido os diretórios um pouco errados, não tenho acesso a uma caixa Linux agora ... Basicamente, sua instalação manual do OpenSSL colocou um arquivo em openssl.pcalgum lugar, você precisa apontar PKG_CONFIG_PATHpara o diretório em que esse arquivo está (e verifique se você pkg-configinstalou, é claro).
precisa saber é
11
O caminho PKG_CONFIG_PATH está correto, eu também tenho o pkg-config instalado, mas de alguma forma não funciona. sem --with-sslnão há HTTPS, com --with-sslele gera erro #configure: error: OpenSSL libs and/or directories were not found where specified!
Peter
Onde e como você instalou o ssl? Use o caminho correto.
Panther
@ bodhi.zazen tenho instalar o pacote Ubuntu a partir de repositórios oficiais e openssl compilado/usr/local/ssl
Peter
5

O que eu descobri, quando estava fazendo o mesmo exercício, é que o curl simplesmente não pode trabalhar com bibliotecas estáticas openssl. Ele estava sempre procurando por dinâmica, não importa o que eu estivesse fazendo, então, eventualmente, fiz três coisas que funcionaram para mim

Configured openssl with enable-shared: ./config enable-shared
Configured curl with openssl: ./configure --with-ssl
Used LD_LIBRARY_PATH: LD_LIBRARY_PATH=/usr/local/lib:/usr/local/ssl/lib /usr/local/bin/curl -V

O último comando com o sinalizador -V mostrará a versão openssl usada pelo curl. Adicionei / usr / local / lib ao LD_LIBRARY_PATH para garantir que o curl use a versão correta do libcurl.

Oleg Gryb
fonte
Isso me ajudou, principalmente o LD_LIBRARY_PATHque eu adicionei ao bash_profile. Fiz algo parecido, mas em vez da primeira linha, usei export CFLAGS=-fPIC; ./config shared(não o compartilhamento-ativado). Para curl, usei --with-ssl=/usr/local/sslembora o caminho arg possa ter sido redundante.
mahemoff
11
Estou feliz que funcionou para você e sim, o caminho em --with-ssl é redundante, porque o que você forneceu é um local padrão para a compilação.
Oleg Gryb
5
sudo apt-get install libssl-dev
./configure --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

É tudo o que eu precisava para criar o curl 7.43 no ubuntu 15.04

Berto B.
fonte
4

Este foi um caminho longo e árduo para mim. Horas e horas (você sabe como é). Aqui está o que eu encontrei:

Para o Ubuntu 12.04 / 14.04, você precisa instalar manualmente o openssl e o curl

Instale manualmente o openssl 1.0.2g:

sudo apt-get install make # (Install compiling library Make)
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz # (Download the latest OpenSSL 1.0.2g binaries)
tar -xzvf openssl-1.0.2g.tar.gz # (Extract the tar ball to the local directory)
cd openssl-1.0.2g # (Enter extracted OpenSSL directory)
sudo ./config # (Configure binaries for compiling)
sudo make install # (install configured binaries)
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl` # (This will create a sym link to the new binaries)
openssl version -v

SE VOCÊ QUER NGHTTP2 (opcional / recomendado):

# Get build requirements
# Some of these are used for the Python bindings
# this package also installs
sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \
  zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
  libjemalloc-dev cython python3-dev python-setuptools

# Build nghttp2 from source
git clone https://github.com/tatsuhiro-t/nghttp2.git
cd nghttp2
autoreconf -i
automake
autoconf
./configure
make
sudo make install

Instale manualmente o curl:

cd ~
sudo apt-get build-dep curl
wget http://curl.haxx.se/download/curl-7.46.0.tar.bz2
tar -xvjf curl-7.46.0.tar.bz2
cd curl-7.46.0
./configure --with-nghttp2 --with-ssl --with-libssl-prefix=/usr/local/ssl # This is the line I had the most trouble with, especially figure out --with-libssl-prefix
make
sudo make install
sudo ldconfig

Etapas finais

$ sudo ldconfig
$ sudo service apache2 restart # if you're using apache

Agora que você terminou, tente $ curl --versione veja a versão correta do openssl lá. Especificamente openssl> = 1.0.2g (e nghttp2 se você optou por isso)

$ curl --version
curl 7.50.2 (x86_64-pc-linux-gnu) libcurl/7.50.2 OpenSSL/1.0.2k zlib/1.2.8 nghttp2/1.21.0-DEV
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets 

citações: curl opennssl

Jacksonkr
fonte
2
./configure --with-ssl=/usr/lib/ssl --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

Depois de algumas horas, consegui ativar o https com libcurl 7.38 no ubuntu 15.05

Dev
fonte
1

Consegui compilar curl usando bibliotecas estáticas OpenSSL. Esta é a versão tl; dr:

OpenSSL

./config no-shared --prefix=$PWD/_installdir
make depend && make && make install

ondulação

LIBS="-ldl" ./configure --prefix=$PWD/_installdir --with-ssl=/something/opensslrootdir/_installdir --disable-shared
make && make install

A LIBS="-ldl"parte é essencial.

Martin Melka
fonte
0

Compilar o openssl, o uso padrão configure apenas gera a biblioteca estática ; portanto, se você deseja usar a biblioteca estática em curl, pode fazer o seguinte:

LIBS="-ldl -lpthread" ./configure --disable-shared --prefix=/usr/local/curl --with-ssl=/usr/local/ssl

Eu procurei a resposta a partir daqui .

NOTA: seguir esse caminho gera apenas uma biblioteca estática de ondulação.

pingsoli
fonte
0

Geralmente, segui a resposta de Jacksonkr, mas eu precisava de todos os itens acima mencionados juntos:

LIBS="-ldl" PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --with-ssl --with-libssl-prefix=/usr/local/ssl --disable-shared

--disable-shared é opcional, eu acho, é só preciso

Feodor Benevolenski
fonte