sudo apt-get update通常执行后,要接着执行sudo apt-get update。
如果发生hashi校验不符的错误:
如果只是偶尔出现Hash校验和不符(Hash Sum Mismatch),则可能是所用的源正在和官方同步,如果一直出现,并且出问题的总是那固定的几个文件,就不是源的问题了
世界上有一种东西叫缓存服务器:http://baike.baidu.com/view/2396471.htm
部分网络服务商,特别是一些小区网络的服务商,很多都搞了这么个东西出来
但是他们的缓存策略有问题,只比对文件路径,不考虑域名/IP地址,也不怎么考虑文件更新,即缓存的内容和实际文件的内容可能不一致。
即对于http://example.com/a/b/c.dat这么一个文件,如果被收入缓存,那么你访问其他任意域名下的/a/b/c.dat文件都会去读取被缓存的文件。如果http://example.com/a/b/c.dat有了改变,缓存服务器上的对应文件不一定能跟着更新。
而ubuntu大部分源的文件路径是一致的,所以如果163源中的 http://mirrors.163.com/ubuntu/dists/tru ... ources.bz2 被收入缓存,那么你访问官方源 http://archive.ubuntu.com/ubuntu/dists/ ... ources.bz2 时,由于路径都是/ubuntu/dists/trusty/main/source/Sources.bz2,还是获取的是缓存服务器上的缓存文件。这个可用wget验证。如果缓存服务器上文件过时了,就会出现Hash Sum Mismatch。
解决方法呢有这么几个
1、换用路径不同的源。https://launchpad.net/ubuntu/+archivemirrors 中按地区列出了世界上所有在官方有注册的源,可以自己点进去看看。比如 https://launchpad.net/ubuntu/+mirror/mirror.anl.gov 中就可以看到它的路径不是一般的/ubuntu,而是/pub/ubuntu/,就有可能没被你当地的缓存服务器收入。这种源大多都是国外大学所有。
2、更换源路径。大部分源都有一个指向自身的软链接,比如打开阿里云的源http://mirrors.aliyun.com/ubuntu/,里面有个ubuntu目录,点进去内容是一样的。这样就给了我们一个绕开缓存服务器的方法。
把sources.list中的http://mirrors.aliyun.com/ubuntu/改成http://mirrors.aliyun.com/ubuntu/ubuntu/,或者后面还可以再深几层http://mirrors.aliyun.com/ubuntu/ubuntu/ubuntu/ubuntu/ubuntu/,一般就没有被缓存服务器收录了
注意不是所有的源都会有那个ubuntu软链接,比如网易源就没有http://mirrors.163.com/ubuntu/
3、通过代理服务器访问。设置环境变量http_proxy就可以让apt-get使用http代理了,新立得可以直接在选项中设置。
值得一提的是,缓存服务器的收录标准一般还会看文件大小(太大太小都不会收录)以及文件访问的频繁度,所以如果你使用的是上面的1或2号方法,则不要太过频繁的更新。
有人讲更换DNS可以奏效:
8.8.8.8,202.96.128.86, 172.18.1.12, 60.190.217.130
如何发现W: Duplicate sources.list entry http://security.ubuntu.com ...
有人指出:Use this to find duplicate lines;
grep -v ^# /etc/apt/sources.list | sort | uniq -c | sort
有人指出:
cat /etc/apt/sources.list | perl -ne '$H{$_}++ or print' > /tmp/sources.list && sudo mv /tmp/sources.list /etc/apt/sources.list
The command does this:
cat reads the file and passes the content to perl which removes the duplicate lines. The result is then saved > in a temporary file which is then moved to replace the original /etc/apt/sources.list file.
搞清楚这个命令可以协助Linux入门了。
网摘:只更新特定的源:
添加ppa后只更新此ppa:
update-ppa()
{ sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}
写入~/.bashrc,source一下,就可以直接用,是不是很方便?觉得方便就按个赞。
|