V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
CC11001100
V2EX  ›  Go 编程语言

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

  •  
  •   CC11001100 ·
    CC11001100 · 2023-07-24 17:35:17 +08:00 · 1735 次点击
    这是一个创建于 474 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上周五的时候 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

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

    12 条回复    2023-07-25 10:57:34 +08:00
    Ayanokouji
        1
    Ayanokouji  
       2023-07-24 17:37:31 +08:00
    我刚才也遇到了,重新打包好了,现在你那个地址也能访问了
    CC11001100
        2
    CC11001100  
    OP
       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
        3
    Ayanokouji  
       2023-07-24 17:47:57 +08:00
    @CC11001100 我也不清楚,我刚遇到的是 swag 的问题,重新编译就好了
    0o0O0o0O0o
        4
    0o0O0o0O0o  
       2023-07-24 17:50:14 +08:00   ❤️ 1
    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
        5
    0o0O0o0O0o  
       2023-07-24 17:52:42 +08:00   ❤️ 1
    我觉得你可以避免进行这种删除 tag 再 push 再打相同名称的 tag 的操作,我个人的理解是 goproxy 从原理上就不建议这样做
    CC11001100
        6
    CC11001100  
    OP
       2023-07-24 18:11:05 +08:00
    @0o0O0o0O0o 可能真的是这个原因,大佬牛皮,我已经记不得当时为啥要删除了重新打 tag 了,看来我以后得注意尽量不进行这类操作,请问我现在有什么补救措施让这个 v0.0.4 的 tag 能用吗
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       2023-07-24 18:18:07 +08:00 via iPhone   ❤️ 1
    @CC11001100 #6

    你可以看看这个:

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

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

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

    重发 tag 要是能允许的话那安全性就别想了。。
    learningman
        12
    learningman  
       2023-07-25 10:57:34 +08:00 via Android
    @flyqie 不能说非常少见,只能说完全没有。npm 或者 pypi 这样的中心式的源,都是只允许删除或者 yank/deprecated 某个版本,不可能允许更改的。go 虽然是分布式的源,但是他实际上也用中心化 sumdb 实现了限制。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2208 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:03 · PVG 08:03 · LAX 16:03 · JFK 19:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.