最近我在自己的安卓手机上成功的安装了一个 Linux/debian 系统. 但在这个 Debian 系统里安装其它软件时执行 apt-get update 却出现了错误, 导致软件无法安装. 错误的提示信息是这样的:
W: Failed to fetch http://ftp.tw.debian.org/debian/dists/jessie/main/i18n/Translation-en Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.
用谷歌搜索 apt-get update Hash Sum mismatch, 能搜很多更它相关的条目, 很多人指出这是本地新旧缓存导致的问题, 推荐做法是:
- apt-get clean
- rm -rf /var/lib/apt/lists/*
- apt-get clean
- apt-get update
- apt-get upgrade
这种做法并没有解决我的问题, 执行这些命令后任然出现 Hash Sum mismatch 错误.
还有人指出是旧版的 apt 软件的一个 bug, 不能正确的解析压缩过的 metadata files, 解决方法是, 要么升级一下 apt, 要么这么做:
$ apt-get update -o Acquire::CompressionTypes::Order::=gz
我照做了, 仍然报相同的错误.
上面我查看的都是英文条目, 也就是国外网友遇到这种报错信息给出的解决方法. 在一无所获后, 我看了一下中文条目, 发现有网友提出了不同的观点. 有网友说, 这种错误是因为你使用的是宽带通 / 长城宽带, 换成其它宽带就行了, 我用手机流量上网试了一下, 这个问题竟然奇迹的解决了.
为什么?
你所使用的网络供应商, 有些会设置一些透明缓存, 以增加网络内部速度, 减少出口的流量, 你获取的某些文件不是源服务器上的真正文件, 是从缓存中获取的, 当缓存中获取的一些校验信息跟源中不一致的时候, 自然提示校验失败, 无法继续更新.
原因竟然是一些不靠谱的网络供应商喜欢自作聪明, 从自己的缓存里寻找你要访问的数据, 用来降低带宽, 但技术考虑不周期, 导致用户使用时出现错误. 如果我们开启 apt-get debug :
# apt-get update -o Debug::Acquire::http=true
这样做后, 你可以跟踪到 apt-get 的数据是从原数据源获得的, 还是被重定向到了某个缓存服务器.
特别的, 我深有体会的一点是, 宽带通 / 长城宽带特别喜欢搞这些事情, 喜欢拦截, 修改用户访问的网页, 然后在里面添加自己的广告用来盈利, 如果你在使用宽带通 / 长城宽带浏览网页时, 网页底部突然弹出广告, 这很有可能就是宽带通 / 长城宽带这些宽带服务商干的恶心事.
同样是 Hash Sum mismatch 的错误, 在国内, 也变成了具有中国特色的 Hash Sum mismatch 错误和具有中国特殊的解决方案.
来源: http://www.webhek.com/post/linux-apt-get-update-hash-sum-mismatch-error.html