오늘 배운 내용 — 수정: go get private repository 반환 오류 읽기 sum.golang.org/lookup

오류 수정: go get gomodule on private module with error message pattern verify git-host… read sum.golang.org/lookup … 410 gone





오늘은 화창한 날, 선데이 펀데이, 하지만 한 시간 동안 나를 화나게 만든 무언가에 의해 망가졌습니다. 사실 어젯밤(토요일 밤)부터 이 문제에 매달렸는데, 너무 피곤해서 그만 쉬고 일요일에 다시 하기로 했어요.

그래서 저는 사이드 프로젝트 중 하나로 Mabar(https://mabar.id)를 작업하고 있습니다. 아직 베타 버전이고 아직 많은 기능이 부족합니다. Android Play 스토어에서 사용해 볼 수 있습니다here.

저는 이 Mabar에 대해 큰 기대를 하고 있습니다. 많은 인터페이스(모바일, 데스크톱, 웹)에서 사용할 수 있는 플랫폼이어야 합니다. 기술 스택의 경우 Golang을 백엔드로, Kubernetes를 인프라로, 그 뒤의 Digital Ocean을 서버로 사용합니다.

문제



따라서 문제는 내 백엔드 API에서 가져올 간단한 라이브러리인 개인 모듈(Golang 모듈)이 있다는 것입니다. 하지만 왠지 모듈을 가져올 수 없고 go get 명령을 수행할 때 항상 오류가 발생합니다.

패키지 이름이 lucifer라고 가정해 보겠습니다. 그리고 항상 터미널에 오류가 발생합니다. 그것은 정말 나를 화나게 만들었습니다.

$ go get -v bitbucket.org/compay/lucifer
go: finding bitbucket.org/compay/lucifer latest
go: downloading bitbucket.org/compay/lucifer v0.0.0-20190921175342-61a76c096369
**verifying bitbucket.org/compay/[email protected]: bitbucket.org/compay/[email protected]: reading** [**https://sum.golang.org/lookup/bitbucket.org/**](https://sum.golang.org/lookup/bitbucket.org/gokar/[email protected]) **compay** [**/[email protected]**](https://sum.golang.org/lookup/bitbucket.org/gokar/[email protected]) **: 410 Gone**


메시지를 보면 패키지가 사라졌거나 sum.golang.org에서 사용할 수 없다고 표시됩니다.

처음에는 다음과 같이 bitbucket에 SSH를 적용하는 것을 잊었기 때문에 이런 일이 발생한다고 생각합니다. https://medium.com/easyread/today-i-learned-fix-go-get-private-repository-return-error-terminal-prompts-disabled-8c5549d89045

그러나 여전히 잘 작동하지 않았습니다. SSH를 사용하여 강제로 실행하더라도 go get 명령을 수행할 때 여전히 오류를 반환합니다.

근본 원인



그래서 인터넷에서 이 문제를 검색한 후 근본 원인을 찾았습니다. 이것은 버전 1.13의 Golang에서만 발생합니다. 이 릴리스를 읽은 후 이를 확인할 수 있습니다https://golang.org/doc/go1.13#modules.

이 Golang 버전에는 프록시에 대한 새로운 기능이 있기 때문에 이런 일이 발생했습니다.

솔루션



실제로 우리가 선택할 수 있는 몇 가지 솔루션이 있습니다.
  • GOPRIVATE 사용

  • Go 1.13의 릴리스 문서에 명시된 바와 같이,

    The new GOPRIVATE environment variable indicates module paths that are not publicly available. It serves as the default value for the lower-level GONOPROXY and GONOSUMDB variables, which provide finer-grained control over which modules are fetched via proxy and verified using the checksum database.



    즉, 위의 문제를 해결하기 위해 시스템에서 GOPRIVATE 변수를 채울 수 있습니다. ~/.bashrc에 이 명령을 추가합니다. *회사/조직 이름을 기준으로 내보내기 값을 변경하십시오.

    **export**  **GOPRIVATE** ="gitlab.com/ **idmabar** ,bitbucket.org/ **idmabar** ,github.com/ **idmabar**"
    


    이것이 작동하는지 확인하기 위해 go env 명령을 실행할 수 있습니다. 이보다 더 많아야 합니다.

    $ go env
    GO111MODULE=""
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/Users/imantumorang/Library/Caches/go-build"
    GOENV="/Users/imantumorang/Library/Application Support/go/env"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="darwin"  
    GOOS="darwin"
    GOPATH="/Users/imantumorang/go"
    **GOPRIVATE="gitlab.com/idmabar,bitbucket.org/idmabar,github.com/idmabar"**
    GOPROXY="[https://proxy.golang.org,direct](https://proxy.golang.org,direct)"
    GOROOT="/usr/local/Cellar/go/1.13/libexec"
    GOSUMDB="sum.golang.org"
    GOTMPDIR=""
    GOTOOLDIR="/usr/local/Cellar/go/1.13/libexec/pkg/tool/darwin\_amd64"
    GCCGO="gccgo"
    AR="ar"
    CC="clang"
    CXX="clang++"
    CGO\_ENABLED="1"
    GOMOD=""
    CGO\_CFLAGS="-g -O2"
    CGO\_CPPFLAGS=""
    CGO\_CXXFLAGS="-g -O2"
    CGO\_FFLAGS="-g -O2"
    CGO\_LDFLAGS="-g -O2"
    


    이제 개인 저장소에 대한 go get 명령을 수행할 수 있습니다.

    $ go get bitbucket.org/company/lucifer
    go: finding bitbucket.org/company/lucifer latest
    go: downloading bitbucket.org/company/lucifer v0.0.0-20190921175342-61a76c096369
    go: extracting bitbucket.org/company/lucifer v0.0.0-20190921175342-61a76c096369
    


    따라서 이 env-변수는 패키지를 검색하기 위해 개인 호스트 프록시를 사용하도록 go get 명령에 지시합니다.
  • GONOSUMDB 사용

  • GONOSUMDB 변수를 사용하는 또 다른 솔루션입니다. 아직 시도하지는 않지만 이 제안을 읽은 후 작동하는 것 같습니다https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md.

    따라서 환경 변수에서 다음과 같이 설정할 수 있습니다.

    **export**  **GONOSUMDB** ="gitlab.com/idmabar,bitbucket.org/idmabar,github.com/idmabar"
    


    실제로 이 문제는 새로운 Golang 버전 1.13 이상에서만 발생합니다. 따라서 Golang 버전을 업데이트하기 전에 이 환경 변수를 설정해야 합니다.

    이 문제와 관련이 있을 수 있는 몇 가지 링크가 있습니다. 이것을 찾아 Stackoverflow에 게시한 noveaustack 덕분에 저는 이 문제를 알고 있고 제가 배운 새로운 것으로서 이것을 다시 게시했습니다.

    참조


  • 스택오버플로 답변: https://stackoverflow.com/a/57887036/4075313
  • go 모듈용 Go Sum DB에 대한 제안: https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md
  • 프록시 체크섬 DB: https://docs.gomods.io/configuration/sumdb/
  • 이 문제와 관련된 Github 문제: #33985#32291
  • 좋은 웹페이지 즐겨찾기