你如何修复 apt-get 更新“哈希和不匹配”

spu*_*der 29 ubuntu apt

我有一个使用 Vagrant 实例化的 Ubuntu 12.04 虚拟机 vm。

git clone https://github.com/spuder/puppet-gitlab
vagrant up
Run Code Online (Sandbox Code Playgroud)

一旦 vagrant box 运行apt-get update,我就会收到以下错误。

...
W: Failed to fetch gzip:/var/lib/apt/lists/partial/apt.puppetlabs.com_dists_precise_main_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch gzip:/var/lib/apt/lists/partial/apt.puppetlabs.com_dists_precise_main_binary-i386_Packages  Hash Sum mismatch
W: Failed to fetch gzip:/var/lib/apt/lists/partial/apt.puppetlabs.com_dists_precise_dependencies_binary-i386_Packages  Hash Sum mismatch
W: Failed to fetch http://br.archive.ubuntu.com/ubuntu/dists/precise-updates/restricted/binary-i386/Packages  404  Not Found
Run Code Online (Sandbox Code Playgroud)

我试图解决这个错误的事情。

  • 使用了来自“ http://www.vagrantbox.es ”的3 个不同的 ubuntu 12.04 盒子
  • 这里建议的解决方案:

    sudo rm -rf /var/lib/apt/lists/*
    sudo apt-get 更新
    sudo apt-get clean

  • 删除并读取了 puppet labs 包

我也尝试过在 google 的前几页中找到的类似建议。我什至尝试过多台计算机和多个互联网连接。

这影响了多个互联网连接上的多个 ubuntu 虚拟机这一事实让我认为 ubuntu 存储库有问题。

我还能如何尝试解决此问题?

更新

我尝试清理 '/var/lib/apt/lists/partial' 并运行 apt-get clean 然后使用此处建议的亚马逊镜像替换 /etc/sources/list 中的源

我仍然收到类似的错误

Fetched 18.9 MB in 10s (1,865 kB/s)                                                                                                                                                                            
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_main_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_universe_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_multiverse_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_main_binary-i386_Packages  Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.
Run Code Online (Sandbox Code Playgroud)

更新2

我家里有 2 个互联网连接,它们都出现了同样的错误。一旦我将笔记本电脑连接到我的工作互联网连接,问题就消失了。

我仍然很想知道为什么我的互联网连接会有所作为。

更新3

请参阅下面我的回答以获取解释。我的互联网过滤器损坏了下载。

我会改写这个问题,因为还没有答案。

有没有办法覆盖 apt-get 中的哈希和不匹配?

Joe*_*ato 29

首先,您应该了解为什么会出现哈希和不匹配错误。一般来说,有2个原因:

首先,一些 apt 存储库使用 LZMA (.xz) 压缩元数据。1.0 版之前的 apt 无法正确(有时)解压缩 LZMA 档案,导致散列和不匹配错误。

有两种解决方法:

  1. 告诉您的 apt 客户端不要使用 XZ 压缩元数据
  2. 将系统上的apt 升级到 1.0 以上的版本

查看我写的关于这个问题的这篇博文,它更详细地解释了这两种变通方法。

其次,APT 存储库本质上是活泼的。实际的 APT 元数据是有问题的,它的设计使得 apt 客户端无法以一致的方式下载存储库元数据,如果在apt-get update更新存储库时发生这种情况。

有两种解决方法:

  1. 升级到更新版本的 APT并确保您创建(或想要使用)的存储库支持Acquire-by-hash功能。这解决了问题的核心,但如果您不控制存储库,则在某些情况下是不可能的。
  2. 您可以删除系统上缓存的元数据,然后重试。为此,首先运行,apt-get clean然后运行rm -rf /var/lib/apt/lists/*. 接下来,运行apt-get update。这将重新下载所有元数据。如果您尝试连接的存储库在您运行时没有自行更新apt-get update,您会没事的。否则,您将不得不再次执行此操作。


spu*_*der 6

弄清楚了。

我的两台计算机在各方面都相同,除了在我的个人计算机上我安装了互联网过滤器。

k9 互联网过滤器安装了一个内核扩展,显然会干扰流量。

一旦我卸载了过滤器,问题就消失了。

我仍在研究是否有任何方法可以将apt-get update忽略哈希和不匹配作为一种解决方法。