APT Hash sum mismatch
工作当中遇到此问题,然后偶尔看见此文。 此文是 APT Hash sum mismatch 的翻译。
TL;DR
APT 仓库能够提供未压缩和压缩过的文件格式。常用的几个的压缩格式是 gzip, bzip 和lzma。 apt
的 Bug 在处理lzma文件(.xz)读写的时候会偶尔报告“Hash sum mismatch”错误。 本文提供一种变通方式,另外,在特定版本的 apt 中,该bug已经被修复。 使用如下系统的用户应该升级到系统提供的最新的 apt 版本:
- Ubuntu Trusty (14.04) 及更新的版本
- Debian Jessie (8) 及更新的版本
更早系统的用户应该升级系统或者使用如下的变通方法。 目前,我们决定关闭 packagecloud 的所有仓库中对 lzma 格式的支持。元数据仍然能够以 gzip, bzip 以及未压缩的格式来获取。packagecloud 仓库的所有者们并不需要做任何事情。
Hash sum mismatch 变通方法
用户可以通过两种方法强制 apt 不使用 lzma 格式的元数据。 第一种办法就是运行 apt-get 的时候添加额外的命令行参数:
apt-get update -o Acquire::CompressionTypes::Order::=gz
(注意:如果你偏向于使用 bzipped 格式,你也可以指定参数为“bz2”) 或者,你可以在全局的 apt 设置中指定这个选项,这样你就不必每次运行 apt 的时候输入这些。 步骤如下:
- 创建
/etc/apt/apt.conf.d/99compression-workaround
文件 - 添加这些文本到文件中:
Acquire::CompressionTypes::Order:: "gz";
现在,apt-get update
会首先尝试 gzip 格式的元数据。
Hash sum mismatch 在新的 apt
版本中被修复
这个 apt
的 bug 在2014年3月21日被修复(git 提交为c4b113e650dbdbb4c5c9c6f36437c94db6b214d9) 这个修复包含在 apt 1.0以及更新的版本中,apt 1.0在如下系统中可用:
- Ubuntu Trusty (14.04) 及更新的版本
- Debian Jessie (8) 及更新的版本
如果你在如上系统中看到了这个错误,你应该确认是是否运行着最新的 apt 。
“Hash sum mismatch”到底意味着什么?
顶级的文件包含着仓库其他部分文件的散列值,这是 apt
仓库的组织元数据的方式。 “Hash sum mismatch”错误提示用户: apt 下载的文件的散列值和元数据中的散列值不匹配。 不幸的是,因为 apt
中的 bug,以 lzma 格式(.xz文件)压缩过的元数据会偶尔下载或(在某些情况下)解压错误,造成文件损坏。 结果,损坏的文件的校验值会导致 apt
产生“Hash sum mismatch”错误。
结论
apt
在处理 lzma 格式中一个不幸的错误 导致了臭名昭著的“Hash sum mismatch”错误,加之散列值会被校验,造成了另最终用户困惑的局面。 Ubuntu Trusty 和 Debian Jessies(或者更新的系统)的用户建议升级到系统中最新的 apt
版本。其他用户建议使用上文提供的变通方法来避免食用 lzma 格式的元数据。 packagecloud 的 APT 仓库作者们不需要做任何事情。我们已经完全关闭了 lzma 格式的元数据,仓库用户并不会被此 bug 影响。
APT Hash sum mismatch