Jak budować curl z najnowszym openssl?

18

Więc buduję openssl

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

Buduję loki

./configure --with-ssl 
make
make install

Wygląda na to, że OpenSSL jest zainstalowany poprawnie:

openssl version
OpenSSL 1.0.1g 7 Apr 2014

jednak curl używa starej wersji openssl (1.0.1f zamiast 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 

jak sprawić, by curl używał nowej wersji?

Chcę wypróbować najnowsze wersje, ponieważ walczę z jakimś dziwnym błędem openssl / curl # 1 # 2

Edycja: Próbowałem również ./configure --with-ssl=/usr/local/ssl/include/openssl, bez powodzenia

Edycja2: Do tej pory próbowałem również:

  • 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

bez powodzenia...

Piotr
źródło

Odpowiedzi:

13

Musisz podać katalog, w którym zainstalowany jest OpenSSL (twoje dowiązanie symboliczne nie jest ani konieczne, ani wystarczające)

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

EDYCJA: Alternatywnie możesz ustawić PKG_CONFIG_PATHzmienną środowiskową (zgodnie z sugestią ./configure --help):

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

fkraiem
źródło
1
pierwsza opcja daje mi configure: error: OpenSSL libs and/or directories were not found where specified!Proszę zobaczyć moją edycję - nie ma błędu, --with-ssl=/usr/local/ssl/include/opensslale używany jest stary openssl. druga opcja konfiguruje zawijanie bez HTTPS
Peter
Mogłem nieco pomylić katalogi, nie mam teraz dostępu do Linux-a ... Zasadniczo, twoja ręczna instalacja OpenSSL umieściła openssl.pcgdzieś plik , musisz wskazać PKG_CONFIG_PATHkatalog, w którym znajduje się ten plik (i upewnij się, że masz pkg-configzainstalowany, oczywiście).
fkraiem
1
Ścieżka PKG_CONFIG_PATH jest poprawna, mam również zainstalowany pkg-config, ale jakoś nie działa. bez --with-sslnie ma HTTPS, z --with-ssltym rzuca błądconfigure: error: OpenSSL libs and/or directories were not found where specified!
Peter
Gdzie i jak zainstalowałeś ssl? Wybierz prawidłową ścieżkę.
Panther
@ bodhi.zazen Zainstalowałem zarówno pakiet Ubuntu z oficjalnych repozytoriów, jak i skompilowałem openssl w/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

To wszystko, czego potrzebowałem, aby zbudować curl 7.43 na Ubuntu 15.04

Berto B.
źródło
Piękny. To zadziałało 19.04. Jakoś curlnie mógł mnie wykryć openssl, więc zrobiłem te dokładne kroki libssl-devi działało to jak urok!
Alex
5

Podczas tego samego ćwiczenia dowiedziałem się, że curl po prostu nie działa z bibliotekami statycznymi openssl. Zawsze szukałem dynamiki, bez względu na to, co robiłem, więc ostatecznie zrobiłem trzy rzeczy, które działały dla mnie

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

To ostatnie polecenie z flagą -V wyświetli wersję openssl używaną przez curl. Dodałem / usr / local / lib do LD_LIBRARY_PATH, aby upewnić się, że curl używa właściwej wersji libcurl.

Oleg Gryb
źródło
Pomogło mi to, szczególnie, LD_LIBRARY_PATHco dodałem do bash_profile. Zrobiłem coś podobnego, ale zamiast pierwszego wiersza użyłem export CFLAGS=-fPIC; ./config shared(nie włączaj-udostępniaj). Do zwijania użyłem, --with-ssl=/usr/local/sslchociaż ścieżka arg mogła być zbędna.
mahemoff,
1
Cieszę się, że to zadziałało i tak, ścieżka w --with-ssl jest zbędna, ponieważ to, co podałeś, jest domyślną lokalizacją kompilacji.
Oleg Gryb,
4

To była dla mnie długa i żmudna ścieżka. Godziny i godziny (wiesz jak to jest). Oto, co znalazłem:

W systemie Ubuntu 12.04 / 14.04 musisz ręcznie zainstalować zarówno openssl, jak i curl

Zainstaluj ręcznie 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

JEŚLI CHCESZ NGHTTP2 (opcjonalnie / zalecane):

# 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

Ręcznie zainstaluj 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

Ostatnie kroki

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

Po $ curl --versionzakończeniu spróbuj upewnić się, że widzisz tam poprawną wersję openssl. W szczególności openssl> = 1.0.2g (i nghttp2, jeśli zdecydowałeś się na to)

$ 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 

cytowania: curl opennssl

Jacksonkr
źródło
2
./configure --with-ssl=/usr/lib/ssl --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

Po kilku godzinach zmagania udało mi się włączyć https z libcurl 7.38 w Ubuntu 15.05

Dev
źródło
1

Udało mi się skompilować curl przy użyciu statycznych bibliotek OpenSSL. To jest wersja tl; dr:

OpenSSL

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

kędzior

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

Ta LIBS="-ldl"część jest niezbędna.

Martin Melka
źródło
0

Kompilacja openssl używa domyślnej konfiguracji generuje tylko bibliotekę statyczną , więc jeśli chcesz używać biblioteki statycznej w curl, możesz to zrobić w następujący sposób:

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

Szukałem odpowiedzi stąd .

UWAGA: postępowanie w ten sposób generuje tylko statyczną bibliotekę curl.

pingsoli
źródło
0

Generalnie podążałem za odpowiedzią Jacksonkr, ale potrzebowałem wszystkich wyżej wymienionych przez innych razem:

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

--disable-shared jest opcjonalny, tak myślę, po prostu go potrzebuję

Feodor Benevolenski
źródło