วิธีสร้าง 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 bug ที่แปลกประหลาด# 1 # 2

แก้ไข: ฉันยังลอง./configure --with-ssl=/usr/local/ssl/include/opensslไม่ประสบความสำเร็จ

แก้ไข 2: จนถึงตอนนี้ฉันก็ลอง:

  • 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 (symlink ของคุณไม่จำเป็นหรือไม่เพียงพอ)

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

แก้ไข: อีกวิธีหนึ่งคุณสามารถตั้งค่าPKG_CONFIG_PATHตัวแปรสภาพแวดล้อมของคุณ(ตามที่แนะนำโดย./configure --help):

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


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-sslไม่มี HTTPS --with-sslก็จะเกิดข้อผิดพลาดconfigure: error: OpenSSL libs and/or directories were not found where specified!
Peter

คุณติดตั้ง ssl ที่ไหนและอย่างไร ใช้เส้นทางที่ถูกต้อง
Panther

@ 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 static libraries ได้ มันค้นหาไดนามิกอยู่เสมอไม่ว่าฉันจะทำอะไรในที่สุดฉันก็ทำสามสิ่งที่เหมาะกับฉัน

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(ไม่เปิดใช้งานร่วมกัน) สำหรับ curl ฉันใช้--with-ssl=/usr/local/sslถึงแม้ว่าเส้นทาง arg อาจซ้ำซ้อนกัน
mahemoff

1
ฉันดีใจที่มันได้ผลกับคุณและใช่เส้นทางใน --with-ssl ซ้ำซ้อนเพราะสิ่งที่คุณให้ไว้เป็นตำแหน่งเริ่มต้นสำหรับงานสร้าง
Oleg Gryb

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


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 ได้


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

ผมขอคำตอบจากที่นี่

หมายเหตุ: ทำตามวิธีนี้จะสร้างไลบรารีคงที่ของขดเท่านั้น


0

ฉันมักจะทำตามคำตอบของ Jacksonkr แต่ฉันต้องการคนอื่น ๆ ที่กล่าวถึงทั้งหมดข้างต้นด้วยกัน:

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

--disable-shared เป็นทางเลือกฉันเดาว่ามันแค่ฉันต้องการมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.