什么是 PPA?為什么要使用 PPA乏盐?
PPA 表示 個人軟件包存檔(Personal Package Archive)戳护。
軟件倉庫和包管理的概念
軟件倉庫是一組文件宜肉,其中包含各種軟件及其版本的信息吟温,以及校驗和等其他一些詳細(xì)信息。每個版本的 Ubuntu 都有自己的四個官方軟件倉庫:
- Main - Canonical 支持的自由開源軟件梅鹦。
- Universe - 社區(qū)維護的自由開源軟件裆甩。
- Restricted - 設(shè)備的專有驅(qū)動程序。
- Multiverse - 受版權(quán)或法律問題限制的軟件帘瞭。
你可以在 這里 看到所有版本的 Ubuntu 的軟件倉庫淑掌。你可以瀏覽并轉(zhuǎn)到各個倉庫。
所以蝶念,PPA 基本上是一個包含軟件信息的網(wǎng)址抛腕。那你的系統(tǒng)又是如何知道這些倉庫的位置的呢?
這些信息存儲在 /etc/apt 目錄中的 sources.list 文件中媒殉。如果查看此文件的內(nèi)容担敌,你就會看到里面有軟件倉庫的網(wǎng)址。# 開頭的行將被忽略廷蓉。
這樣的話全封,當(dāng)你運行 sudo apt update
命令時马昙,你的系統(tǒng)將使用 APT 工具 來檢查軟件倉庫并將軟件及其版本信息存儲在緩存中。當(dāng)你使用 sudo apt install package_name
命令時刹悴,它通過該信息從實際存儲軟件的網(wǎng)址獲取該軟件包行楞。
如果軟件倉庫中沒有關(guān)于某個包的信息,你將看到如下錯誤:
E: Unable to locate package
此時土匀,建議閱讀我的 apt 命令使用指南 一文子房,這將幫你更好地理解 apt
、update
等命令就轧。
以上是關(guān)于軟件倉庫的內(nèi)容证杭。但什么是 PPA?PPA 和軟件倉庫又有什么關(guān)聯(lián)呢妒御?
為什么要用 PPA解愤?
如你所見,Ubuntu 對系統(tǒng)中的軟件進(jìn)行管理乎莉,更重要的是控制你在系統(tǒng)上獲得哪個版本的軟件送讲。但想象一下開發(fā)人員發(fā)布了軟件的新版本的情況。
Ubuntu 不會立即提供該新版本的軟件惋啃。需要一個步驟來檢查此新版本的軟件是否與系統(tǒng)兼容李茫,從而可以確保系統(tǒng)的穩(wěn)定性。
但這也意味著它需要經(jīng)過幾周才能在 Ubuntu 上可用肥橙,在某些情況下,這可能需要幾個月的時間秸侣。不是每個人都想等待那么長時間才能獲得他們最喜歡的軟件的新版本存筏。
類似地,假設(shè)有人開發(fā)了一款軟件味榛,并希望 Ubuntu 將該軟件包含在官方軟件倉庫中椭坚。在 Ubuntu 做出決定并將其包含在官方存軟件倉庫之前,還需要幾個月的時間搏色。
另一種情況是在 beta 測試階段善茎。即使官方軟件倉庫中提供了穩(wěn)定版本的軟件,軟件開發(fā)人員也可能希望某些終端用戶測試他們即將發(fā)布的版本频轿。他們是如何使終端用戶對即將發(fā)布的版本進(jìn)行 beta 測試的呢垂涯?
通過 PPA!
如何使用 PPA航邢?PPA 是怎樣工作的耕赘?
正如我已經(jīng)告訴過你的那樣,PPA 代表 個人軟件包存檔(Personal Package Archive)膳殷。在這里注意 “個人” 這個詞操骡,它暗示了這是開發(fā)人員獨有的東西,并沒有得到分發(fā)的正式許可。
終端用戶册招,也就是你岔激,可以將 PPA 倉庫添加到 sources.list 文件中,當(dāng)你更新系統(tǒng)時是掰,你的系統(tǒng)會知道這個新軟件的可用性虑鼎,然后你可以使用標(biāo)準(zhǔn)的 sudo apt install
命令安裝它。
sudo add-apt-repository ppa:dr-akulavich/lighttable
sudo apt-get update
sudo apt-get install lighttable-installer
概括一下上面三個命令:
- sudo add-apt-repository <PPA_info> <- 此命令將 PPA 倉庫添加到列表中冀惭。
- sudo apt-get update <- 此命令更新可以在當(dāng)前系統(tǒng)上安裝的軟件包列表震叙。
- sudo apt-get install <package_in_PPA> <- 此命令安裝軟件包。
你會發(fā)現(xiàn)使用 sudo apt update 命令非常重要散休,否則你的系統(tǒng)將無法知道新軟件包何時可用媒楼。
現(xiàn)在讓我們更詳細(xì)地看一下第一個命令。
sudo add-apt-repository ppa:dr-akulavich/lighttable
你會注意到此命令沒有軟件倉庫的 URL戚丸。這是因為該工具被設(shè)計成將 URL 信息抽象之后再展示給你划址。
小小注意一下:如果你添加的是 ppa:dr-akulavich/lighttable,你會得到 Light Table限府。但是如果你添加 ppa:dr-akulavich夺颤,你將得到 “上層軟件倉庫” 中的所有倉庫或軟件包。它是按層級劃分的胁勺。
基本上世澜,當(dāng)您使用 add-apt-repository 添加 PPA 時,它將執(zhí)行與手動運行這些命令相同的操作:
deb http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu YOUR_UBUNTU_VERSION_HERE main
deb-src http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu YOUR_UBUNTU_VERSION_HERE main
以上兩行是將任何軟件倉庫添加到你系統(tǒng)的 sources.list 文件的傳統(tǒng)方法署穗。但 PPA 會自動為你完成這些工作寥裂,無需考慮確切的軟件倉庫 URL 和操作系統(tǒng)版本。
此處不那么重要的一點是案疲,當(dāng)你使用 PPA 時封恰,它不會更改原始的 sources.list 文件。相反褐啡,它在 /etc/apt/sources.d 目錄中創(chuàng)建了兩個文件诺舔,一個 .list 文件和一個帶有 .save 后綴的備份文件。
PPA創(chuàng)建了單獨的 sources.list 文件
帶有后綴 .list 的文件含有添加軟件倉庫的信息的命令备畦。
一個 PPA 的 source.list 文件的內(nèi)容
這是一種安全措施低飒,可以確保添加的 PPA 不會和原始的 sources.list 文件弄混,它還有助于移除 PPA萍恕。
為什么使用 PPA逸嘀?為何不用 DEB 包
你可能會問為什么要使用 PPA,PPA 需要通過命令行使用允粤,而不是每個人都喜歡用命令行崭倘。為什么不直接分發(fā)可以圖形方式安裝的 DEB 包呢翼岁?
答案在于更新的過程。如果使用 DEB 包安裝軟件司光,將無法保證在運行 sudo apt update 和 sudo apt upgrade 命令時琅坡,已安裝的軟件會被更新為較新的版本。
這是因為 apt 的升級過程依賴于 sources.list 文件残家。如果文件中沒有相應(yīng)的軟件條目榆俺,則不會通過標(biāo)準(zhǔn)軟件更新程序獲得更新。
那么這是否意味著使用 DEB 安裝的軟件永遠(yuǎn)不會得到更新坞淮?不是的茴晋。這取決于 DEB 包的創(chuàng)建方式。
一些開發(fā)人員會自動在 sources.list 中添加一個條目回窘,這樣軟件就可以像普通軟件一樣更新诺擅。谷歌 Chrome 瀏覽器就是這樣一個例子。
某些軟件會在運行時通知你有新版本可用啡直。你必須下載新的 DEB 包并再次運行烁涌,來將當(dāng)前軟件更新為較新版本。Oracle Virtual Box 就是這樣一個例子酒觅。
對于其余的 DEB 軟件包撮执,你必須手動查找更新,這很不方便舷丹,尤其是在你的軟件面向 Beta 測試者時抒钱,你需要頻繁的添加很多更新。這正是 PPA 要解決的問題颜凯。
官方 PPA vs 非官方 PPA
你或許聽過官方 PPA 或非官方 PPA 這個詞继效,二者有什么不同呢?
開發(fā)人員為他們的軟件創(chuàng)建的 PPA 稱為官方 PPA装获。很明顯,這是因為它來自項目開發(fā)者厉颤。
但有時穴豫,個人會創(chuàng)建由其他開發(fā)人員所創(chuàng)建的項目的 PPA。
為什么會有人這樣做逼友? 因為許多開發(fā)人員只提供軟件的源代碼精肃,而且你也知道 在 Linux 中從源代碼安裝軟件 是一件痛苦的事情,并不是每個人都可以或者會這樣做帜乞。
這就是志愿者自己從這些源代碼創(chuàng)建 PPA 以便其他用戶可以輕松安裝軟件的原因司抱。畢竟,使用這 3 行命令比從源代碼安裝要容易得多黎烈。
確保你的 Linux 發(fā)行版本可以使用 PPA
當(dāng)在 Ubuntu 或任何其他基于 Debian 的發(fā)行版中使用 PPA 時习柠,你應(yīng)該記住一些事情匀谣。
并非每個 PPA 都適用于你的特定版本。你應(yīng)該知道正在使用 哪個版本的 Ubuntu资溃。版本的開發(fā)代號很重要武翎,因為當(dāng)你訪問某個 PPA 的頁面時,你可以看到該 PPA 都支持哪些版本的 Ubuntu溶锭。
對于其他基于 Ubuntu 的發(fā)行版宝恶,你可以查看 /etc/os-release
的內(nèi)容來 找出 Ubuntu 版本 的信息。
檢查 PPA 是否適用于你的 Ubuntu 版本
如何知道 PPA 的網(wǎng)址呢趴捅?只需在網(wǎng)上搜索 PPA 的名稱垫毙,如 ppa:dr-akulavich/lighttable
,第一個搜索結(jié)果來自 Launchpad拱绑,這是托管 PPA 的官方平臺综芥。你也可以轉(zhuǎn)到 Launchpad 并直接在那里搜索所需的 PPA。
如果不驗證是否適用當(dāng)前的版本就添加 PPA欺栗,當(dāng)嘗試安裝不適用于你的系統(tǒng)版本的軟件時毫痕,可能會看到類似下面的錯誤。
E: Unable to locate package
更糟糕的是迟几,因為它已經(jīng)添加到你的 source.list
中消请,每次運行軟件更新程序時,你都會看到 “無法下載軟件倉庫信息” 的錯誤类腮。
如果你在終端中運行 sudo apt update臊泰,錯誤提示將包含導(dǎo)致此問題的倉庫的更多詳細(xì)信息。你可以在 sudo apt update 的輸出內(nèi)容結(jié)尾看到類似的內(nèi)容:
W: Failed to fetch http://ppa.launchpad.net/venerix/pkg/ubuntu/dists/raring/main/binary-i386/Packages 404 Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.
上面的錯誤提示說的很明白蚜枢,是因為系統(tǒng)找不到當(dāng)前版本對應(yīng)的倉庫缸逃。還記得我們之前看到的倉庫結(jié)構(gòu)嗎?APT 將嘗試在http://ppa.launchpad.net/<PPA_NAME>/ubuntu/dists/<Ubuntu_Version>
中尋找軟件信息厂抽。
如果特定版本的 PPA 不可用需频,它將永遠(yuǎn)無法打開 URL,你會看到著名的 404 錯誤筷凤。
為什么 PPA 不適用于所有 Ubuntu 發(fā)行版昭殉?
這是因為 PPA 的作者必須編譯軟件并在特定版本上創(chuàng)建 PPA∶晔兀考慮到每六個月發(fā)布一個新的 Ubuntu 版本挪丢,為每個版本的 Ubuntu 更新 PPA 是一項繁瑣的任務(wù),并非所有開發(fā)人員都有時間這樣做卢厂。
如果 PPA 不適用于你的系統(tǒng)版本乾蓬,該如何安裝應(yīng)用程序?
盡管 PPA 不適用于你的 Ubuntu 版本慎恒,你仍然可以下載 DEB 文件并安裝應(yīng)用程序任内。
比如說撵渡,你訪問 Light Table 的 PPA 頁面,使用剛剛學(xué)到的有關(guān) PPA 的知識族奢,你會發(fā)現(xiàn) PPA 不適用于你的特定 Ubuntu 版本姥闭。
你可以點擊 “查看軟件包詳細(xì)信息”。
Get DEB file from PPA
在這里越走,你可以單擊軟件包以顯示更多詳細(xì)信息棚品,還可以在此處找到包的源代碼和 DEB 文件。
Download DEB file from PPA
我建議 使用 Gdebi 安裝這些 DEB 文件 而不是通過軟件中心廊敌,因為 Gdebi 在處理依賴項方面要好得多铜跑。
請注意,以這種方式安裝的軟件包可能無法獲得任何將來的更新骡澈。
我認(rèn)為你已經(jīng)閱讀了足夠多的關(guān)于添加 PPA 的內(nèi)容锅纺,那么如何刪除 PPA 及其安裝的軟件呢?
如何刪除 PPA肋殴?
我過去曾寫過 刪除 PPA 的教程囤锉,這里寫的也是同樣的方法。
我建議在刪除 PPA 之前刪除從 PPA 安裝的軟件护锤。如果只是刪除 PPA官地,則已安裝的軟件仍保留在系統(tǒng)中,但不會獲得任何更新烙懦。這不是你想要的驱入,不是嗎?
那么氯析,問題來了亏较,如何知道是哪個 PPA 安裝了哪個應(yīng)用程序?
查找 PPA 安裝的軟件包并將其移除
Ubuntu 軟件中心無法移除 PPA 安裝的軟件包掩缓,你必須使用具有更多高級功能的 Synaptic 包管理器雪情。
可以從軟件中心安裝 Synaptic 或使用以下命令進(jìn)行安裝:
sudo apt install synaptic
安裝后,啟動 Synaptic 包管理器并選擇 “Origin”你辣。你會看到添加到系統(tǒng)的各種軟件倉庫旺罢。PPA 條目將以前綴 PPA 進(jìn)行標(biāo)識,單擊以查看 PPA 可用的包绢记。已安裝的軟件前面會有恰當(dāng)?shù)姆栠M(jìn)行標(biāo)識。
查找通過 PPA 安裝的軟件包
找到包后正卧,你可以從 Synaptic 刪除它們蠢熄。此外,也始終可以選擇使用命令行進(jìn)行移除:
sudo apt remove package_name
刪除 PPA 安裝的軟件包后炉旷,你可以繼續(xù)從 sources.list 中刪除PPA签孔。
以圖形界面的方式刪除 PPA
在設(shè)置中打開 “軟件和更新”叉讥,然后點擊 “其他軟件” 選項卡。查找要刪除的 PPA:
Delete a PPA from Software Source
此處你可以進(jìn)項兩項操作饥追,可以取消選擇 PPA 或選擇 “刪除” 選項图仓。
區(qū)別在于,當(dāng)你取消選擇 PPA 條目時但绕,系統(tǒng)將在 /etc/apt/sources.list.d 中的ppa_name.list文件中注釋掉倉庫條目救崔;但如果選擇 “刪除” 選項,將會刪除 /etc/apt/sources.list.d目錄中 ppa_name.list 文件里的倉庫條目捏顺。
在這兩種情況下六孵,文件 ppa_name.list 都保留在所在的目錄中,即使它是空的幅骄。
使用 PPA 安全嗎劫窒?
這是一個主觀問題。純粹主義者厭惡 PPA拆座,因為大多數(shù)時候 PPA 來自第三方開發(fā)者主巍。但與此同時,PPA 在 Debian/Ubuntu 世界中很受歡迎挪凑,因為它們提供了更簡單的安裝選項孕索。
就安全性而言,很少見到因為使用 PPA 之后你的 Linux 系統(tǒng)被黑客攻擊或注入惡意軟件岖赋。到目前為止檬果,我不記得發(fā)生過這樣的事件。
官方 PPA 可以不加考慮的使用唐断,使用非官方 PPA 完全是你自己的決定选脊。
根據(jù)經(jīng)驗,如果程序需要 sudo 權(quán)限脸甘,則應(yīng)避免通過第三方 PPA 進(jìn)行安裝恳啥。
你如何看待使用 PPA?
我知道這篇文章需要挺長時間來閱讀丹诀,但我想讓你更好地了解 PPA钝的。我希望這份詳細(xì)指南能夠回答你關(guān)于使用 PPA 的大部分問題。
如果你對 PPA 有更多疑問铆遭,請隨時在評論區(qū)提問硝桩。
如果你發(fā)現(xiàn)任何技術(shù)或語法錯誤,或者有改進(jìn)的建議枚荣,請告訴我碗脊。