簡體   English   中英

無法使用雅典(Go 模塊代理)對私有模塊進行身份驗證

[英]Failed to authenticate to private module with Athens (Go module proxy)

我在本地使用 docker 測試雅典,嘗試設置身份驗證,以便雅典能夠訪問公司的私有模塊。 我按照這里的指南和命令go get github.com/SomeCompany/someprivatemodule成功將該庫的最新版本拉到我的本地。 但有一點很奇怪。

  1. 那些配置文件(.gitconfig、.ssh/config 和.ssh/id_rsa)並沒有使該命令起作用。 相反,由我的 GitHub 令牌組成的 .netrc 文件使其工作。 我嘗試在不安裝這些配置文件的情況下運行 docker 映像,並且該命令仍然有效; 但是,如果我在本地刪除 ~/.netrc,則go get命令會失敗。 似乎 go get 仍然取決於本地配置而不是雅典。

刪除 .netrc 時 go 獲取命令失敗

  1. go get命令確實從 GitHub 中拉出私有模塊。 但是,在ATHENS_DISK_STORAGE_ROOT下,我只能找到github.com/SomeCompany/someprivatemodule所依賴的那些公共模塊,而那些私有模塊只能在GOPATH /pkg/mod 下找到。 雅典不應該將私有模塊下載到ATHENS_DISK_STORAGE_ROOT ,這樣一旦 GitHub/gitlab 關閉,用戶仍然可以從雅典下載這些私有模塊嗎?

雅典目錄中缺少私有模塊

這是我的設置:

GOPROXY=127.0.0.1:3000, which is the exposed port of Athens. GOPRIVATE="github.com/SomeCompany"
GONOPROXY="github.com/SomeCompany"
GONOSUMDB="github.com/SomeCompany"

~/.netrc

machine github.com login some_personal_access_token

.gitconfig

[url "ssh://git@github.com/"]
    insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
    insteadOf = https://gitlab.com/

.ssh/配置

Host github.com
Hostname github.com
StrictHostKeyChecking no
IdentityFile /root/.ssh/id_rsa

docker鏡像運行命令

docker run -d -v $ATHENS_STORAGE:/var/lib/athens -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens -e ATHENS_STORAGE_TYPE=disk -v $PWD/.gitconfig:/root/.gitconfig -v @PWD/.ssh:/root/.ssh --name athens-proxy --restart always -p 3000:3000 gomods/athens:v0.11.0

第一次編輯

通過將 GOPRIVATE 設置為空,GONOPROXY 和 GONOSUMDB 會自動取消設置。 我嘗試使用原始設置重新運行 docker,但出現 404 錯誤:

我的終端出現 404 錯誤

Docker 日志:

INFO[2:35PM]: Exporter not specified. Traces won't be exported

2021-05-29 14:35:11.957339 I | Starting application at port :3000

INFO[2:35PM]: exit status 1: go list -m: github.com/SomeCompany@latest: invalid github.com/ import path "github.com/SomeCompany"

http-method=GET http-path=/github.com/SomeCompany/@v/list kind=Not Found module= operation=download.ListHandler ops=[download.ListHandler pool.List protocol.List vcsLister.List] request-id=3660faa3-256f-43fb-9937-f29565e7afa9 version=

INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/SomeCompany/@v/list http-status=404 request-id=3660faa3-256f-43fb-9937-f29565e7afa9

INFO[2:35PM]: exit status 1: go list -m: github.com@latest: unrecognized import path "github.com": parse https://github.com/?go-get=1: no go-import meta tags ()

http-method=GET http-path=/github.com/@v/list kind=Not Found module= operation=download.ListHandler ops=[download.ListHandler pool.List protocol.List vcsLister.List] request-id=4d6659d2-710d-445f-b07f-7407aa4f2e3e version=

INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/@v/list http-status=404 request-id=4d6659d2-710d-445f-b07f-7407aa4f2e3e

INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/list http-status=200 request-id=e8d95d77-81dc-46fe-9523-e35f6dc8201f

DEBUG[2:35PM]: saving github.com/SomeCompany/someprivatemodule@v1.0.5 to storage... http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info request-id=24964b9c-b0b2-450a-bd9a-9d59f60a5c52

INFO[2:35PM]: github.com/SomeCompany/someprivatemodule@v1.0.5/go.mod: verifying module: github.com/SomeCompany/someprivatemodule@v1.0.5/go.mod: reading https://sum.golang.org/lookup/github.com/SomeCompany/someprivatemodule@v1.0.5: 410 Gone

