Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

curl-8.2.1 on CentOS 5.8

제목

curl-8.2.1 on CentOS 5.8

1. 준비작업

1.1. 다운로드

https://curl.se/download.html 에서 다운로드 한다.

CentOS 5.8 에서 직접 다운로드 할 수 없고, 다른 장비에서 다운로드 한 파일을 sftp 따위로 올려야 한다.

curl -O -L https://curl.se/download/curl-8.2.1.tar.gz

다만, 필자가 작성한 다른 글에 따라 wget 을 설치했다면, 다음과 같이 할 수도 있다.

/opt/wget-1.21.4/bin/wget \
--no-check-certificate \
https://curl.se/download/curl-8.2.1.tar.gz

1.2. make, gcc 설치

yum install make gcc -y

1.3. gnutls-3.7.10 혹은 openssl-1.1.1u (혹은 openssl-3.0.9 이나 openssl-3.1.1) 설치

openssl 혹은 gnutls 중 1개가 있으면 된다.

gnutls 는 다른 것들과 함께 설치되어야 한다.

  • gmp-6.3.0
  • nettle-3.6
  • p11-kit-0.25.0 : 선택
  • libffi-3.4.4 : p11-kit-0.25.0 가 의존
  • libtasn1-4.19.0 : 선택, p11-kit-0.25.0 가 의존

gnutls-3.7.10 혹은 openssl-1.1.1u (혹은 openssl-3.0.9 이나 openssl-3.1.1) 설치에 대해서는 필자가 작성한 다른 글을 참조한다.

1.3. libssh-0.10.5 혹은 libssh2-1.11.0 설치

libssh-0.10.5 혹은 libssh2-1.11.0 는 선택사항이다. sftp 를 사용할 필요가 없다면, 생략해도 된다.

대부분의 2개 중에 1개만 설치해도 되고, 둘의 차이는 https://libssh2.org/libssh2-vs-libssh.html 를 참고한다.

1.3.1. libssh-0.10.5 설치

libssh-0.10.5 는 다음의 것들과 함께 설치되어야 한다.

  • openssl-1.1.1u 혹은 libgcrypt-1.8.10( + libgpg-error-1.47)
  • cmake-3.9.6

설치방법은 필자가 작성한 다른 글을 참조한다.

1.3.2. libssh2-1.11.0 설치

libssh2-1.11.0 는 다음의 것들과 함께 설치되어야 한다.

  • openssl-1.1.1u 혹은 libgcrypt-1.8.10( + libgpg-error-1.47)

설치방법은 필자가 작성한 다른 글을 참조한다.

2. 컴파일 및 설치

설치 디렉토리(--prefix) 는 알아서 변경한다.

대부분의 Linux 배포판들은 /usr 이 설치 디렉토리(--prefix)이지만, 컴파일해서 설치하는 것들은 /usr/local 이나 /opt 아래에 두는 경우가 많다.

2.1. gnutls-3.7.10 과 함께 설치

gnutls-3.7.10 와 libssh-0.10.5 와 함께 설치하는 방법은 다음과 같다.

$ mkdir -p logs/curl-8.2.1
$ tar xvfz curl-8.2.1.tar.gz > logs/curl-8.2.1/tar.`date +%Y%m%d.%H%M%S`.log 2>&1
$ cd curl-8.2.1
$ LDFLAGS="-L/opt/nettle-3.6/lib64" \
CFLAGS="-I/opt/nettle-3.6/include" \
LD_LIBRARY_PATH=/opt/nettle-3.6/lib64 \
./configure \
--with-gnutls=/opt/gnutls-3.7.10 \
--with-libssh=/opt/libssh-0.10.5 \
--with-libssh2=/opt/libssh2-1.11.0 \
--prefix=/opt/curl-8.2.1 > ../logs/curl-8.2.1/config.`date +%Y%m%d.%H%M%S`.log 2>&1
$ LD_LIBRARY_PATH=/opt/nettle-3.6/lib64 make > ../logs/curl-8.2.1/make.`date +%Y%m%d.%H%M%S`.log 2>&1
$ make install > ../logs/curl-8.2.1/install.`date +%Y%m%d.%H%M%S`.log 2>&1

libssh-0.10.5 및 libssh2-1.11.0 를 제외하고 gnutls-3.7.10 와 함께 설치하는 방법은 다음과 같다.

$ LDFLAGS="-L/opt/nettle-3.6/lib64" \
CFLAGS="-I/opt/nettle-3.6/include" \
LD_LIBRARY_PATH=/opt/nettle-3.6/lib64 \
./configure \
--with-gnutls=/opt/gnutls-3.7.10 \
--prefix=/opt/curl-8.2.1 > ../logs/curl-8.2.1/config.`date +%Y%m%d.%H%M%S`.log 2>&1

2.2. openssl-1.1.1u 과 함께 설치

openssl-1.1.1u 와 libssh-0.10.5 와 함께 설치하는 방법은 다음과 같다.

./configure \
--with-openssl=/opt/openssl-1.1.1u \
--with-libssh=/opt/libssh-0.10.5 \
--with-libssh2=/opt/libssh2-1.11.0 \
--prefix=/opt/curl-8.2.1 > ../logs/curl-8.2.1/config.`date +%Y%m%d.%H%M%S`.log 2>&1

