標(biāo)題: apt-get update錯(cuò)誤應(yīng)對 [打印本頁]

作者: 51黑tt    時(shí)間: 2016-3-6 16:01
標(biāo)題: apt-get update錯(cuò)誤應(yīng)對
sudo apt-get update通常執(zhí)行后,要接著執(zhí)行sudo apt-get update。
如果發(fā)生hashi校驗(yàn)不符的錯(cuò)誤:
如果只是偶爾出現(xiàn)Hash校驗(yàn)和不符(Hash Sum Mismatch),則可能是所用的源正在和官方同步,如果一直出現(xiàn),并且出問題的總是那固定的幾個(gè)文件,就不是源的問題了

世界上有一種東西叫緩存服務(wù)器:http://baike.baidu.com/view/2396471.htm
部分網(wǎng)絡(luò)服務(wù)商,特別是一些小區(qū)網(wǎng)絡(luò)的服務(wù)商,很多都搞了這么個(gè)東西出來

但是他們的緩存策略有問題,只比對文件路徑,不考慮域名/IP地址,也不怎么考慮文件更新,即緩存的內(nèi)容和實(shí)際文件的內(nèi)容可能不一致。

即對于http://example.com/a/b/c.dat這么一個(gè)文件,如果被收入緩存,那么你訪問其他任意域名下的/a/b/c.dat文件都會(huì)去讀取被緩存的文件。如果http://example.com/a/b/c.dat有了改變,緩存服務(wù)器上的對應(yīng)文件不一定能跟著更新。

而ubuntu大部分源的文件路徑是一致的,所以如果163源中的 http://mirrors.163.com/ubuntu/dists/tru ... ources.bz2 被收入緩存,那么你訪問官方源 http://archive.ubuntu.com/ubuntu/dists/ ... ources.bz2 時(shí),由于路徑都是/ubuntu/dists/trusty/main/source/Sources.bz2,還是獲取的是緩存服務(wù)器上的緩存文件。這個(gè)可用wget驗(yàn)證。如果緩存服務(wù)器上文件過時(shí)了,就會(huì)出現(xiàn)Hash Sum Mismatch。

解決方法呢有這么幾個(gè)
1、換用路徑不同的源。https://launchpad.net/ubuntu/+archivemirrors 中按地區(qū)列出了世界上所有在官方有注冊的源,可以自己點(diǎn)進(jìn)去看看。比如 https://launchpad.net/ubuntu/+mirror/mirror.anl.gov 中就可以看到它的路徑不是一般的/ubuntu,而是/pub/ubuntu/,就有可能沒被你當(dāng)?shù)氐木彺娣⻊?wù)器收入。這種源大多都是國外大學(xué)所有。

2、更換源路徑。大部分源都有一個(gè)指向自身的軟鏈接,比如打開阿里云的源http://mirrors.aliyun.com/ubuntu/,里面有個(gè)ubuntu目錄,點(diǎn)進(jìn)去內(nèi)容是一樣的。這樣就給了我們一個(gè)繞開緩存服務(wù)器的方法。
把sources.list中的http://mirrors.aliyun.com/ubuntu/改成http://mirrors.aliyun.com/ubuntu/ubuntu/,或者后面還可以再深幾層http://mirrors.aliyun.com/ubuntu/ubuntu/ubuntu/ubuntu/ubuntu/,一般就沒有被緩存服務(wù)器收錄了
注意不是所有的源都會(huì)有那個(gè)ubuntu軟鏈接,比如網(wǎng)易源就沒有http://mirrors.163.com/ubuntu/

3、通過代理服務(wù)器訪問。設(shè)置環(huán)境變量http_proxy就可以讓apt-get使用http代理了,新立得可以直接在選項(xiàng)中設(shè)置。

值得一提的是,緩存服務(wù)器的收錄標(biāo)準(zhǔn)一般還會(huì)看文件大。ㄌ筇《疾粫(huì)收錄)以及文件訪問的頻繁度,所以如果你使用的是上面的1或2號方法,則不要太過頻繁的更新。
有人講更換DNS可以奏效:
8.8.8.8,202.96.128.86, 172.18.1.12, 60.190.217.130

如何發(fā)現(xiàn)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.
搞清楚這個(gè)命令可以協(xié)助Linux入門了。

網(wǎng)摘:只更新特定的源:
添加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一下,就可以直接用,是不是很方便?覺得方便就按個(gè)贊。                                       












歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1