戰(zhàn):手把手配置阿里云鏡像加速apt下載)
用Ubuntu這幾年apt源這事兒給我留下的印象最深。剛上手那陣子每次執(zhí)行apt install都得盯著進(jìn)度條發(fā)呆一個(gè)幾MB的包能拖到天荒地老中間還動(dòng)不動(dòng)就斷斷完還得重新下載。后來我了解到這問題多半出在軟件源上也就是apt從哪兒拉軟件包的地址。把源換成阿里云鏡像之后下載速度幾乎是肉眼可見地竄上來原來幾十分鐘的更新任務(wù)幾十秒就能跑完。這篇文章我就把這個(gè)操作從頭到尾拆開講一遍包括為什么要這么做、每一步在干什么、失敗時(shí)怎么排查盡量讓剛接觸Linux的朋友也能照著做成功也讓老手能從中找到一些平時(shí)不太注意的細(xì)節(jié)。1. 為什么要把 apt 源換成阿里鏡像換源這個(gè)操作聽起來像是在改系統(tǒng)配置其實(shí)它做的只是一個(gè)非常樸素的事情告訴apt“你可以去哪個(gè)服務(wù)器下載軟件”。默認(rèn)情況下Ubuntu使用的是官方源服務(wù)器分布在海外從國內(nèi)訪問時(shí)繞了很遠(yuǎn)的路速度和穩(wěn)定性自然都受影響。1.1 官方源為什么在國內(nèi)這么慢Ubuntu官方源默認(rèn)指向的是archive.ubuntu.com這類地址服務(wù)器大多部署在境外。國內(nèi)用戶訪問時(shí)網(wǎng)絡(luò)請(qǐng)求要經(jīng)過國際出口在高峰期丟包、超時(shí)都是常事。apt在下載軟件包時(shí)還會(huì)校驗(yàn)完整性如果連接中途斷開往往整個(gè)deb包都要重新拉取體驗(yàn)就更差了。我最早不當(dāng)回事覺得慢就慢吧多等一會(huì)兒總行。直到有一次在服務(wù)器上執(zhí)行apt-get dist-upgrade需要升級(jí)幾百個(gè)包結(jié)果跑了一個(gè)多小時(shí)還在那邊反復(fù)重試我才意識(shí)到這不是簡單等一等就能解決的問題。網(wǎng)絡(luò)鏈路質(zhì)量差不是你本地帶寬高就能彌補(bǔ)的換一個(gè)國內(nèi)可達(dá)的鏡像源就是最直接的解法。1.2 阿里源好在哪兒又該注意什么阿里云鏡像站是國內(nèi)用得比較廣泛的Linux軟件源之一它的優(yōu)勢主要體現(xiàn)在幾個(gè)方面。首先是速度服務(wù)器同樣部署在國內(nèi)訪問延遲低滿帶寬下載是常態(tài)。其次是同步頻率它和Ubuntu官方源保持定期同步絕大多數(shù)軟件包都能及時(shí)更新日常使用基本感覺不到差異。再有就是穩(wěn)定性大型鏡像站的基礎(chǔ)設(shè)施和冗余做得比較足不會(huì)因?yàn)橐稽c(diǎn)小故障就大面積不可用。換成阿里源之前我也對(duì)比過其他幾個(gè)國內(nèi)源。有的同步不及時(shí)裝某些新版本軟件時(shí)找不到包有的覆蓋率不夠第三方源要手動(dòng)補(bǔ)配置。相比之下阿里源在通用性和更新速度上平衡得比較好加上它的配置方式簡單粗暴幾乎就是替換文件里的服務(wù)器地址非常適合作為首選。不過有一點(diǎn)需要提前說明鏡像源沒有好壞絕對(duì)之分只有適不適合你的網(wǎng)絡(luò)環(huán)境。如果你所在的網(wǎng)絡(luò)訪問其他鏡像站更快那就靈活調(diào)整不用迷信哪一個(gè)。換源的核心思路是一樣的就是想辦法讓apt離你的網(wǎng)絡(luò)更近一步。2. 換源前的準(zhǔn)備工作很多教程上來就讓你改文件但我不建議這么做。換源看起來只是一條sed命令的事可如果版本搞錯(cuò)、文件改壞后面排查起來反而浪費(fèi)時(shí)間。我習(xí)慣把準(zhǔn)備工作分成三步確認(rèn)系統(tǒng)版本、備份原始配置、搞清楚源文件的格式含義。2.1 先搞清楚你的 Ubuntu 版本Ubuntu每個(gè)正式版本都有一個(gè)代號(hào)比如20.04叫focal22.04叫jammy24.04叫noble。阿里源的配置內(nèi)容里必須帶上這個(gè)代號(hào)因?yàn)檐浖}庫是分目錄存放的版本不同路徑就不同。你要是拿jammy的源去配focal的系統(tǒng)輕則更新報(bào)404重則裝錯(cuò)依賴把系統(tǒng)搞出問題。查看版本最直接的辦法是執(zhí)行l(wèi)sb_release -a如果這條命令沒裝就用下面這條cat /etc/os-release看到VERSION_CODENAME這一行就足夠了比如VERSION_CODENAMEjammy說明系統(tǒng)是22.04下面寫源時(shí)就用jammy字樣。我還習(xí)慣同時(shí)看一眼系統(tǒng)架構(gòu)執(zhí)行uname -m確認(rèn)自己是amd64還是arm64。雖然阿里源大多數(shù)情況下能自動(dòng)適配架構(gòu)但手動(dòng)確認(rèn)一次能避免后續(xù)安裝軟件時(shí)踩到架構(gòu)不匹配的坑。2.2 給源文件做好備份改系統(tǒng)配置文件之前先備份這個(gè)習(xí)慣能救你很多次。尤其是源文件這種改錯(cuò)會(huì)影響整個(gè)軟件管理的文件備份更是必須做。原配的sources.list是apt工作正常的基準(zhǔn)配置一旦你改壞或者寫錯(cuò)還能用備份快速還原不至于手忙腳亂。備份命令很簡單sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak有些新版Ubuntu已經(jīng)把源拆分到了/etc/apt/sources.list.d/目錄下用ubuntu.sources這種新格式。這時(shí)候建議把整個(gè)目錄都備份一下sudo cp -r /etc/apt/sources.list.d /etc/apt/sources.list.d.bak備份完不要急著走順手驗(yàn)證一下文件確實(shí)生成了用ls命令看一眼就行。我就遇到過有人敲完備份命令后沒確認(rèn)后來改完源才發(fā)現(xiàn)備份根本沒生成只能對(duì)著報(bào)錯(cuò)干瞪眼。2.3 理解 source list 里每一行在干什么Ubuntu的源文件里每一行都代表了apt可以訪問的一個(gè)軟件倉庫。傳統(tǒng)的sources.list格式大概是這樣的deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse這一行拆開來看deb表示這是個(gè)二進(jìn)制軟件包倉庫后面跟的是服務(wù)器地址然后是版本代號(hào)最后是倉庫組件。組件里的main是官方維護(hù)的自由軟件restricted是驅(qū)動(dòng)等受限軟件universe是社區(qū)維護(hù)的自由軟件multiverse是包含版權(quán)或法律限制的軟件。默認(rèn)配置通常把四個(gè)組件全寫上這樣能安裝的軟件范圍才完整。新版Ubuntu使用deb822格式寫在/etc/apt/sources.list.d/ubuntu.sources里結(jié)構(gòu)上是段落式的。但不管哪種格式要改的核心都是服務(wù)器地址。順便說一句security倉庫也很重要它負(fù)責(zé)推送安全更新?lián)Q源時(shí)別把安全更新倉庫漏了出現(xiàn)apt提示有安全漏洞沒修復(fù)通常就是因?yàn)樗鼪]配上。3. 手把手配置阿里源準(zhǔn)備工作做完了接下來就是實(shí)際操作。這一部分我會(huì)給出不同版本的完整源內(nèi)容再講兩種寫入方式最后說怎么驗(yàn)證是否生效。整個(gè)過程跟著走基本不會(huì)有問題。3.1 不同 Ubuntu 版本的源內(nèi)容阿里云官方鏡像站提供了現(xiàn)成的源配置示例直接復(fù)制對(duì)應(yīng)的版本段落就行。這里拿最常見的三個(gè)版本舉例注意把版本代號(hào)換成你自己系統(tǒng)的代號(hào)。20.04focal的源內(nèi)容如下deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse22.04jammy則是deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse24.04noble也一樣把代號(hào)換成noble就行deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse要是Ubuntu版本比較老或者之后出了新版本直接上阿里云鏡像站的幫助頁面查現(xiàn)成的配置比自己記代號(hào)和路徑靠譜得多。另外如果你在用ARM架構(gòu)的機(jī)器地址大概率不用變阿里源會(huì)自動(dòng)處理架構(gòu)重定向這一點(diǎn)實(shí)測下來問題是比較少的。3.2 用命令寫入源文件的兩套方案寫入方式有兩種我分別說一下。第一種適合有圖形界面或者習(xí)慣用編輯器的朋友。直接用nano打開文件把原來的內(nèi)容刪掉粘貼新的源內(nèi)容保存退出。如果你更熟悉vim就用vim操作效果一樣sudo nano /etc/apt/sources.list這里提醒一個(gè)小細(xì)節(jié)編輯完成后一定檢查有沒有多余的空格、特殊符號(hào)有時(shí)候從網(wǎng)頁復(fù)制內(nèi)容會(huì)帶上隱藏的格式字符一旦混進(jìn)源文件apt解析時(shí)就會(huì)報(bào)“invalid value”之類的錯(cuò)。第二種方式適合命令行操作用echo把內(nèi)容重定向到文件里。我常用的是給文件追加內(nèi)容前先清空或者直接用多行字符串一次寫入。比如sudo bash -c cat /etc/apt/sources.list EOF deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse EOF如果你用的是新版Ubuntu的sources.list.d目錄結(jié)構(gòu)建議把新的deb822格式配置寫到/etc/apt/sources.list.d/ubuntu.sources里或者直接新建一個(gè)阿里源配置文件同時(shí)注釋掉舊文件。個(gè)人經(jīng)驗(yàn)是新老格式混用容易讓人困惑干脆就把默認(rèn)的ubuntu.sources內(nèi)容替換成對(duì)應(yīng)的阿里源段落再清掉sources.list里的官方地址避免兩處配置沖突。3.3 更新軟件源緩存并驗(yàn)證源文件改完之后必須執(zhí)行apt update讓系統(tǒng)重新拉取軟件列表這一步跑不起來的話前面全都白做。命令是sudo apt update正常執(zhí)行時(shí)終端會(huì)看到從mirrors.aliyun.com下載索引文件的過程最后提示“Reading package lists... Done”??吹竭@里基本就說明源已經(jīng)生效了。接著可以順手跑一次sudo apt upgrade用來驗(yàn)證軟件包升級(jí)是否正常。第一次換源后跑upgrade可能會(huì)升級(jí)一批軟件包這屬于正?,F(xiàn)象因?yàn)殓R像源同步的內(nèi)容可能比你本地緩存的更新。實(shí)測下來阿里源在高峰期也能保持比較穩(wěn)定的連接就算偶發(fā)一次兩次超時(shí)多跑一遍apt update往往就恢復(fù)了。4. 常見問題排查與避坑實(shí)錄換源這個(gè)操作本身不難難的是出錯(cuò)之后怎么定位。我把自己踩過和幫別人排查過的典型問題整理出來按優(yōu)先級(jí)排了個(gè)序你遇到報(bào)錯(cuò)時(shí)先對(duì)照看。4.1 404 錯(cuò)誤倉庫地址對(duì)不上版本更新時(shí)如果看到類似這樣的提示Err:6 http://mirrors.aliyun.com/ubuntu/ jammy Release 404 Not Found原因基本只有一個(gè)你配置的版本代號(hào)和系統(tǒng)實(shí)際版本對(duì)不上或者鏡像站沒有收錄這個(gè)倉庫路徑。解決辦法是先確認(rèn)自己的系統(tǒng)版本再回去對(duì)比3.1節(jié)的配置內(nèi)容把代號(hào)改正確。還有一種情況是把軟件源寫太雜比如同時(shí)配置了老版本和新版本的倉庫apt在做索引時(shí)就會(huì)報(bào)找不到某個(gè)目錄的錯(cuò)。我建議保持源文件干凈一個(gè)版本對(duì)應(yīng)一份配置不要想著多管齊下。4.2 簽名驗(yàn)證失敗或 NO_PUBKEY執(zhí)行apt update時(shí)偶爾會(huì)出現(xiàn)簽名驗(yàn)證相關(guān)的報(bào)錯(cuò)像是NO_PUBKEY后面跟一長串密鑰ID。這其實(shí)是系統(tǒng)在告訴你它不認(rèn)這個(gè)倉庫的GPG密鑰。阿里云鏡像站作為官方源的同步鏡像一般來說密鑰是齊全的但如果你的系統(tǒng)缺少某些第三方倉庫密鑰或者密鑰過期了就會(huì)觸發(fā)這個(gè)提示。處理方式分兩步。第一步先試著更新密鑰緩存sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 密鑰ID老版本里apt-key還能用新版Ubuntu更推薦把密鑰放到/etc/apt/trusted.gpg.d/目錄下。實(shí)在不行就搜索一下對(duì)應(yīng)倉庫的官方密鑰安裝說明按它的方式導(dǎo)入。多數(shù)情況下做完這些再跑一遍apt update就能順利通過。4.3 連接超時(shí)或拒絕連接源文件配置正確但更新時(shí)卡住或者提示connect timed out這通常是網(wǎng)絡(luò)層面的問題。鏡像站并不是每一個(gè)時(shí)刻對(duì)所有網(wǎng)絡(luò)都友好有些網(wǎng)絡(luò)環(huán)境對(duì)海外IP限速特別明顯這時(shí)可以檢查一下有沒有走代理或者嘗試切換DNS。我有個(gè)比較土但有效的排查法先單獨(dú)訪問一下鏡像站首頁看看瀏覽器能不能正常打開。如果能打開而apt不行多半是防火墻或代理配置的問題如果瀏覽器也打不開那基本就是你的網(wǎng)絡(luò)到鏡像站根本不暢通這時(shí)候換一個(gè)國內(nèi)源反而更實(shí)際。4.4 換源后軟件包版本偏舊換源后有人會(huì)發(fā)現(xiàn)某些軟件版本比官方源上標(biāo)注的舊原因是鏡像站的同步需要時(shí)間。阿里源通常同步頻率很高但具體到每一個(gè)倉庫、每一個(gè)包更新可能有延遲。遇到特別著急裝的版本可以先用apt-cache policy 軟件包名看看當(dāng)前倉庫里提供的版本如果確實(shí)落后要么等鏡像同步要么去軟件官方倉庫加一行第三方源。需要注意第三方源和阿里源混用時(shí)依賴關(guān)系可能變復(fù)雜裝完容易出問題。我的習(xí)慣是盡量少混源真要加第三方倉庫也只在必要時(shí)臨時(shí)啟用裝完就注釋掉。4.5 關(guān)于安全性的幾個(gè)提醒有些人換完源就不聞不問了其實(shí)有幾個(gè)小細(xì)節(jié)值得留心。第一不要把源文件里的deb地址改成http之外的奇怪協(xié)議除非你非常清楚自己在做什么。默認(rèn)的http在傳輸時(shí)沒有加密如果擔(dān)心被篡改可以考慮HTTPS鏡像但前提是你的源確實(shí)支持。第二勤更新apt緩存別讓軟件列表太久沒有刷新否則安全補(bǔ)丁會(huì)滯后。第三如果哪天系統(tǒng)提示某個(gè)軟件包來自“未認(rèn)證”的倉庫先想想自己是不是加了奇怪的源再?zèng)Q定是否安裝。我個(gè)人在實(shí)際操作里的體會(huì)是換源這件事本質(zhì)上不是“一勞永逸”而是把軟件獲取這件事從不可控的境外網(wǎng)絡(luò)轉(zhuǎn)移到一個(gè)更可控的國內(nèi)節(jié)點(diǎn)。它的價(jià)值在于讓你后續(xù)安裝軟件、升級(jí)系統(tǒng)時(shí)都能有一個(gè)穩(wěn)定的基礎(chǔ)。對(duì)新手來說按照這個(gè)流程操作一次以后再遇到源相關(guān)的問題思路會(huì)清晰很多。最后分享一個(gè)小技巧換完源后定期執(zhí)行一次apt update apt list --upgradable能讓你對(duì)系統(tǒng)里有哪些可更新包心里有數(shù)這個(gè)習(xí)慣比臨時(shí)抱佛腳強(qiáng)太多了。