libssh-0.10.5 및 libssh2-1.11.0 를 제외하고 openssl-1.1.1u 와 함께 설치하는 방법은 다음과 같다.

./configure \
--with-openssl=/opt/openssl-1.1.1u \
--prefix=/opt/curl-8.2.1 > ../logs/curl-8.2.1/config.`date +%Y%m%d.%H%M%S`.log 2>&1

3. 적용

3.1. 현재 환경에 적용

현재 환경에서는 다음과 같이 적용한다.

$ export PATH=/opt/curl-8.2.1/bin:${PATH}

gnutls 와 함께 컴파일 했다면, LD_LIBRARY_PATH 환경변수에 nettle-3.6 이 있어야 한다.

$ export LD_LIBRARY_PATH=/opt/nettle-3.6/lib64:${LD_LIBRARY_PATH}

curl 이 다른 응용프로그램의 라이브러리로 이용되고 있을 때는 다음도 추가한다.

$ export LD_LIBRARY_PATH=/opt/curl-8.2.1/lib:${LD_LIBRARY_PATH}

pkg-config 를 사용하는 경우 다음의 내용도 추가할 수 있다.

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/opt/curl-8.2.1/lib/pkgconfig

다음과 같이 ACLOCAL_PATH 를 추가할 수도 있다.

export ACLOCAL_PATH=/opt/curl-8.2.1/share/aclocal:${ACLOCAL_PATH}

3.2. 현재 로그인한 사용자에게 적용

현재 로그인한 사용자에게 적용하려면, ".bash_profile" 파일의 끝에 위의 내용을 추가한다.

3.3. 시스템 전체에 적용

3.3.1. 환경변수 변경

"/etc/bashrc" 파일의 끝에 위의 내용을 추가한다.

4. 문제해결

4.1. libnettle.so.8 을 찾을 수 없다는 에러

다음과 같이 TLS 가 없다는 에러메시지가 출력된다.

checking for gnutls_x509_crt_get_dn2 in -lgnutls... no
configure: error: TLS not detected, you will not be able to use HTTPS, FTPS, NTLM and more.
Use --with-openssl, --with-gnutls, --with-wolfssl, --with-mbedtls, --with-nss, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl or --with-rustls to address this.

(원인이 무엇이든) TLS 관련 테스트 코드를 컴파일 할 수 없다면, 위와 같은 메시지가 출력된다.

config.log 에 상세한 로그가 있다.

configure:27504: gcc -std=gnu99 -o conftest -Werror-implicit-function-declaration -O2 -Wno-system-headers -I/opt/gnutls-3.7.10/include -L/opt/gnutls-3.7.10/lib conftest.c -lgnutls -lgnutls -lz -lrt >&5
/usr/bin/ld: warning: libnettle.so.8, needed by /opt/gnutls-3.7.10/lib/libgnutls.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libhogweed.so.6, needed by /opt/gnutls-3.7.10/lib/libgnutls.so, not found (try using -rpath or -rpath-link)

LD_LIBRARY_PATH=/opt/nettle-3.6/lib64 가 생략되었거나, 경로에 파일이 없다.

4.2. -lnettle 을 찾을 수 없다는 에러

다음과 같은 에러메시지가 출력된다.

configure: error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lssh2 -lnettle -lgnutls -lz -lrt

config.log 에 상세한 에러 로그가 있다.

configure:34754: sh ./run-compiler -o conftest -Werror-implicit-function-declaration -O2 -Wno-system-headers -I/opt/gnutls-3.7.10/include -I/opt/libssh2-1.11.0/include -L/opt/gnutls-3.7.10/lib -L/opt/libssh2-1.11.0/lib conftest.c -lssh2 -lnettle -lgnutls -lz -lrt >&5
/usr/bin/ld: cannot find -lnettle

LDFLAGS="-L/opt/nettle-3.6/lib64" 가 생략되었거나, 경로에 파일이 없다.

4.3. nettle/des.h 을 찾을 수 없다는 에러

curl_ntlm_core.c:97:26: error: nettle/des.h: No such file or directory

CFLAGS="-I/opt/nettle-3.6/include" 가 생략되었거나, 경로에 파일이 없다.

4.4. libnettle.so.8 을 찾을 수 없다는 에러

make 할 때 발생한다.

/usr/bin/ld: warning: libnettle.so.8, needed by ../lib/.libs/libcurl.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libhogweed.so.6, needed by /opt/gnutls-3.7.10/lib/libgnutls.so.30, not found (try using -rpath or -rpath-link)
../lib/.libs/libcurl.so: undefined reference to `nettle_sha256_init@NETTLE_8'

make 앞에 LD_LIBRARY_PATH 환경변수를 확인한다.

4.5. libnettle.so.8 을 찾을 수 없다는 에러

gnutls 와 함께 컴파일 했다면, 설치를 완료하고 실행할 때도 LD_LIBRARY_PATH 환경변수에 nettle-3.6 이 있어야 한다.

curl: error while loading shared libraries: libnettle.so.8: cannot open shared object file: No such file or directory

다음과 같이 추가한다.

$ export LD_LIBRARY_PATH=/opt/nettle-3.6/lib64:${LD_LIBRARY_PATH}
제목

첨부파일