Як створити найновішу версію cURL з вихідного коду?
Можливо, ви зіткнулися з ситуацією, коли версія cURL, встановлена в вашій операційній системі, є застарілою. У таких випадках, для підтримки новітніх функцій або виправлення певних помилок, потрібно скомпілювати cURL самостійно з вихідного коду.
Наприклад, нещодавно я проводив тестування HTTP/3 з використанням cURL на CentOS. Виявилося, що стандартна версія cURL не підтримувала цей протокол, що змусило мене скомпілювати оновлену версію з вихідного коду. Звісно, cURL використовується для багатьох інших задач, не тільки для HTTP/3.
[[email protected] ~]# curl --version
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.44 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets
[[email protected] ~]#
Остання версія cURL (на момент написання статті, 7.67) має підтримку HTTP/3. Тому, щоб використовувати нові можливості, мені довелося створити її з вихідних кодів. Цей приклад є лише одним із багатьох; ваші потреби можуть відрізнятися.
Далі я покажу процес компіляції версії 7.67 (останньої на момент написання) на CentOS 8.x і Ubuntu 20.x. Процедура є загальною і може бути застосована для будь-якої іншої версії cURL.
Підготовка до встановлення
Перш ніж розпочати, нам необхідно встановити залежності, що потрібні для компіляції.
- Оновлення системи (хоч це й необов’язково, рекомендується для встановлення останніх версій пакетів)
yum update -y
- Встановлення необхідних пакетів:
yum install wget gcc openssl-devel -y
wget https://curl.haxx.se/download/curl-7.67.0.tar.gz
- Розпакування завантаженого архіву:
gunzip -c curl-7.67.0.tar.gz | tar xvf -
Це створить нову папку з вихідними файлами cURL.
Компіляція cURL на CentOS/RHEL
Тепер, коли у нас є вихідний код, ми готові до компіляції.
- Перейдіть до щойно створеної папки:
cd curl-7.67.0
- Налаштуйте конфігурацію з підтримкою SSL:
./configure --with-ssl
- Ви отримаєте вихід, подібний до цього:
configure: Configured to build curl/libcurl:
Host setup: x86_64-pc-linux-gnu
Install prefix: /usr/local
Compiler: gcc
CFLAGS: -Werror-implicit-function-declaration -O2 -Wno-system-headers -pthread
CPPFLAGS:
LDFLAGS:
LIBS: -lssl -lcrypto -lssl -lcrypto -lz
curl version: 7.67.0
SSL: enabled (OpenSSL)
SSH: no (--with-libssh2)
zlib: enabled
brotli: no (--with-brotli)
GSS-API: no (--with-gssapi)
TLS-SRP: no (--enable-tls-srp)
resolver: POSIX threaded
IPv6: enabled
Unix sockets: enabled
IDN: no (--with-{libidn2,winidn})
Build libcurl: Shared=yes, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
Code coverage: disabled
SSPI: no (--enable-sspi)
ca cert bundle: /etc/pki/tls/certs/ca-bundle.crt
ca cert path: no
ca fallback: no
LDAP: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS: no (--enable-ldaps)
RTSP: enabled
RTMP: no (--with-librtmp)
Metalink: no (--with-libmetalink)
PSL: no (libpsl not found)
Alt-svc: no (--enable-alt-svc)
HTTP2: disabled (--with-nghttp2)
HTTP3: disabled (--with-ngtcp2, --with-quiche)
ESNI: no (--enable-esni)
Protocols: DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
Features: SSL IPv6 UnixSockets libz AsynchDNS NTLM NTLM_WB HTTPS-proxy
make
make install
Процес компіляції займе деякий час. Після завершення ви можете перевірити встановлену версію.
Компіляція cURL на Ubuntu
Припускаємо, що ви вже завантажили вихідний код cURL, як описано вище.
- Перейдіть до папки з розпакованими вихідними файлами.
- Встановіть необхідні залежності:
apt-get install -y binutils-common binutils make
- Якщо залежність binutils не встановлена, ви можете отримати помилку:
configure: error: ar not found in PATH. Cannot continue without ar.
- Налаштуйте збірку з підтримкою SSL:
./configure --with-ssl
- Якщо конфігурація пройшла успішно, завершіть встановлення:
make
make install
Готово!
Перевірка встановлення
Для перевірки версії cURL скористайтеся командою --version
:
# curl --version
curl 7.67.0 (x86_64-pc-linux-gnu) libcurl/7.67.0 OpenSSL/1.0.2k-fips zlib/1.2.7
Release-Date: 2019-11-06
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL UnixSockets
#
Висновок
Як бачите, компіляція cURL з вихідного коду – це нескладний процес, якщо є чіткі інструкції. Сподіваюся, що ця стаття допоможе вам в оновленні cURL.
Чи була ця стаття корисною? Поділіться нею з іншими!