Fish Shell 发布包完整性校验:从两条验证命令到发布流水线
2026/9/2 14:07:38 网站建设 项目流程

Fish Shell 发布包完整性校验:从两条验证命令到发布流水线

【免费下载链接】fish-shellThe user-friendly command line shell.项目地址: https://gitcode.com/GitHub_Trending/fi/fish-shell

Fish Shell 是主打易用性的命令行 shell,它的发布流程同样值得细看。本文讲清 fish 发布包的 SHA256 校验和 GPG 签名是怎么生成的,如何在本地验证下载的包没被掉包,以及校验和不匹配时按什么顺序排查,最后把验证变成下载后的固定动作。

下载的 fish 包,怎么确认没被掉包?

shell 这种东西是要执行你机器上任何命令的,所以"装的东西是不是官方那一份"比装什么都重要。你从镜像站或波动网络下载的 tar.xz,可能在传输中损坏,也可能被中间环节替换。官方发布页针对每个版本给出两层保护:SHA256 校验和保证"字节一致",随附的.asc文件是 GPG 分离签名,保证"签名者确实是 fish 维护者"。

两道验证,各管一件事

SHA256 回答"文件对不对":任何一个字节不同,哈希都会彻底改变。GPG 签名回答"发布的人是谁":镜像站就算替换了文件,没有维护者的私钥也签不出能通过验证的签名。两者配合,才构成完整的发布包完整性验证。

本地只需要两条命令

下载完成后,对文件算哈希并与发布说明中的值比对,再验一次签名:

openssl dgst -sha256 fish-4.8.1.tar.xz gpg --verify fish-4.8.1.tar.xz.asc fish-4.8.1.tar.xz

没有 openssl 时用sha256sum也一样。两个结果都匹配,这个包就可以放心解开了。

校验和不匹配,先查什么?

先怀疑传输,再怀疑文件

大多数"不匹配"其实是下载没下完或网络中断导致的。先看文件体积是否与发布页一致,重新下载后再验一次。如果你是从第三方镜像拿的,注意:镜像自带的校验值没有权威性,只认官方发布说明里的那份。

再核对你手里比对的值

确认三件事:你比对的是同一个版本(4.8.14.8.1-rc0的哈希完全不同);哈希是从正确的发布说明段落复制的;你验的文件确实是你想装的那个。换网络重新下载后仍然不匹配,就停手别装,换官方渠道再取。

SHA256 和 GPG 签名是怎么生成的?

打包脚本顺手就算好了

源码包的打包逻辑在 build_tools/make_tarball.sh:用git archivexz生成 tar.xz 后,脚本末尾立即执行openssl dgst -sha256输出哈希,打包和校验在同一个动作里完成。给 Rust 依赖做离线构建用的 build_tools/make_vendor_tarball.sh 同样带这一步,保证 vendor 包也能被核验。

发布流水线是一揽子动作

完整的自动化流程定义在 .github/workflows/release.yml:先校验 tag 是否真的是发布版本,再构建源码包;为 Linux 的 x86_64 和 aarch64 交叉编译静态链接二进制;创建 draft release;最后为 macOS 构建经过代码签名和公证的安装包。build_tools/release.sh 会用 GPG 对源码包生成fish-X.Y.Z.tar.xz.asc分离签名并上传,build_tools/release-notes.sh 则在发布说明里明确写出签名文件的存放位置,方便你核对。

自己也能复现一遍

如果你不放心,可以拉一份仓库亲眼看看:

git clone https://gitcode.com/GitHub_Trending/fi/fish-shell

翻一下 build_tools/ 下的脚本,从"打包"到"算哈希"到"签名"整条链路都是明文可审计的。

把验证变成下载后的固定动作

以后每次拿到 fish 发布包,动作固定成三拍:比对 SHA256、验证 GPG 签名、确认版本一致。三拍全过再解压,有一拍不过就停在原地。这一步多花半分钟,换来的是对"我装进去的东西到底是谁发的"有完整答案。

延伸阅读:CHANGELOG.rst 查看版本发布记录,doc_internal/ 内有 macOS 构建与公证细节。

【免费下载链接】fish-shellThe user-friendly command line shell.项目地址: https://gitcode.com/GitHub_Trending/fi/fish-shell

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询