遇到一个 go proxy 的神奇问题,疑似官方数据错误?

2023-07-24 17:35:17 +08:00
 CC11001100

上周五的时候 GitHub 的一个 Golang 项目的 CI 报错了,看了下 CI 的报错是在 go build 拉取依赖的时候,说是构建的时候拉取到的依赖和 go.sum 中设置的不一致出于安全考虑拒绝执行,于是苦逼的 op 就排查原因,排查了半天一直以为是自己的问题,最后二分法定位到了 proxy.golang.org ,竟然是因为依赖的一个库的某个版本在 proxy.golang.org 上找不到,这个链接:

https://proxy.golang.org/github.com/golang-infrastructure/go-pointer/@v/v0.0.4.info

访问的时候会报 404 ,而查看这个包的所有版本是可以看到是有 v0.0.4 这个版本的:

https://proxy.golang.org/github.com/golang-infrastructure/go-pointer/@v/list

我就感觉很神奇,因为我本地构建的时候没有任何问题,然后想了一下,我本地构建的时候都会走 goproxy.cn 的镜像代理,线上的 CI 环境因为是在国外,所以是没有设置代理的,走的是默认的 proxy.golang.org ,于是我就去 goproxy.cn 看了一下:

https://goproxy.cn/github.com/golang-infrastructure/go-pointer/@v/v0.0.4.info

发现 goproxy.cn 是没问题的,我就很懵逼,不知道是什么情况,难道真的是官方数据错误?

后续解决方案: 这个被依赖的库是 op 自己的,于是死马当活马医,给这个库打了个新 tag v0.0.5 看了看,新 tag v0.0.5 是没问题的,但是 v0.0.4 仍然无法访问。

有问题的 release 在此: https://github.com/golang-infrastructure/go-pointer/releases/tag/v0.0.4

有没有遇到过的大佬指点下迷津

1739 次点击
所在节点    Go 编程语言
12 条回复
Ayanokouji
2023-07-24 17:37:31 +08:00
我刚才也遇到了,重新打包好了,现在你那个地址也能访问了
CC11001100
2023-07-24 17:43:19 +08:00
@Ayanokouji 刚刚试了下,https://proxy.golang.org/github.com/golang-infrastructure/go-pointer/@v/v0.0.4.info 仍然是 404 ,大佬的意思是我要把这个 v0.0.4 的 release 删除掉重新打个 v0.0.4 的 release 吗?
Ayanokouji
2023-07-24 17:47:57 +08:00
@CC11001100 我也不清楚,我刚遇到的是 swag 的问题,重新编译就好了
0o0O0o0O0o
2023-07-24 17:50:14 +08:00
checksum mismatch 对应的是 GOPROXY=direct
404 对应的是 GOPROXY=https://proxy.golang.org

原因大概是你一个月前打 v0.0.4 tag 时删除了好几次:

https://api.github.com/users/golang-infrastructure/events?page=1&per_page=30
0o0O0o0O0o
2023-07-24 17:52:42 +08:00
我觉得你可以避免进行这种删除 tag 再 push 再打相同名称的 tag 的操作,我个人的理解是 goproxy 从原理上就不建议这样做
CC11001100
2023-07-24 18:11:05 +08:00
@0o0O0o0O0o 可能真的是这个原因,大佬牛皮,我已经记不得当时为啥要删除了重新打 tag 了,看来我以后得注意尽量不进行这类操作,请问我现在有什么补救措施让这个 v0.0.4 的 tag 能用吗
0o0O0o0O0o
2023-07-24 18:18:07 +08:00
@CC11001100 #6

你可以看看这个:

https://go.dev/blog/go116-module-changes#module-retraction

我希望是能标记它而不是让它可用,如果能的话,那生态的安全性会受到威胁吧
CC11001100
2023-07-24 19:02:53 +08:00
@0o0O0o0O0o 嗯。。有道理,感谢大佬解惑,撒花结贴 ❀❀❀
joesonw
2023-07-24 19:30:45 +08:00
你删了 tag , 又没有走官方 proxy 拉包吧?因为你本地是 gorpoxycn , 所以上面有记录。
learningman
2023-07-24 19:47:35 +08:00
go sumdb 只会记录他第 1 次见到某个 tag 的 hash ,你修改了 tag 以后他不认后面的,也是出于防止投毒的考虑
flyqie
2023-07-25 01:04:21 +08:00
@learningman #10

确实,重发 tag 这种需求非常少见,基本都是标注废弃然后发个新的 tag 。

重发 tag 要是能允许的话那安全性就别想了。。
learningman
2023-07-25 10:57:34 +08:00
@flyqie 不能说非常少见,只能说完全没有。npm 或者 pypi 这样的中心式的源,都是只允许删除或者 yank/deprecated 某个版本,不可能允许更改的。go 虽然是分布式的源,但是他实际上也用中心化 sumdb 实现了限制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/959307

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX