了解 Ubuntu 的軟體存儲庫系統
了解 Ubuntu 軟體倉庫系統的基本機制,更好地處理軟體包管理問題,避免常見的更新錯誤。
當你開始使用 Ubuntu 或者其它基於 Ubuntu 的發行版時,你很快就會學會使用 apt
命令安裝軟體包:
sudo apt install package_name
你可能還會使用這三條 PPA 命令安裝其它軟體:
sudo add-apt-repository ppa:PPA_Name/ppa
sudo apt update
sudo apt install package_from_ppa
但當你添加一些外部的軟體存儲庫時,很可能會遇到一些更新錯誤。
儘管你可以在互聯網上搜索到同樣的報錯以及對應的解決方案,但在大多數情況下,你並不知道這些錯誤為什麼會出現,也不知道它們是怎麼被解決的。
如果你了解了 Ubuntu 軟體存儲庫的運行機制,你就會很清楚這些問題的根源是什麼,進而對症下藥地給出處理方式。
在技術論壇上,你可以找到很多相關的零散內容,但那些碎片化的信息並不能讓你對其產生一個全面的理解。
因此我寫出了這篇文章,以便讓你全面了解軟體存儲庫是如何運作的。
本文的內容適用於 Linux Mint、Elementary OS 以及其它基於 Ubuntu 的發行版(Debian 或許也適用)。
本文主要面向終端用戶而不是開發者,我只會介紹維護系統軟體存儲庫所需要的知識,不會展示如何在 Ubuntu 中打包應用程序。
我們會先從關鍵部分開始,了解軟體包管理器和軟體存儲庫的基本概念。這可以為了解它們的底層運作方式奠定基礎。
1、什麼是包管理器?
簡單地說,包管理器就是讓用戶在操作系統上安裝、移除、升級、配置、管理軟體包的工具。
Ubuntu 通過軟體存儲庫為用戶提供軟體。軟體存儲庫中包含了各種不同類型的軟體包以及它們的元數據文件,元數據文件中記錄了軟體包的信息,包括軟體包名稱、版本號、軟體包描述和軟體存儲庫名稱等。
軟體包管理器與元數據進行交互,並在你的系統上創建本地的元數據緩存。當你需要安裝軟體時,軟體包管理器會引用這些緩存來獲取信息,通過互聯網連接到對應的存儲庫下載軟體包,然後再將軟體包安裝到系統上。
下面這篇文章詳細介紹了軟體包管理器的工作原理,歡迎查閱。
2、Ubuntu 的默認軟體存儲庫
在上一節中,你可能已經對軟體存儲庫有了一些認識。
你可能已經猜到,沒有哪個軟體存儲庫會包含所有軟體包。因為軟體包會被分類放置在不同的軟體存儲庫中,這樣就可以方便地啟用或禁用部分軟體存儲庫。
每個 Ubuntu 版本都有自己的一組四個官方存儲庫:
- Main – Canonical 支持的自由開源軟體
- Universe – 社區維護的自由開源軟體
- Restricted – 設備的專有驅動程序
- Multiverse – 受版權或法律問題限制的軟體
下面這篇文章介紹了如何在 Ubuntu 中啟用 Universe 和 Multiverse 軟體存儲庫。
3、了解 sources.list
sources.list
是 Ubuntu 軟體存儲庫機制的一個組成部分。sources.list
文件中存在的錯誤條目常常是引發一些與更新問題的根本原因。
因此,了解 sources.list
很重要。
sources.list
是一個記錄了軟體存儲庫信息的文本文件,每一行未被注釋的內容都代表一個單獨的軟體存儲庫。
但這些內容需要遵循特定的格式,並且不應出現重複的行。下面這篇文章中介紹了 sources.list
的更多詳細內容。
4、深入了解 PPA
儘管 Ubuntu 最近在大力推廣 Snap,但 PPA 仍然是獲取 Ubuntu 最新軟體的一個可靠途徑。
然而很多 Ubuntu 用戶都只是刻板地直接運行上面的三條命令來使用 PPA,自然很容易會遇到諸如「repository does not have release file」這樣的問題。
下面這篇文章是一篇深入詳盡的 PPA 指南。
5、添加外部軟體存儲庫
除了默認軟體存儲庫和 PPA,你還可以從第三方軟體存儲庫中添加軟體。比如 Brave 瀏覽器、Docker 等軟體都專門為 Ubuntu 提供了軟體存儲庫。
你可以通過下面這篇文章了解使用外部軟體存儲庫的機制。
6、排查常見錯誤
現在你已經了解了底層機制,現在可以熟悉一下在使用 Ubuntu 時可能遇到的典型更新錯誤了。
當你看到出現錯誤之後,你會得到一些關於它的根本原因的提示。在了解根本原因後,你就能知道某個解決方案是如何解決問題的了。
這就是本文的目的。讓你充分了解軟體包管理系統的底層知識,從而避免常見錯誤或者直接有效修復這些錯誤。
你不僅要知其然,還要知其所以然。
下載軟體存儲庫信息失敗
如果遇到了這種情況,就可以開始調查了。
在某些情況下,可能是網路連接的問題,但也有可能是因為你自行添加了某些軟體存儲庫,或者 sources.list
中的條目有誤。
這個時候應該在終端中嘗試刷新軟體包緩存。
sudo apt update
檢查輸出結果的最後幾行,它會給出錯誤信息(也就是以 「E:」 開頭的行)。有了錯誤信息之後,就可以開始故障排除了。
軟體存儲庫中沒有發布文件
如果 Ubuntu 用戶未檢查某個 PPA 是否支持其 Ubuntu 版本,就盲目向系統中添加該 PPA 時,就很可能會遇到這樣的錯誤。
E: The repository 『http://ppa.launchpad.net/numix/ppa/ubuntu focal Release』 does not have a Release file.
原因很可能就是這個軟體存儲庫沒有針對所使用的 Ubuntu 版本進行配置。
下面這篇文章對此做了詳細解釋。
MergeList 問題
如果你看到這樣的錯誤:
E:Encountered a section with no Package: header,
E:Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_precise_universe_binary-i386_Packages,
E:The package lists or status file could not be parsed or opened.
這表明第二行中提到的緩存文件已經損壞。對應的解決方法是清空緩存並重試。
下面這篇文章對此做了詳細解釋。
目標軟體包被多次配置
好吧!嚴格來說,這不是一個錯誤。它只是一個警告。但它仍然很常見,可能會給許多 Ubuntu 新用戶帶來麻煩。
這是一個能讓你把新學到的知識用在這裡的好例子。
出現這個問題是因為 sources.list
文件中有重複的條目。解決辦法是將所有重複的行刪除至只保留一行。
下面這篇文章對此做了詳細解釋。
7、繼續學習
在讀完這篇文章後,希望你對 Ubuntu 的軟體存儲庫機制能有更深入的了解。下一次當你遇到錯誤並尋找解決方案時,你就更有可能理解發生了什麼。
接下來,你應該學會使用 apt
的各種命令管理軟體包,不僅僅只是 apt install
或 apt remove
。
你還可以詳細了解一下關於軟體包管理的其它知識。
由於 Ubuntu 比以往任何時候都更推崇 Snap,所以你也應該學習一些必要的 Snap 命令。
Flatpak 應用程序也越來越受歡迎,你也很可能會接觸到它們。
希望你喜歡學習軟體存儲庫的機制,並對軟體包管理有更清晰的認識。歡迎在評論區分享你的想法。
(題圖:MJ/6878226c-f6b0-40e7-aae7-d64932b36464)
via: https://itsfoss.com/ubuntu-repository-mechanism/
作者:Abhishek Prakash 選題:lkxed 譯者:HankChow 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive