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