본문 바로가기

Study/Ubuntu 공부

[Ubuntu] git clone 시에 "RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated." 에러 발생 문제 해결 방법

반응형

개요

 

최근에 git clone 시에 지속적으로 에러가 발생하여 무척 성가셨습니다. 구글 검색을 통해서 시도해본 솔루션들이 연달아 실패하곤 했지요. 대부분의 솔루션들은 git config 명령을 통해서 설정해주는 것들이었는데, 그렇게 간단하게 해결되는 문제가 아니었습니다. 만약 그렇게 간단하게 해결될 문제라면 애초부터 이 글을 쓰지도 않았을 것입니다.

 

결론부터 말씀드리면, 2가지 방법이 있습니다. 임시 대책은 shallow clone을 통해서 clone을 한 이후에 전체 레포지토리를 받아오는 방법이고, 근본 대책은 최신 버전의 git을 컴파일해서 설치하는 방법입니다.

 

 

본 페이지에서 다루는 내용

본 페이지에서는 아래의 내용들을 다룹니다.

  • git config를 이용한 문제 해결
  • git clone --depth=1 명령을 통한 회피 방안 (임시대책)
  • 최신 버전의 curl을 컴파일하여 설치하는 방법 (영구대책)

 

문제의 현상

 

최근 Jenkins에서 build 시에 지속적인 fail이 발생하였습니다. 빌드 로그를 살펴보니 git clone 시에 아래와 같은 메시지가 표시되면서 clone에 지속적으로 실패하더군요. 

RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.

 

Jenkins 서버가 아닌 제 PC에서 git clone 명령을 실행해봤는데, 동일하게 git clone 시에 위와 같은 에러 메시지가 나오면서 clone이 안되더군요. 저뿐만 아니라, 같은 프로젝트를 진행하는 다른 동료분들에게도 동일한 문제가 지속적으로 발생하고 있던 상황입니다. 

 

제가 사용하는 운영체제는 Ubuntu 20.04.3이었고, git 버전은 2.25.1이었습니다.

운영체제 버전 Ubuntu 20.04.3
git 버전 2.25.1

 

git config 명령을 통한 설정 (모두 실패)

 

프로젝트 동료분들과 해결 방법을 구글링 해보았으나 모두 실패했습니다. 아래는 git config --add 명령으로 추가해봤던 설정들입니다. 이 설정으로도 문제가 해결되지 않을 경우 최신 버전의 git을 다운로드하여서 재설치해야 합니다. 

 

$ cat ~/.gitconfig
[http]
    postBuffer = 524288000
    sslverify = false
[https]
    postBuffer = 524288000
[core]
    compression = -1

 

다들 잘 아시겠지만 .gitconfig 파일을 위와 같이 직접 수정하셔도 되겠지만, git add 명령을 통해서 .gitconfig 파일에 설정을 추가하실 수 있습니다. 

$ git add config --global --add http.postBuffer 524288000
$ git add config --global --add http.sslverify false
$ git add config --global --add https.postBuffer 524288000
$ git add config --global --add core.compression -1

 

git clone --depth 옵션을 이용한 workaround 방법 (임시 대책)

 

git clone --depth 옵션을 이용하면 git clone에는 성공할 수 있었지만 이 방법은 근본 문제 해결 방법이 아닙니다. 예를 들어,  명령을 통해서 clone을 한다고 하더라도 이후에 git fetch --all 명령 또는 git remote update 등의 명령에서 여전히 문제가 발생할 수 있습니다.

git clone --depth=1 http://abc.def.ghi

 

이렇게 clone 하는 방법을 shallow clone이라고 합니다. commit history 없이 최신 소스 코드만 받아오면 속도도 빠르고 용량도 덜 차지하기 때문에 퍼포먼스를 위해서 많이 사용하곤 합니다. 비록 git fetch -all 또는 git remote update 등의 명령에서 또 다시 RPC failed가 발생한다고 하더라도 다시 시도하면 정상적으로 업데이트가 가능하더군요.

 

$ git fetch --unshallow

shallow clone 이후에 완전한 저장소 정보를 가려오려면 위와 같이 --unshallow 옵션을 달아서 git fetch 명령을 수행하면 됩니다.

 

이 과정에서 git checkout 시에 "error: pathspec 'branch_name' did not match any file(s) known to git" 에러가 발생하며 checkout이 안 되는 경우는 아래의 글을 참조하시기 바랍니다. 

 

 

[Git] git checkout 시에 "error: pathspec 'branch_name' did not match any file(s) known to git" 해결 방법

간혹 git checkout 시에 "error: pathspec 'branch_name' did not match any file(s) known to git" 이라는 메시지가 발생하면서 checkout 되지 않는 경우 해결하는 방법에 대해서 기술합니다. 이 페이지는 누구나..

worldclassproduct.tistory.com

 

 

최신 버전의 git 소스코드를 다운로드하여서 컴파일 후 설치 (근본 대책)

 

저의 경우는 최신 버전의 git 소스(2.29.3)를 다운로드한 후에 컴파일하여 설치했더니 git clone 시에 발생한 문제를 깔끔하게 해결할 수 있었습니다. 그럼 최신 버전의 git을 설치하는 방법에 대해서 설명드리겠습니다.

 

1. 웹브라우저로 아래 경로에 접속하여 다운로드할 git 소스 버전을 선택합니다.

http://mirrors.kernel.org/pub/software/scm/git/

 

2. curl 명령을 통해서 다운로드합니다.

$ curl -o git-2.29.3.tar.gz http://mirrors.kernel.org/pub/software/scm/git/git-2.29.3.tar.gz

 

3. 압축을 해제합니다.

$ tar zxvf git-2.29.3.tar.gz

 

4. 빌드를 위한 패키지를 설치합니다.

$ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev \
libexpat1-dev gettext libz-dev libssl-dev asciidoc xmlto \
docbook2x install-info

 

5. 컴파일 및 설치를 진행합니다.

$ cd git-2.29.3
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info

 

6. git --version 명령을 통해서 새로 설치된 git의 버전을 확인합니다.

$ git --version

새로운 git 버전이 제대로 설치되어 있는지 확인합니다. git clone을 해봤더니 RPC에러 없이 정상적으로 잘 clone 되는 것을 확인하였습니다. 앓던 이가 빠진 것 같은 느낌이네요.

 

 

Jenkins에서 git clone 시에 문제 발생할 경우

만약 Jenkins에서 git clone 도중에 이 에러가 발생한다면 shallow clone을 설정하면 됩니다. 관련 내용은 아래 페이지를 참조하시기 바랍니다.

 

[Jenkins] git clone시에 error: RPC 실패; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.

최근 사무실에서 사용하고 있는 GitHub 레포지토리의 사이즈가 너무 커졌는지 git clone 시에 "error: RPC 실패; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated."라는 에러..

worldclassproduct.tistory.com

 

 

출처

 

Git - Git 설치

이 책은 Git 2.0.0 버전을 기준으로 썼다. 대부분의 명령어는 그 이전 버전에서도 잘 동작하지만, 몇 가지 기능은 아예 없거나 미묘하게 다를 수 있다. Git의 하위 호환성은 정말 훌륭하기 때문에 2.0

git-scm.com

 

이상입니다.

 

 

반응형