From 3d18411ecf9726f7d9139501e555353af06668c7 Mon Sep 17 00:00:00 2001 From: coliuzhikai Date: Tue, 10 Sep 2019 16:50:37 +0800 Subject: [PATCH 1/4] translated 20190829-Module-Mirror-and-Checksum-Database-Launched.md --- ...e-Mirror-and-Checksum-Database-Launched.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md diff --git a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md new file mode 100644 index 000000000..f49a6acec --- /dev/null +++ b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md @@ -0,0 +1,51 @@ +# 推出模块镜像和校验和数据库(Module Mirror and Checksum Database Launched) +我们很高兴地分享我们的模块 [镜像](https://proxy.golang.org/) ,[索引](https://index.golang.org/) 和 [校验和数据库](https://sum.golang.org/) 现已准备就绪! 对于 [Go 1.13模块用户](https://golang.org/doc/go1.13#introduction) ,go命令将默认使用模块镜像和校验和数据库。 有关这些服务的隐私信息,请参阅 [proxy.golang.org/privacy](proxy.golang.org/privacy) ,有关配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) ,包括如何禁用这些服务器或使用不同的服务器。 如果您依赖于非公共模块,请参阅 [配置你的环境的文档](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 。 + +这篇文章将描述这些服务及使用它们的好处,并总结了Gophercon 2019提到 [Go模块代理:Life of a Query](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 的一些要点。如果您对完整的演讲感兴趣,请参阅 [录制内容](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 。 + +## 模块镜像(Module Mirror) +模块是一组版本化的Go包,每个版本的内容都是不可变的。这种不变形为缓存和身份验证提供了新的机会。当以模块模式运行时,它必须获取包含所请求的包的模块,以及该模块引入的任何新依赖项,根据需要更新go.mod和go.sum文件。从版本控制中获取模块再系统的延迟和存储方面可能是昂贵的:go命令可能被迫下载包含传递依赖的存储库的完整提交历史记录,即使是未构建的存储裤,也只是解决它的版本。 + +解决方法是使用模块代理,它代表一种更适合go命令需求的API(参考go help goproxy)。当使用代理以模块模式运行时,它只需要请求指定的模块元数据或源代码,所以它可以更快地工作,而不用担心其余部分。下面是一个示例,说明go命令如何通过请求版本列表来获取代理,然后使用最新标记版本的info,mod和zip文件。 +![an example of how the go command may use a proxy](https://blog.golang.org/module-mirror-launch/proxy-protocol.png) + +模块镜像是一种特殊的模块代理,它将元数据和源代码缓存在自己的存储系统中,允许镜像继续提供原始位置不再提供的源代码。这可以加快下载速度并防止因为代码更迭导致的依赖关系丢失。有关更多信息,请参阅 [2019年的Go Modules](https://blog.golang.org/modules2019) 。 + +Go团队维护一个模块镜像,在 [proxy.golang.org](proxy.golang.org) 上提供,模块用户从Go 1.13开始默认使用这个模块镜像。 如果您运行的是早期版本的go命令,则可以通过在本地环境中设置 GOPROXY=https://proxy.golang.org 来使用此服务。 + +## 校验和数据库(Checksum Database) +模块引入了 go.sum 文件, 该文件保存首次下载时 go.mod 文件下的依赖项和每个依赖项的源代码 SHA-256 。go 命令可以使用哈希去检测原始服务器或代理是否有提供给你相同版本但代码不同的不当行为。 + +go.sum 的局限性在于它完全信任你第一次拉取的代码。当你添加新的依赖到你的模块时(可能通过升级现有的依赖),go 命令将获取代码和动态地将依赖添加到 go.sum 文件中。问题是那些 go.sum 行没有被别人检查:他们可能与 go 命令刚刚为其他人生成的 go.sum 行不同,可能是因为代理故意提供针对你的恶意代码。 + +Go 的解决方案就是将 go.sum 的每一行记录的全局源,称为校验和数据库,它确保 go 命令总是向每个人的 go.sum 文件添加相同的行。不论什么时候,go 命令接受新的源码,它可以通过全局数据库校验代码的哈希值来确保哈希值是否匹配,以此保证每个人使用相同版本是相同的代码。 + +[sum.golang.org](sum.golang.org) 校验和数据库提供了校验和数据库,病构建在由 [Trillian](https://github.com/google/trillian) 支持的哈希的 [透明日志](https://research.swtch.com/tlog)(或"Merkle树")。 Merkle 树的主要优点就是它具有防篡改功能,并且具有不允许未被发现的不良行为的属性,这使得它比简单的数据库更可靠。go 命令使用树来检查『包含』证明(日志中存在特定记录)和『一致性』证明(树未被篡改),然后将新的 go.sum 行添加到模块中。下面是这种树的样子: +![tree](https://blog.golang.org/module-mirror-launch/tree.png) + +校验和数据库支持一系列端点给go命令请求和校验 go.sum。 /lookup 端提供『signed tree head』(STH)和请求 go.sum 行。/tile 端提供称为 tiles 的树的块,go 命令可以使用它来进行校样。下面是 go 命令如何通过执行 /lookup 模块版本,然后证明所需的 tiles 来与校验和数据库交互的示例。 +![how the go command may interact with the checksum database](https://blog.golang.org/module-mirror-launch/sumdb-protocol.png) + +如果你在使用 Go 1.12 或更早的版本,你可以手动敲入 gosumcheck 检查校验和数据库中的 go.sum 文件: +``` +$ go get golang.org/x/mod/gosumcheck +$ gosumcheck /path/to/go.sum +``` +除了通过 go 命令执行校验外,第三方审计员还可以通过迭代日志来查找错误条目。他们可以一起工作,闲聊树的状态,以确保它保持不受影响,我们希望 Go 社区能够运行它。 + +## 模块索引(Module Index) +[index.golang.org](index.golang.org) 提供了 [proxy.golang.org](proxy.golang.org) 可用的模块索引服务,对于希望保留他们的可用缓存开发者来说特别有用,或者保持一些人们正在使用的模块是最新的版本。 + +## 反馈与建议 +我们希望这些服务可以提升您使用模块时的体验,如果在使用过程中遇到问题,希望获得您的反馈或建议。 + +via: https://blog.golang.org/module-mirror-launch + +作者:[Katie Hockman](https://twitter.com/katie_hockman) # 原文没有这名作者的链接,这个是我google搜出来的。 + +译者:[ZackLiuCH](https://github.com/ZackLiuCH) + +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [GCTT](https://github.com/studygolang/GCTT) 原创编译,[Go 中文网](https://studygolang.com/) 荣誉推出 + From a018818132e05df9b10d2877de2bbde0213ead7e Mon Sep 17 00:00:00 2001 From: coliuzhikai Date: Wed, 11 Sep 2019 09:23:23 +0800 Subject: [PATCH 2/4] fix: rule --- ...-Module-Mirror-and-Checksum-Database-Launched.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md index f49a6acec..8e75531ef 100644 --- a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md +++ b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md @@ -1,19 +1,22 @@ # 推出模块镜像和校验和数据库(Module Mirror and Checksum Database Launched) + 我们很高兴地分享我们的模块 [镜像](https://proxy.golang.org/) ,[索引](https://index.golang.org/) 和 [校验和数据库](https://sum.golang.org/) 现已准备就绪! 对于 [Go 1.13模块用户](https://golang.org/doc/go1.13#introduction) ,go命令将默认使用模块镜像和校验和数据库。 有关这些服务的隐私信息,请参阅 [proxy.golang.org/privacy](proxy.golang.org/privacy) ,有关配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) ,包括如何禁用这些服务器或使用不同的服务器。 如果您依赖于非公共模块,请参阅 [配置你的环境的文档](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 。 -这篇文章将描述这些服务及使用它们的好处,并总结了Gophercon 2019提到 [Go模块代理:Life of a Query](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 的一些要点。如果您对完整的演讲感兴趣,请参阅 [录制内容](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 。 +这篇文章将描述这些服务及使用它们的好处,并总结了Gophercon 2019提到 [Go Module Proxy: Life of a Query](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 的一些要点。如果您对完整的演讲感兴趣,请参阅 [录制内容](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 。 ## 模块镜像(Module Mirror) -模块是一组版本化的Go包,每个版本的内容都是不可变的。这种不变形为缓存和身份验证提供了新的机会。当以模块模式运行时,它必须获取包含所请求的包的模块,以及该模块引入的任何新依赖项,根据需要更新go.mod和go.sum文件。从版本控制中获取模块再系统的延迟和存储方面可能是昂贵的:go命令可能被迫下载包含传递依赖的存储库的完整提交历史记录,即使是未构建的存储裤,也只是解决它的版本。 -解决方法是使用模块代理,它代表一种更适合go命令需求的API(参考go help goproxy)。当使用代理以模块模式运行时,它只需要请求指定的模块元数据或源代码,所以它可以更快地工作,而不用担心其余部分。下面是一个示例,说明go命令如何通过请求版本列表来获取代理,然后使用最新标记版本的info,mod和zip文件。 +模块是一组版本化的Go包,每个版本的内容都是不可变的。这种不变性为缓存和身份验证提供了新的机会。当以模块模式运行时,它必须获取包含所请求的包的模块,以及该模块引入的任何新依赖项,根据需要更新 go.mod 和 go.sum 文件。从版本控制中获取模块在系统的延迟和存储方面可能是昂贵的:go命令可能被迫下载包含传递依赖的存储库的完整提交历史记录,即使是未构建的存储裤,也只是解决它的版本。 + +解决方法是使用模块代理,它代表一种更适合go命令需求的API(参考 go help goproxy )。当使用代理以模块模式运行时,它只需要请求指定的模块元数据或源代码,所以它可以更快地工作,而不用担心其余部分。下面是一个示例,说明go命令如何通过请求版本列表来获取代理,然后使用最新标记版本的info,mod和zip文件。 ![an example of how the go command may use a proxy](https://blog.golang.org/module-mirror-launch/proxy-protocol.png) 模块镜像是一种特殊的模块代理,它将元数据和源代码缓存在自己的存储系统中,允许镜像继续提供原始位置不再提供的源代码。这可以加快下载速度并防止因为代码更迭导致的依赖关系丢失。有关更多信息,请参阅 [2019年的Go Modules](https://blog.golang.org/modules2019) 。 -Go团队维护一个模块镜像,在 [proxy.golang.org](proxy.golang.org) 上提供,模块用户从Go 1.13开始默认使用这个模块镜像。 如果您运行的是早期版本的go命令,则可以通过在本地环境中设置 GOPROXY=https://proxy.golang.org 来使用此服务。 +Go团队维护一个模块镜像,在 [proxy.golang.org](proxy.golang.org) 上提供,模块用户从 Go 1.13 开始默认使用这个模块镜像。 如果您运行的是早期版本的go命令,则可以通过在本地环境中设置 `GOPROXY=https://proxy.golang.org` 来使用此服务。 ## 校验和数据库(Checksum Database) + 模块引入了 go.sum 文件, 该文件保存首次下载时 go.mod 文件下的依赖项和每个依赖项的源代码 SHA-256 。go 命令可以使用哈希去检测原始服务器或代理是否有提供给你相同版本但代码不同的不当行为。 go.sum 的局限性在于它完全信任你第一次拉取的代码。当你添加新的依赖到你的模块时(可能通过升级现有的依赖),go 命令将获取代码和动态地将依赖添加到 go.sum 文件中。问题是那些 go.sum 行没有被别人检查:他们可能与 go 命令刚刚为其他人生成的 go.sum 行不同,可能是因为代理故意提供针对你的恶意代码。 @@ -34,9 +37,11 @@ $ gosumcheck /path/to/go.sum 除了通过 go 命令执行校验外,第三方审计员还可以通过迭代日志来查找错误条目。他们可以一起工作,闲聊树的状态,以确保它保持不受影响,我们希望 Go 社区能够运行它。 ## 模块索引(Module Index) + [index.golang.org](index.golang.org) 提供了 [proxy.golang.org](proxy.golang.org) 可用的模块索引服务,对于希望保留他们的可用缓存开发者来说特别有用,或者保持一些人们正在使用的模块是最新的版本。 ## 反馈与建议 + 我们希望这些服务可以提升您使用模块时的体验,如果在使用过程中遇到问题,希望获得您的反馈或建议。 via: https://blog.golang.org/module-mirror-launch From 89ca35839625c351b049147321a6340e67d1c7f6 Mon Sep 17 00:00:00 2001 From: coliuzhikai Date: Wed, 11 Sep 2019 10:14:03 +0800 Subject: [PATCH 3/4] fix: RULES --- ...829-Module-Mirror-and-Checksum-Database-Launched.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md index 8e75531ef..45f3fcc86 100644 --- a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md +++ b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md @@ -1,6 +1,6 @@ # 推出模块镜像和校验和数据库(Module Mirror and Checksum Database Launched) -我们很高兴地分享我们的模块 [镜像](https://proxy.golang.org/) ,[索引](https://index.golang.org/) 和 [校验和数据库](https://sum.golang.org/) 现已准备就绪! 对于 [Go 1.13模块用户](https://golang.org/doc/go1.13#introduction) ,go命令将默认使用模块镜像和校验和数据库。 有关这些服务的隐私信息,请参阅 [proxy.golang.org/privacy](proxy.golang.org/privacy) ,有关配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) ,包括如何禁用这些服务器或使用不同的服务器。 如果您依赖于非公共模块,请参阅 [配置你的环境的文档](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 。 +我们很高兴地分享我们的模块 [镜像](https://proxy.golang.org/) ,[索引](https://index.golang.org/) 和 [校验和数据库](https://sum.golang.org/) 现已准备就绪! 对于 [Go 1.13模块用户](https://golang.org/doc/go1.13#introduction) ,go命令将默认使用模块镜像和校验和数据库。 有关这些服务的隐私信息,请参阅 [proxy.golang.org/privacy](proxy.golang.org/privacy) ,有关配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) ,包括如何禁用这些服务器或使用不同的服务器。如果您依赖于非公共模块,请参阅 [配置你的环境的文档](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 。 这篇文章将描述这些服务及使用它们的好处,并总结了Gophercon 2019提到 [Go Module Proxy: Life of a Query](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 的一些要点。如果您对完整的演讲感兴趣,请参阅 [录制内容](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 。 @@ -9,6 +9,7 @@ 模块是一组版本化的Go包,每个版本的内容都是不可变的。这种不变性为缓存和身份验证提供了新的机会。当以模块模式运行时,它必须获取包含所请求的包的模块,以及该模块引入的任何新依赖项,根据需要更新 go.mod 和 go.sum 文件。从版本控制中获取模块在系统的延迟和存储方面可能是昂贵的:go命令可能被迫下载包含传递依赖的存储库的完整提交历史记录,即使是未构建的存储裤,也只是解决它的版本。 解决方法是使用模块代理,它代表一种更适合go命令需求的API(参考 go help goproxy )。当使用代理以模块模式运行时,它只需要请求指定的模块元数据或源代码,所以它可以更快地工作,而不用担心其余部分。下面是一个示例,说明go命令如何通过请求版本列表来获取代理,然后使用最新标记版本的info,mod和zip文件。 + ![an example of how the go command may use a proxy](https://blog.golang.org/module-mirror-launch/proxy-protocol.png) 模块镜像是一种特殊的模块代理,它将元数据和源代码缓存在自己的存储系统中,允许镜像继续提供原始位置不再提供的源代码。这可以加快下载速度并防止因为代码更迭导致的依赖关系丢失。有关更多信息,请参阅 [2019年的Go Modules](https://blog.golang.org/modules2019) 。 @@ -24,12 +25,14 @@ go.sum 的局限性在于它完全信任你第一次拉取的代码。当你添 Go 的解决方案就是将 go.sum 的每一行记录的全局源,称为校验和数据库,它确保 go 命令总是向每个人的 go.sum 文件添加相同的行。不论什么时候,go 命令接受新的源码,它可以通过全局数据库校验代码的哈希值来确保哈希值是否匹配,以此保证每个人使用相同版本是相同的代码。 [sum.golang.org](sum.golang.org) 校验和数据库提供了校验和数据库,病构建在由 [Trillian](https://github.com/google/trillian) 支持的哈希的 [透明日志](https://research.swtch.com/tlog)(或"Merkle树")。 Merkle 树的主要优点就是它具有防篡改功能,并且具有不允许未被发现的不良行为的属性,这使得它比简单的数据库更可靠。go 命令使用树来检查『包含』证明(日志中存在特定记录)和『一致性』证明(树未被篡改),然后将新的 go.sum 行添加到模块中。下面是这种树的样子: + ![tree](https://blog.golang.org/module-mirror-launch/tree.png) 校验和数据库支持一系列端点给go命令请求和校验 go.sum。 /lookup 端提供『signed tree head』(STH)和请求 go.sum 行。/tile 端提供称为 tiles 的树的块,go 命令可以使用它来进行校样。下面是 go 命令如何通过执行 /lookup 模块版本,然后证明所需的 tiles 来与校验和数据库交互的示例。 + ![how the go command may interact with the checksum database](https://blog.golang.org/module-mirror-launch/sumdb-protocol.png) -如果你在使用 Go 1.12 或更早的版本,你可以手动敲入 gosumcheck 检查校验和数据库中的 go.sum 文件: +如果你在使用 Go 1.12 或更早的版本,你可以手动敲入 gosumcheck 检查校验和数据库中的 go.sum 文件: ``` $ go get golang.org/x/mod/gosumcheck $ gosumcheck /path/to/go.sum @@ -52,5 +55,4 @@ via: https://blog.golang.org/module-mirror-launch 校对:[校对者ID](https://github.com/校对者ID) -本文由 [GCTT](https://github.com/studygolang/GCTT) 原创编译,[Go 中文网](https://studygolang.com/) 荣誉推出 - +本文由 [GCTT](https://github.com/studygolang/GCTT) 原创编译,[Go 中文网](https://studygolang.com/) 荣誉推出 \ No newline at end of file From a99a71bb2336a5d22577e590bcc4d2c7cb3b85b8 Mon Sep 17 00:00:00 2001 From: coliuzhikai Date: Wed, 11 Sep 2019 15:59:41 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E3=80=90=E7=BF=BB=E8=AF=91=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E3=80=91Go-Module-Mirror-Index-and-Checksum-Database?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...e-Mirror-and-Checksum-Database-Launched.md | 58 ----------------- ...dule-Mirror-Index-and-Checksum-Database.md | 65 +++++++++++++++++++ 2 files changed, 65 insertions(+), 58 deletions(-) delete mode 100644 translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md create mode 100644 translated/tech/Go-Module-Mirror-Index-and-Checksum-Database.md diff --git a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md b/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md deleted file mode 100644 index 45f3fcc86..000000000 --- a/translated/tech/20190829-Module-Mirror-and-Checksum-Database-Launched.md +++ /dev/null @@ -1,58 +0,0 @@ -# 推出模块镜像和校验和数据库(Module Mirror and Checksum Database Launched) - -我们很高兴地分享我们的模块 [镜像](https://proxy.golang.org/) ,[索引](https://index.golang.org/) 和 [校验和数据库](https://sum.golang.org/) 现已准备就绪! 对于 [Go 1.13模块用户](https://golang.org/doc/go1.13#introduction) ,go命令将默认使用模块镜像和校验和数据库。 有关这些服务的隐私信息,请参阅 [proxy.golang.org/privacy](proxy.golang.org/privacy) ,有关配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) ,包括如何禁用这些服务器或使用不同的服务器。如果您依赖于非公共模块,请参阅 [配置你的环境的文档](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 。 - -这篇文章将描述这些服务及使用它们的好处,并总结了Gophercon 2019提到 [Go Module Proxy: Life of a Query](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 的一些要点。如果您对完整的演讲感兴趣,请参阅 [录制内容](https://www.youtube.com/watch?v=KqTySYYhPUE&feature=youtu.be) 。 - -## 模块镜像(Module Mirror) - -模块是一组版本化的Go包,每个版本的内容都是不可变的。这种不变性为缓存和身份验证提供了新的机会。当以模块模式运行时,它必须获取包含所请求的包的模块,以及该模块引入的任何新依赖项,根据需要更新 go.mod 和 go.sum 文件。从版本控制中获取模块在系统的延迟和存储方面可能是昂贵的:go命令可能被迫下载包含传递依赖的存储库的完整提交历史记录,即使是未构建的存储裤,也只是解决它的版本。 - -解决方法是使用模块代理,它代表一种更适合go命令需求的API(参考 go help goproxy )。当使用代理以模块模式运行时,它只需要请求指定的模块元数据或源代码,所以它可以更快地工作,而不用担心其余部分。下面是一个示例,说明go命令如何通过请求版本列表来获取代理,然后使用最新标记版本的info,mod和zip文件。 - -![an example of how the go command may use a proxy](https://blog.golang.org/module-mirror-launch/proxy-protocol.png) - -模块镜像是一种特殊的模块代理,它将元数据和源代码缓存在自己的存储系统中,允许镜像继续提供原始位置不再提供的源代码。这可以加快下载速度并防止因为代码更迭导致的依赖关系丢失。有关更多信息,请参阅 [2019年的Go Modules](https://blog.golang.org/modules2019) 。 - -Go团队维护一个模块镜像,在 [proxy.golang.org](proxy.golang.org) 上提供,模块用户从 Go 1.13 开始默认使用这个模块镜像。 如果您运行的是早期版本的go命令,则可以通过在本地环境中设置 `GOPROXY=https://proxy.golang.org` 来使用此服务。 - -## 校验和数据库(Checksum Database) - -模块引入了 go.sum 文件, 该文件保存首次下载时 go.mod 文件下的依赖项和每个依赖项的源代码 SHA-256 。go 命令可以使用哈希去检测原始服务器或代理是否有提供给你相同版本但代码不同的不当行为。 - -go.sum 的局限性在于它完全信任你第一次拉取的代码。当你添加新的依赖到你的模块时(可能通过升级现有的依赖),go 命令将获取代码和动态地将依赖添加到 go.sum 文件中。问题是那些 go.sum 行没有被别人检查:他们可能与 go 命令刚刚为其他人生成的 go.sum 行不同,可能是因为代理故意提供针对你的恶意代码。 - -Go 的解决方案就是将 go.sum 的每一行记录的全局源,称为校验和数据库,它确保 go 命令总是向每个人的 go.sum 文件添加相同的行。不论什么时候,go 命令接受新的源码,它可以通过全局数据库校验代码的哈希值来确保哈希值是否匹配,以此保证每个人使用相同版本是相同的代码。 - -[sum.golang.org](sum.golang.org) 校验和数据库提供了校验和数据库,病构建在由 [Trillian](https://github.com/google/trillian) 支持的哈希的 [透明日志](https://research.swtch.com/tlog)(或"Merkle树")。 Merkle 树的主要优点就是它具有防篡改功能,并且具有不允许未被发现的不良行为的属性,这使得它比简单的数据库更可靠。go 命令使用树来检查『包含』证明(日志中存在特定记录)和『一致性』证明(树未被篡改),然后将新的 go.sum 行添加到模块中。下面是这种树的样子: - -![tree](https://blog.golang.org/module-mirror-launch/tree.png) - -校验和数据库支持一系列端点给go命令请求和校验 go.sum。 /lookup 端提供『signed tree head』(STH)和请求 go.sum 行。/tile 端提供称为 tiles 的树的块,go 命令可以使用它来进行校样。下面是 go 命令如何通过执行 /lookup 模块版本,然后证明所需的 tiles 来与校验和数据库交互的示例。 - -![how the go command may interact with the checksum database](https://blog.golang.org/module-mirror-launch/sumdb-protocol.png) - -如果你在使用 Go 1.12 或更早的版本,你可以手动敲入 gosumcheck 检查校验和数据库中的 go.sum 文件: -``` -$ go get golang.org/x/mod/gosumcheck -$ gosumcheck /path/to/go.sum -``` -除了通过 go 命令执行校验外,第三方审计员还可以通过迭代日志来查找错误条目。他们可以一起工作,闲聊树的状态,以确保它保持不受影响,我们希望 Go 社区能够运行它。 - -## 模块索引(Module Index) - -[index.golang.org](index.golang.org) 提供了 [proxy.golang.org](proxy.golang.org) 可用的模块索引服务,对于希望保留他们的可用缓存开发者来说特别有用,或者保持一些人们正在使用的模块是最新的版本。 - -## 反馈与建议 - -我们希望这些服务可以提升您使用模块时的体验,如果在使用过程中遇到问题,希望获得您的反馈或建议。 - -via: https://blog.golang.org/module-mirror-launch - -作者:[Katie Hockman](https://twitter.com/katie_hockman) # 原文没有这名作者的链接,这个是我google搜出来的。 - -译者:[ZackLiuCH](https://github.com/ZackLiuCH) - -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [GCTT](https://github.com/studygolang/GCTT) 原创编译,[Go 中文网](https://studygolang.com/) 荣誉推出 \ No newline at end of file diff --git a/translated/tech/Go-Module-Mirror-Index-and-Checksum-Database.md b/translated/tech/Go-Module-Mirror-Index-and-Checksum-Database.md new file mode 100644 index 000000000..b8bb66b60 --- /dev/null +++ b/translated/tech/Go-Module-Mirror-Index-and-Checksum-Database.md @@ -0,0 +1,65 @@ +# Go 模块镜像,索引与校验和数据库 + +Go团队提供由Google运营的以下服务:用于加速Go模块下载的**模块镜像**,用于发现新模块的**索引**,以及用于验证模块内容的全局 **go.sum 数据库**。 + +从 Go 1.13 开始,go命令将默认使用模块镜像和校验和数据库。 有关这些服务的隐私信息,请参阅 [proxy.golang.org/privacy](proxy.golang.org/privacy) ,有关配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) ,包括如何禁用这些服务器或使用不同的服务器。 如果您依赖于非公共模块,请参阅 [配置你的环境的文档](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 。 + +## 服务 + +proxy.golang.org - 模块镜像,符合 `go help goproxy` 提供的规范。 + +sum.golang.org - 可审计的校验和数据库,将由 go 命令用于验证模块。 查看 [Secure the Public Go Module Ecosystem Proposal](https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md) 以获取更多详细信息。 + +index.golang.org - 索引,它为 proxy.golang.org 提供的新模块版本提供服务。 可以在 https://index.golang.org/index 查看源( feed )。 feed 作为新行分隔的JSON提供,提供模块路径(作为 Path ),模块版本(作为 Version ),以及proxy.golang.org(作为 Timestamp )首次缓存的时间。 该列表按时间顺序排序。 有两个可选参数: +* since: 返回列表中模块版本的最早允许时间戳( RFC3339 格式)。 默认是时间的开始,例如 https://index.golang.org/index?since=2019-04-10T19:08:52.997264Z +* limit: 返回列表的最大长度。 default = 2000,Max = 2000,例如 https://index.golang.org/index?limit=10 + +## 状态:已发布 + +这些服务已经可以在生产上使用。如果您发现问题,请提交问题,标题前缀为 proxy.golang.org: (或 index.golang.org 或 sum.golang.org )。 + +## 部署环境 + +这些服务只能访问公开可用的源代码。如果你依赖四有模块,请将 GOPRIVATE 设置为覆盖它们的 glob 模式。请查阅 go 命令文档 [Module configuration for non-public modules](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules) 以获取更多细节。 + +对于 Go 1.13 之前的版本,您可以通过设置 `GOPROXY = https://proxy.golang.org` 来配置 go 命令以使用此模块镜像下载模块。 + +要退出此模块镜像,可以通过设置 `GOPROXY = direct` 将其关闭。 + +有关其他配置详细信息,请参阅 [go命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) 。 + +## 校验和数据库 + +较旧版本的go命令无法直接使用校验和数据库。 如果您使用的是 Go 1.12 或更早版本,则可以使用 gosumcheck 针对校验和数据库手动检查go.sum文件: +``` +$ go get golang.org/x/mod/gosumcheck +$ gosumcheck /path/to/go.sum +``` + +## FAQ + +### 我向存储库提交了一个新的更改(或发布了一个新版本),当我运行 `go -u` 或 `go list -m --versions` 时,它为什么不显示? + +为了改善我们服务的缓存和服务延迟,新版本可能不会立即显示。 如果您希望镜像中立即提供新代码,请首先确保底层源存储库中的此修订版本具有语义版本标记。 然后通过 `go get module@version` 显式请求该版本。 在缓存过期一分钟后,go命令将看到标记的版本。 如果这对您不起作用,请[提出问题](https://github.com/golang/go/issues/new?title=proxy.golang.org%3A+)。 + +### 我从我的存储库中删除了一个错误的版本,但它仍然出现在镜像中,我该怎么办? + +只要有可能,镜像的目的是缓存内容,以避免破坏依赖于您的程序包的人的构建( build ),因此即使镜像在原点不可用,这个不良版本仍可在镜像中使用。 如果删除整个存储库,同样适用上述的情况。 我们建议您创建一个新版本并鼓励人们使用该版本。 + +### 我在一个无法使用镜像的环境中运行 go 命令。 + +[go 命令文档](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) 描述了配置详细信息,包括如何禁用这些服务器或使用不同的服务器。 + +### 如果我没有设置 GOPRIVATE 并向这些服务请求私有模块,那么什么泄漏? + +代理与校验和数据库协议仅将模块路径和版本发送到远程服务器。如果您请求私有模块,镜像将尝试下载它,就像任何Go用户一样,并以相同的方式失败。有关失败请求的信息不会在任何地方发布 请求的唯一跟踪将在内部日志中,该日志由[隐私策略](https://proxy.golang.org/privacy)管理。 + +via: https://proxy.golang.org/ + +作者:https://proxy.golang.org/ # 原文没有作者 + +译者:[ZackLiuCH](https://github.com/ZackLiuCH) + +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [GCTT](https://github.com/studygolang/GCTT) 原创编译,[Go 中文网](https://studygolang.com/) 荣誉推出 \ No newline at end of file