¿Cómo construir curl con el último openssl?

18

Entonces construyo openssl

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

Construyo rizo

./configure --with-ssl 
make
make install

OpenSSL parece instalado correctamente:

openssl version
OpenSSL 1.0.1g 7 Apr 2014

sin embargo, curl usa la versión antigua de openssl (1.0.1f en lugar 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 

¿Cómo hacer que curl use una nueva versión?

Quiero probar las versiones más nuevas, porque estoy luchando con un extraño error de openssl / curl # 1 # 2

Editar: también lo intenté ./configure --with-ssl=/usr/local/ssl/include/openssl, sin éxito

Edit2: Hasta ahora también intenté:

  • 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

sin éxito...

Peter
fuente

Respuestas:

13

Debe especificar el directorio donde está instalado OpenSSL (su enlace simbólico no es necesario ni suficiente)

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

EDITAR: Alternativamente, puede establecer su PKG_CONFIG_PATHvariable de entorno (como lo sugiere ./configure --help):

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

fkraiem
fuente
1
primera opción me da configure: error: OpenSSL libs and/or directories were not found where specified!Por favor, vea mi edición, no hay ningún error con --with-ssl=/usr/local/ssl/include/opensslpero se utiliza el antiguo openssl. segunda opción configura el rizo sin HTTPS
Peter
Puede que haya equivocado los directorios, no tengo acceso a un cuadro de Linux en este momento ... Básicamente, su instalación manual de OpenSSL coloca un archivo en openssl.pcalgún lugar, debe señalar PKG_CONFIG_PATHel directorio donde está ese archivo (y asegurarse has pkg-configinstalado, por supuesto).
fkraiem
1
La ruta PKG_CONFIG_PATH es correcta, también tengo instalado pkg-config, pero de alguna manera no funciona. sin --with-sslno hay HTTPS, con --with-sslerror de lanzamientoconfigure: error: OpenSSL libs and/or directories were not found where specified!
Peter
¿Dónde y cómo instaló ssl? Usa el camino correcto.
Panther
@ bodhi.zazen. He instalado el paquete de Ubuntu desde los repositorios oficiales y he compilado openssl en/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

Es todo lo que necesitaba para construir curl 7.43 en ubuntu 15.04

Berto B.
fuente
Hermosa. Esto funcionó el 19.04. De alguna manera curlno podía detectar mi openssl, así que hice estos pasos exactos libssl-devy funcionó de maravilla.
Alex
5

Lo que descubrí, cuando estaba haciendo el mismo ejercicio, es que curl simplemente no puede funcionar con las bibliotecas estáticas openssl. Siempre estaba buscando dinámicas, sin importar lo que estuviera haciendo, así que eventualmente hice tres cosas que me funcionaron.

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

El último comando con el indicador -V mostrará la versión de openssl utilizada por curl. Agregué / usr / local / lib a LD_LIBRARY_PATH para asegurarme de que curl usa la versión correcta de libcurl.

Oleg Gryb
fuente
Esto me ayudó, particularmente LD_LIBRARY_PATHlo que he agregado a bash_profile. Hice algo similar, pero en lugar de la primera línea, usé export CFLAGS=-fPIC; ./config shared(no enable-shared). Para curl, usé --with-ssl=/usr/local/sslaunque la ruta arg puede haber sido redundante.
mahemoff
1
Me alegro de que funcionó para usted y sí, la ruta en --with-ssl es redundante, porque lo que ha proporcionado es una ubicación predeterminada para la compilación.
Oleg Gryb
4

Este fue un camino largo y arduo para mí. Horas y horas (ya sabes cómo es). Esto es lo que encontré:

Para Ubuntu 12.04 / 14.04 debe instalar manualmente openssl y curl

Instalar manualmente 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 QUIERES 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

Instalar manualmente 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

Pasos finales

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

Ahora que ha terminado, intente $ curl --versiony asegúrese de ver la versión correcta de openssl allí. Específicamente openssl> = 1.0.2g (y nghttp2 si opta por él)

$ 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 

citas: curl opennssl

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

Después de luchar durante algunas horas, logré habilitar https con libcurl 7.38 en ubuntu 15.05

Dev
fuente
1

Logré compilar curl usando bibliotecas estáticas de OpenSSL. Esta es la versión tl; dr:

OpenSSL

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

rizo

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

La LIBS="-ldl"parte es esencial.

Martin Melka
fuente
0

Compilar openssl use default configure solo genera una biblioteca estática , por lo tanto, si desea usar la biblioteca estática en curl, puede hacer lo siguiente:

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

Busqué la respuesta desde aquí .

NOTA: seguir este camino solo genera una biblioteca estática curl.

Pingsoli
fuente
0

Generalmente seguí la respuesta de Jacksonkr, pero necesitaba todo lo mencionado anteriormente por otros juntos:

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

--disable-shared es opcional, supongo, es solo que lo necesito

Feodor Benevolenski
fuente