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


23

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

git clone https://github.com/spuder/puppet-gitlab
vagrant up

当无业游民框运行时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

我尝试解决此错误的方法。

  • 从' 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的前几页中找到的类似建议。我什至尝试了多台计算机和多个Internet连接。

这影响了多个Internet连接上的多个ubuntu vm,这一事实使我认为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.

更新2

我家里有2个互联网连接,两个都给出了相同的错误。当我将笔记本电脑带到工作网络时,问题就消失了。

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

更新3

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

由于没有答案,我将重新表述这个问题。

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


您是否按照这里的建议清理了缓存?
2014年

您的发行版还包括apt-cacher NG吗?因为它似乎不可靠
Kiwy 2014年

我确实遇到过该博客,并且确认未安装apt-cache-ng。当我在其他Internet连接上尝试其他虚拟机监控程序时,问题消失了。
spuder

也许在虚拟机管理程序上一个特定哈希的坏实现,但这仍然很奇怪。
2014年

您的解决方案也对我有用。我正在通过AWS托管的TinyProxy服务器运行,并设置了一些广告过滤器。一旦我摆脱了apt.conf中的代理,一切都会正常。

Answers:


20

首先,您应该了解为什么会出现哈希和不匹配错误。通常,有两个原因:

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

有两种解决方法:

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

查看我写的关于此问题的博客文章,它更详细地解释了这两种解决方法。

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

有两种解决方法:

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

这是唯一对我有用的解决方案!感谢您的博客文章
阿米尔·乌瓦尔

您评论说最好是最新版本。你能告诉我如何更新吗?
阿米尔·乌瓦尔

您如何精确使用“按哈希获取”功能?我看过有关它的博客,但是他们没有确切说明要放入哪个文件,也没有显示示例。
LINUX G33NYUS'5

6

弄清楚了。

除了安装了Internet过滤器的个人计算机外,我的两台计算机在所有方面都相同。

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

卸载过滤器后,问题就消失了。

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


这实际上很有意义,因为我最近在安装k9之后就开始遇到此问题。但是我当时没有建立连接。一个变通办法会很好,因为我显然不希望不禁用过滤器(毕竟,有一个原因)。
MuffinTheMan 2014年

是的,但是我该怎么做(删除过滤器),因为我也遇到了同样的问题,但是我仍然无法解决

从他们的网站下载最新版本的k9。安装包中将包含一个卸载程序。
spuder 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.