server response: not found: github.com/SomeCompany/someprivatermodule@v1.0.5: invalid version: unknown revision v1.0.5 http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info kind=Not Found module=github.com/SomeCompany/someprivatemodule operation=download.InfoHandler ops=[download.InfoHandler pool.Info protocol.Info protocol.processDownload stash.Pool stasher.Stash stasher.fetchModule goGetFetcher.Fetch module.downloadModule] request-id=24964b9c-b0b2-450a-bd9a-9d59f60a5c52 version=v1.0.5

INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info http-status=404 request-id=24964b9c-b0b2-450a-bd9a-9d59f60a5c52

雅典似乎試圖從 sum.golang.org 找到包。 所以我嘗試使用正確的憑據掛載 .netrc 文件並設置 ATHENS_NETRC_PATH。 這仍然給我同樣的錯誤。

另一個事實:使用 v0.11.0,我無法使用 go get 下載任何內容。 但是,使用雅典 docker 映像的 v0.2.0 版本,我能夠下載部分模塊。 docker 日志(v0.2.0)如下所示:

buffalo: Unless you set SESSION_SECRET env variable, your session storage is not protected!

time="2021-05-29T19:39:20Z" level=info msg="Exporter not specified. Traces won't be exported"

buffalo: Starting application at :3000

time="2021-05-29T19:39:26Z" level=error msg="exit status 1: go list -m github.com/SomeCompany: invalid github.com/ import path \"github.com/SomeCompany\"\n" http-method=GET http-path="/github.com/SomeCompany/@v/list/" http-url="/github.com/SomeCompany/@v/list/" kind="Internal Server Error" module= operation=download.ListHandler ops="[download.ListHandler pool.List protocol.List vcsLister.List]" version=

handler: GET /github.com/SomeCompany/@v/list/ [500]

time="2021-05-29T19:39:26Z" level=error msg="exit status 1: go list -m github.com: unrecognized import path \"github.com\" (parse https://github.com?go-get=1: no go-import meta tags ())\n" http-method=GET http-path=/github.com/@v/list/ http-url=/github.com/@v/list/ kind="Internal Server Error" module= operation=download.ListHandler ops="[download.ListHandler pool.List protocol.List vcsLister.List]" version=

handler: GET /github.com/@v/list/ [500]

handler: GET /github.com/SomeCompany/someprivatemodule/@v/list/ [200]

time="2021-05-29T19:39:26Z" level=error msg="exit status 1: go: finding github.com/SomeCompany/someprivatemodule/somefile latest\ngo list -m github.com/SomeCompany/someprivatemodule/somefile: no matching versions for query \"latest\"\n" http-method=GET http-path="/github.com/SomeCompany/someprivatemodule/somefile/@v/list/" http-url="/github.com/SomeCompany/someprivatemodule/somefile/@v/list/" kind="Internal Server Error" module= operation=download.ListHandler ops="[download.ListHandler pool.List protocol.List vcsLister.List]" version=

handler: GET /github.com/SomeCompany/someprivatemodule/ratelimit/@v/list/ [500]

handler: GET /github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info [200]

handler: GET /github.com/SomeCompany/someprivatemodule/@v/v1.0.5.mod [200]

handler: GET /github.com/SomeCompany/someprivatemodule/@v/v1.0.5.zip [200]

顯然這仍然行不通,因為它缺少模塊的一部分。

編輯:通過添加 GONOSUM_PATTERNS 解決


我只是嘗試了一下雅典。 它用作 Go 模塊緩存。 當您啟動 athens 並設置 GOPROXY=127.0.0.1:3000 時,go get 命令將嘗試使用以下順序獲取模塊:

  1. 檢查 GOPATH/pkg/mod
  2. 來自 GOPROXY 的請求

這里您的 GOPROXY 是雅典服務器,因此您的本地 go 獲取將向雅典發送請求。 然后 athens 會檢查模塊是否在 ATHENS_DISK_STORAGE_ROOT; 如果沒有,請從 github.com 或任何應有的位置獲取代理。

您可以嘗試演練該過程。

至於你的問題,

我注意到您在github.com/SomeCompany中設置了 github.com/SomeCompany,因此此存儲庫中的所有模塊都不會使用 GOPROXY,並且 athens 也無法正常工作。

這就是在 Question1 中使用您的 .netrc 的原因; 而在Question2中,只有github.com/SomeCompany/someprivatemodule所依賴的模塊是從athens下載的,而模塊本身不是。

移除 GONOPROXY 並重試,看看發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM