更新 Ubuntu 系统,避免报错「校验和不符」
為什么80%的碼農都做不了架構師?>>> ??
1. 問題
使用 Ubuntu 操作系統,執行
更新系統時,經常會見到類似如下所示的報錯信息:
,系統更新失敗。
這是一個煩人的問題,尤其是當以 Ubuntu 為基礎構建容器鏡像時,如果系統更新失敗, Dockerfile 中的后續指令不會被執行。
「校驗和不符」( Hash Sum mismatch) 在 2012 年已經被確認是 Ubuntu 的一個 BUG , 但是幾年過去,還是沒改好。
出現這個錯誤的原因是 Ubuntu 下載的索引文件不是來自指定的軟件源,而是網絡服務提供商的緩存。
網上給出的解決方案:
經實際驗證,這種方法是無效的。
2. 解決方法
(1)代理
指定使用 HTTP 代理。如果是設置只對當前會話有效的臨時代理,執行
如果要設置持久代理,編輯 /etc/apt/apt.conf,添加一行:
,然后執行:
如果沒有 HTTP 代理,只有 SOCKS 代理,首先安裝 proxychains 程序,編輯 /etc/proxychains.conf ,指定 SOCKS 服務器的 IP 地址和端口;接下來,執行:
(2)換協議
網絡服務商只使用了 HTTP 緩存,如果軟件源還支持 HTTPS 或者 FTP 協議,修改 /etc/apt/sources.list ,把其中所有的 http:// 換成 ftp:// ,再執行系統更新。
這種方法的不足是中國境內的軟件源不支持 FTP 協議訪問, Ubuntu 主服務器支持,但是網絡速度會比較慢。
(3)黑科技
警告:這種方法是否有潛在問題,還有待持續一段時間的觀察。不要在生產環境中使用。
第一步:修改 apt 包的源代碼,不讓它報這個錯。
此時,有一個 apt-1.0.1ubuntu2.7 的文件夾,包含 apt 包的源代碼。修改 apt-pkg/accquire-item.cc ,查找 HashSumMismatch 關鍵詞。第一個出現的地方是打印報錯信息的函數,不用管。把剩下的五段代碼都注釋掉。例如,
然后,在 apt-1.0.1ubuntu2.7 目錄下,執行:
成功執行后,在 ?apt-1.0.1ubuntu2.7 的上一級目錄中有新創建的一系列 .deb 文件。我們的修改,包含在 libapt-pkg4.12_1.0.1ubuntu2.7_amd64.deb 中。
安裝這個軟件包,并標記為不更新:
第二步:把 /etc/apt/sources.list 中的軟件源域名換成對應的 IP 地址。以中國服務器鏡像為例,首先查找 cn.archive.ubuntu.com 對應的 IP 地址:
查詢結果是:
原來中國服務器就是阿里云鏡像。編輯 /etc/apt/sources.list , 把 cn.arhive.ubuntu.com 替換成 112.124.140.210 ,保存。
從此以后,就可以無煩惱更新系統了。
轉載于:https://my.oschina.net/ChiLin/blog/615934
總結
以上是生活随笔為你收集整理的更新 Ubuntu 系统,避免报错「校验和不符」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对导航条的改造
- 下一篇: 为网站加入Drupal星球制作RSS订阅