Как построить curl с последним openssl?

18

Поэтому я строю openssl

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

Я строю локон

./configure --with-ssl 
make
make install

OpenSSL выглядит правильно установленным:

openssl version
OpenSSL 1.0.1g 7 Apr 2014

однако curl использует старую версию openssl (1.0.1f вместо 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 

как заставить curl использовать новую версию?

Я хочу попробовать новейшие версии, потому что я борюсь с какой-то странной ошибкой openssl / curl # 1 # 2

Редактировать: я тоже пытался ./configure --with-ssl=/usr/local/ssl/include/openssl, безуспешно

Edit2: пока я тоже пробовал:

  • 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

нет успеха ...

Питер
источник

Ответы:

13

Вам необходимо указать каталог, в котором установлен OpenSSL (ваша символическая ссылка не является ни необходимой, ни достаточной)

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

РЕДАКТИРОВАТЬ: В качестве альтернативы, вы можете установить PKG_CONFIG_PATHпеременную среды (как предложено ./configure --help):

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

fkraiem
источник
1
Первый вариант дает мне, configure: error: OpenSSL libs and/or directories were not found where specified!пожалуйста, посмотрите мое редактирование - нет ошибки с, --with-ssl=/usr/local/ssl/include/opensslно используется старый openssl. второй вариант настраивает curl без HTTPS
Peter
Возможно, я немного ошибся в каталогах, у меня сейчас нет доступа к Linux-серверу ... По сути, ваша ручная установка OpenSSL openssl.pcкуда-то поместила файл , вам нужно указать PKG_CONFIG_PATHкаталог, в котором находится этот файл (и убедитесь, что Вы pkg-configустановили, конечно).
fkraiem
1
Путь к PKG_CONFIG_PATH правильный, у меня тоже установлен pkg-config, но почему-то он не работает. без --with-sslHTTPS нет, с --with-sslним выкидывает ошибкуconfigure: error: OpenSSL libs and/or directories were not found where specified!
Peter
Где и как вы установили ssl? Используйте правильный путь.
Пантера
@ bodhi.zazen Я установил пакет Ubuntu из официальных репозиториев и скомпилировал openssl в/usr/local/ssl
Питер
6
sudo apt-get install libssl-dev
./configure --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

Это все, что мне нужно для сборки curl 7.43 на Ubuntu 15.04

Берто Б.
источник
Прекрасный. Это сработало 19.04. Как-то curlне смог обнаружить мой openssl, поэтому я сделал именно эти шаги, libssl-devи это сработало как шарм!
Алекс
5

Когда я выполнял то же упражнение, я обнаружил, что curl просто не может работать со статическими библиотеками openssl. Он всегда искал динамику, независимо от того, что я делал, поэтому в итоге я сделал три вещи, которые мне помогли

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

Последняя команда с флагом -V покажет версию openssl, используемую curl. Я добавил / usr / local / lib в LD_LIBRARY_PATH, чтобы убедиться, что curl использует правильную версию libcurl.

Олег Гриб
источник
Это помогло мне, особенно то, LD_LIBRARY_PATHчто я добавил в bash_profile. Я сделал нечто подобное, но вместо первой строки я использовал export CFLAGS=-fPIC; ./config shared(не enable-shared). Я использовал curl, --with-ssl=/usr/local/sslхотя аргумент path мог быть излишним.
mahemoff
1
Я рад, что это сработало для вас, и да, путь в --with-ssl избыточен, потому что вы указали расположение по умолчанию для сборки.
Олег Гриб
4

Это был долгий и трудный путь для меня. Часы и часы (вы знаете, как это). Вот что я нашел:

Для Ubuntu 12.04 / 14.04 вы должны вручную установить как openssl, так и curl

Вручную установите 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

ЕСЛИ ВЫ ХОТИТЕ NGHTTP2 (опционально / рекомендуется):

# 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

Вручную установите 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

Заключительные шаги

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

Теперь, когда вы закончите, попробуйте $ curl --versionи убедитесь, что вы видите правильную версию openssl там. В частности, openssl> = 1.0.2g (и nghttp2, если вы выбрали)

$ 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 

цитаты: curl opennssl

Jacksonkr
источник
2
./configure --with-ssl=/usr/lib/ssl --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

После нескольких часов работы мне удалось включить https с помощью libcurl 7.38 в Ubuntu 15.05.

Dev
источник
1

Мне удалось скомпилировать curl, используя статические библиотеки OpenSSL. Это версия tl; dr:

OpenSSL

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

локон

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

LIBS="-ldl"Часть имеет важное значение.

Мартин Мелка
источник
0

Компиляция openssl с использованием конфигурации по умолчанию генерирует только статическую библиотеку , поэтому, если вы хотите использовать статическую библиотеку в curl, вы можете сделать так:

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

Я искал ответ отсюда .

ПРИМЕЧАНИЕ: следуя этому пути, генерируется только статическая библиотека curl.

pingsoli
источник
0

Я обычно следовал ответу Джексонкра, но мне нужно было все вышеупомянутое другими вместе:

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

--disable-shared я думаю, это необязательно, просто мне это нужно

Федор Беневоленский
источник