最近新裝的Ubuntu14.04系統,所以有很多東西需要重新安裝,但總會需要去更新源,對於更新源的教程以及源網上有很多教程,如果不出意外的話,是很容易成功的,但是這次更新源是我遇到的最奇葩的一次,無論使用多麼新的源,都會出現Hash校驗和不符字樣,導致更新源失敗,後續的一系列操作都做不了。
如果偶爾出現Hash校驗和不符,可能是我們所使用的源不符合要求,出現了問題,可以去網上下載最新源(當然得需要配合相應的系統的源)就可以了。但是如果一直出現,並且出問題的總是那幾個固定的文件,那就不是源的問題了。
而是緩存服務器的問題,部分網絡服務商,特別是一些小區網絡的服務商,很多都會搞了這麼個東西出來。但是他們的緩存策略有問題,只比對文件路徑,不考慮域名/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。
更多的解決方案可以參考:http://forum.ubuntu.com.cn/viewtopic.php?f=77&t=465499
但是我只嘗試了其中的一種方法——更換源路徑,大部分源都有一個指向自身的軟鏈接,比如打開阿里雲的源 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/
開始我只是抱着試一試的心態,卻想不到真的解決了,後面的一些列依賴庫等輕鬆解決