Як зібрати та встановити останню версію cURL на CentOS і Ubuntu?

Як створити найновішу версію 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.

Чи була ця стаття корисною? Поділіться нею з іншими!