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 的时候输入这些。

步骤如下:

  1. 创建 /etc/apt/apt.conf.d/99compression-workaround 文件
  2. 添加这些文本到文件中: Acquire::CompressionTypes::Order:: "gz";

现在,apt-get update 会首先尝试 gzip 格式的元数据。

Hash sum mismatch 在新的 apt 版本中被修复

这个 aptbug 在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 影响。

Leave a Reply

Your email address will not be published. Required fields are marked *

2 + 7 =