了解 Ubuntu 的軟件存儲(chǔ)庫系統(tǒng)
當(dāng)你開始使用 Ubuntu 或者其它基于 Ubuntu 的發(fā)行版時(shí),你很快就會(huì)學(xué)會(huì)使用 apt
命令安裝軟件包:
sudo apt install package_name
你可能還會(huì)使用這三條 PPA 命令安裝其它軟件:
sudo add-apt-repository ppa:PPA_Name/ppa
sudo apt update
sudo apt install package_from_ppa
但當(dāng)你添加一些外部的軟件存儲(chǔ)庫時(shí),很可能會(huì)遇到一些更新錯(cuò)誤。
盡管你可以在互聯(lián)網(wǎng)上搜索到同樣的報(bào)錯(cuò)以及對(duì)應(yīng)的解決方案,但在大多數(shù)情況下,你并不知道這些錯(cuò)誤為什么會(huì)出現(xiàn),也不知道它們是怎么被解決的。
如果你了解了 Ubuntu 軟件存儲(chǔ)庫的運(yùn)行機(jī)制,你就會(huì)很清楚這些問題的根源是什么,進(jìn)而對(duì)癥下藥地給出處理方式。
在技術(shù)論壇上,你可以找到很多相關(guān)的零散內(nèi)容,但那些碎片化的信息并不能讓你對(duì)其產(chǎn)生一個(gè)全面的理解。
因此我寫出了這篇文章,以便讓你全面了解軟件存儲(chǔ)庫是如何運(yùn)作的。
本文的內(nèi)容適用于 Linux Mint、Elementary OS 以及其它基于 Ubuntu 的發(fā)行版(Debian 或許也適用)。
本文主要面向終端用戶而不是開發(fā)者,我只會(huì)介紹維護(hù)系統(tǒng)軟件存儲(chǔ)庫所需要的知識(shí),不會(huì)展示如何在 Ubuntu 中打包應(yīng)用程序。
我們會(huì)先從關(guān)鍵部分開始,了解軟件包管理器和軟件存儲(chǔ)庫的基本概念。這可以為了解它們的底層運(yùn)作方式奠定基礎(chǔ)。
1、什么是包管理器?
簡(jiǎn)單地說,包管理器就是讓用戶在操作系統(tǒng)上安裝、移除、升級(jí)、配置、管理軟件包的工具。
Ubuntu 通過軟件存儲(chǔ)庫為用戶提供軟件。軟件存儲(chǔ)庫中包含了各種不同類型的軟件包以及它們的元數(shù)據(jù)文件,元數(shù)據(jù)文件中記錄了軟件包的信息,包括軟件包名稱、版本號(hào)、軟件包描述和軟件存儲(chǔ)庫名稱等。
軟件包管理器與元數(shù)據(jù)進(jìn)行交互,并在你的系統(tǒng)上創(chuàng)建本地的元數(shù)據(jù)緩存。當(dāng)你需要安裝軟件時(shí),軟件包管理器會(huì)引用這些緩存來獲取信息,通過互聯(lián)網(wǎng)連接到對(duì)應(yīng)的存儲(chǔ)庫下載軟件包,然后再將軟件包安裝到系統(tǒng)上。
下面這篇文章詳細(xì)介紹了軟件包管理器的工作原理,歡迎查閱。
2、Ubuntu 的默認(rèn)軟件存儲(chǔ)庫
在上一節(jié)中,你可能已經(jīng)對(duì)軟件存儲(chǔ)庫有了一些認(rèn)識(shí)。
你可能已經(jīng)猜到,沒有哪個(gè)軟件存儲(chǔ)庫會(huì)包含所有軟件包。因?yàn)檐浖鼤?huì)被分類放置在不同的軟件存儲(chǔ)庫中,這樣就可以方便地啟用或禁用部分軟件存儲(chǔ)庫。
每個(gè) Ubuntu 版本都有自己的一組四個(gè)官方存儲(chǔ)庫:
- Main – Canonical 支持的自由開源軟件
- Universe – 社區(qū)維護(hù)的自由開源軟件
- Restricted – 設(shè)備的專有驅(qū)動(dòng)程序
- Multiverse – 受版權(quán)或法律問題限制的軟件
下面這篇文章介紹了如何在 Ubuntu 中啟用 Universe 和 Multiverse 軟件存儲(chǔ)庫。
3、了解 sources.list
sources.list
是 Ubuntu 軟件存儲(chǔ)庫機(jī)制的一個(gè)組成部分。sources.list
文件中存在的錯(cuò)誤條目常常是引發(fā)一些與更新問題的根本原因。
因此,了解 sources.list
很重要。
sources.list
是一個(gè)記錄了軟件存儲(chǔ)庫信息的文本文件,每一行未被注釋的內(nèi)容都代表一個(gè)單獨(dú)的軟件存儲(chǔ)庫。
sources.list in Ubuntu
但這些內(nèi)容需要遵循特定的格式,并且不應(yīng)出現(xiàn)重復(fù)的行。下面這篇文章中介紹了 sources.list
的更多詳細(xì)內(nèi)容。
4、深入了解 PPA
盡管 Ubuntu 最近在大力推廣 Snap,但 PPA 仍然是獲取 Ubuntu 最新軟件的一個(gè)可靠途徑。
然而很多 Ubuntu 用戶都只是刻板地直接運(yùn)行上面的三條命令來使用 PPA,自然很容易會(huì)遇到諸如“repository does not have release file”這樣的問題。
下面這篇文章是一篇深入詳盡的 PPA 指南。
5、添加外部軟件存儲(chǔ)庫
除了默認(rèn)軟件存儲(chǔ)庫和 PPA,你還可以從第三方軟件存儲(chǔ)庫中添加軟件。比如 Brave 瀏覽器、Docker 等軟件都專門為 Ubuntu 提供了軟件存儲(chǔ)庫。
你可以通過下面這篇文章了解使用外部軟件存儲(chǔ)庫的機(jī)制。
6、排查常見錯(cuò)誤
現(xiàn)在你已經(jīng)了解了底層機(jī)制,現(xiàn)在可以熟悉一下在使用 Ubuntu 時(shí)可能遇到的典型更新錯(cuò)誤了。
當(dāng)你看到出現(xiàn)錯(cuò)誤之后,你會(huì)得到一些關(guān)于它的根本原因的提示。在了解根本原因后,你就能知道某個(gè)解決方案是如何解決問題的了。
這就是本文的目的。讓你充分了解軟件包管理系統(tǒng)的底層知識(shí),從而避免常見錯(cuò)誤或者直接有效修復(fù)這些錯(cuò)誤。
你不僅要知其然,還要知其所以然。
下載軟件存儲(chǔ)庫信息失敗
如果遇到了這種情況,就可以開始調(diào)查了。
Failed to download repository information
在某些情況下,可能是網(wǎng)絡(luò)連接的問題,但也有可能是因?yàn)槟阕孕刑砑恿四承┸浖鎯?chǔ)庫,或者 sources.list
中的條目有誤。
這個(gè)時(shí)候應(yīng)該在終端中嘗試刷新軟件包緩存。
sudo apt update
檢查輸出結(jié)果的最后幾行,它會(huì)給出錯(cuò)誤信息(也就是以 “E:” 開頭的行)。有了錯(cuò)誤信息之后,就可以開始故障排除了。
軟件存儲(chǔ)庫中沒有發(fā)布文件
如果 Ubuntu 用戶未檢查某個(gè) PPA 是否支持其 Ubuntu 版本,就盲目向系統(tǒng)中添加該 PPA 時(shí),就很可能會(huì)遇到這樣的錯(cuò)誤。
E: The repository ‘http://ppa.launchpad.net/numix/ppa/ubuntu focal Release’ does not have a Release file.
原因很可能就是這個(gè)軟件存儲(chǔ)庫沒有針對(duì)所使用的 Ubuntu 版本進(jìn)行配置。
下面這篇文章對(duì)此做了詳細(xì)解釋。
MergeList 問題
如果你看到這樣的錯(cuò)誤:
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.
這表明第二行中提到的緩存文件已經(jīng)損壞。對(duì)應(yīng)的解決方法是清空緩存并重試。
下面這篇文章對(duì)此做了詳細(xì)解釋。
目標(biāo)軟件包被多次配置
好吧!嚴(yán)格來說,這不是一個(gè)錯(cuò)誤。它只是一個(gè)警告。但它仍然很常見,可能會(huì)給許多 Ubuntu 新用戶帶來麻煩。
這是一個(gè)能讓你把新學(xué)到的知識(shí)用在這里的好例子。
出現(xiàn)這個(gè)問題是因?yàn)?nbsp;sources.list
文件中有重復(fù)的條目。解決辦法是將所有重復(fù)的行刪除至只保留一行。
下面這篇文章對(duì)此做了詳細(xì)解釋。
7、繼續(xù)學(xué)習(xí)
在讀完這篇文章后,希望你對(duì) Ubuntu 的軟件存儲(chǔ)庫機(jī)制能有更深入的了解。下一次當(dāng)你遇到錯(cuò)誤并尋找解決方案時(shí),你就更有可能理解發(fā)生了什么。
接下來,你應(yīng)該學(xué)會(huì)使用 apt
的各種命令管理軟件包,不僅僅只是 apt install
或 apt remove
。
你還可以詳細(xì)了解一下關(guān)于軟件包管理的其它知識(shí)。
由于 Ubuntu 比以往任何時(shí)候都更推崇 Snap,所以你也應(yīng)該學(xué)習(xí)一些必要的 Snap 命令。
Flatpak 應(yīng)用程序也越來越受歡迎,你也很可能會(huì)接觸到它們。
希望你喜歡學(xué)習(xí)軟件存儲(chǔ)庫的機(jī)制,并對(duì)軟件包管理有更清晰的認(rèn)識(shí)。