在Linux上执行apt-get update时出现 Hash Sum mismatch 错误的解决方法
最近我在自己的安卓手机上成功的安装了一个Linux/debian系统。但在这个Debian系统里安装其它软件时执行apt-get update
却出现了错误,导致软件无法安装。错误的提示信息是这样的:
W: Failed to fetch https://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
错误和具有中国特殊的解决方案。