Comment construire curl avec le dernier openssl?

18

Je construis donc openssl

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

Je construis une boucle

./configure --with-ssl 
make
make install

OpenSSL semble installé correctement:

openssl version
OpenSSL 1.0.1g 7 Apr 2014

cependant curl utilise l'ancienne version openssl (1.0.1f au lieu 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 

comment faire utiliser curl nouvelle version?

Je veux essayer les dernières versions, car je me bats avec un bug étrange openssl / curl # 1 # 2

Edit: j'ai aussi essayé ./configure --with-ssl=/usr/local/ssl/include/openssl, sans succès

Edit2: Jusqu'à présent, j'ai également essayé:

  • 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

Sans succès...

Peter
la source

Réponses:

13

Vous devez spécifier le répertoire où OpenSSL est installé (votre lien symbolique n'est ni nécessaire ni suffisant)

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

EDIT: Alternativement, vous pouvez définir votre PKG_CONFIG_PATHvariable d'environnement (comme suggéré par ./configure --help):

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

fkraiem
la source
1
la première option me donne configure: error: OpenSSL libs and/or directories were not found where specified!S'il vous plaît voir mon édition - il n'y a pas d'erreur --with-ssl=/usr/local/ssl/include/opensslmais l'ancien openssl est utilisé. deuxième option configure curl sans HTTPS
Peter
J'ai peut-être obtenu des répertoires légèrement erronés, je n'ai pas accès à une boîte Linux pour le moment ... Fondamentalement, votre installation manuelle d'OpenSSL a mis un fichier openssl.pcquelque part, vous devez pointer PKG_CONFIG_PATHvers le répertoire où se trouve ce fichier (et vous assurer vous avez pkg-configinstallé, bien sûr).
fkraiem
1
Le chemin PKG_CONFIG_PATH est correct, j'ai pkg-config installé aussi, mais en quelque sorte cela ne fonctionne pas. sans --with-sslil n'y a pas de HTTPS, avec --with-sslça jette une erreurconfigure: error: OpenSSL libs and/or directories were not found where specified!
Peter
Où et comment avez-vous installé SSL? Utilisez le bon chemin.
Panther
@ bodhi.zazen J'ai installé le paquet Ubuntu à partir des référentiels officiels et openssl compilé dans/usr/local/ssl
Peter
6
sudo apt-get install libssl-dev
./configure --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

Est-ce tout ce dont j'avais besoin pour construire curl 7.43 sur Ubuntu 15.04

Berto B.
la source
Magnifique. Cela a fonctionné le 19.04. D'une manière ou d'une autre, curlje ne pouvais pas le détecter openssl, alors j'ai fait ces étapes exactes libssl-devet cela a fonctionné comme un charme!
Alex
5

Ce que j'ai découvert, lorsque je faisais le même exercice, c'est que curl ne peut tout simplement pas fonctionner avec les bibliothèques statiques openssl. Il était toujours à la recherche de dynamique, peu importe ce que je faisais, donc finalement j'ai fait trois choses qui ont fonctionné pour moi

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

La dernière commande avec l'indicateur -V affichera la version openssl utilisée par curl. J'ai ajouté / usr / local / lib à LD_LIBRARY_PATH pour m'assurer que curl utilise la bonne version de libcurl.

Oleg Gryb
la source
Cela m'a aidé, en particulier LD_LIBRARY_PATHque j'ai ajouté à bash_profile. J'ai fait quelque chose de similaire, mais au lieu de la première ligne, j'ai utilisé export CFLAGS=-fPIC; ./config shared(pas activé-partagé). Pour curl, j'ai utilisé --with-ssl=/usr/local/sslbien que le chemin arg ait pu être redondant.
mahemoff
1
Je suis content que cela ait fonctionné pour vous et oui, le chemin dans --with-ssl est redondant, car ce que vous avez fourni est un emplacement par défaut pour la construction.
Oleg Gryb du
4

Ce fut un chemin long et ardu pour moi. Heures et heures (vous savez comment c'est). Voici ce que j'ai trouvé:

Pour Ubuntu 12.04 / 14.04, vous devez installer manuellement à la fois openssl et curl

Installez manuellement 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

SI VOUS VOULEZ NGHTTP2 (facultatif / recommandé):

# 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

Installez manuellement 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

Étapes finales

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

Maintenant que vous avez terminé, essayez de $ curl --versionvous assurer de voir la bonne version de openssl. Plus précisément openssl> = 1.0.2g (et nghttp2 si vous l'avez opté)

$ 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 

citations: curl opennssl

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

Après quelques heures de difficulté, j'ai réussi à activer https avec libcurl 7.38 dans Ubuntu 15.05

Dev
la source
1

J'ai réussi à compiler curl en utilisant des bibliothèques OpenSSL statiques. Voici la version tl; dr:

OpenSSL

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

boucle

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

La LIBS="-ldl"pièce est essentielle.

Martin Melka
la source
0

La compilation d'OpenSL à l'aide de la configuration par défaut génère uniquement une bibliothèque statique , donc, si vous souhaitez utiliser la bibliothèque statique en boucle, vous pouvez faire ceci:

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

J'ai cherché la réponse d' ici .

REMARQUE: suivre cette méthode génère uniquement une bibliothèque statique curl.

pingsoli
la source
0

J'ai généralement suivi la réponse de Jacksonkr, mais j'avais besoin de tout ce qui précède mentionné par d'autres ensemble:

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

--disable-shared est facultatif, je suppose, c'est juste que j'en ai besoin

Feodor Benevolenski
la source