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