오늘 배운 내용 — 수정: 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 버전에는 프록시에 대한 새로운 기능이 있기 때문에 이런 일이 발생했습니다.
솔루션
실제로 우리가 선택할 수 있는 몇 가지 솔루션이 있습니다.
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 변수를 사용하는 또 다른 솔루션입니다. 아직 시도하지는 않지만 이 제안을 읽은 후 작동하는 것 같습니다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 덕분에 저는 이 문제를 알고 있고 제가 배운 새로운 것으로서 이것을 다시 게시했습니다.
참조
Reference
이 문제에 관하여(오늘 배운 내용 — 수정: go get private repository 반환 오류 읽기 sum.golang.org/lookup), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bxcodec/today-i-learned-fix-go-get-private-repository-return-error-reading-sumgolangorglookup-4kjh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)