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一下,就可以直接用,是不是很方便?覺得方便就按個贊。
|