Ubuntu PPA 使用指南
一篇涵蓋了在 Ubuntu 和其他 Linux 發行版中使用 PPA 的幾乎所有問題的深入的文章。
如果你一直在使用 Ubuntu 或基於 Ubuntu 的其他 Linux 發行版,例如 Linux Mint、Linux Lite、Zorin OS 等,你可能會遇到以下三種神奇的命令:
sudo add-apt-repository ppa:dr-akulavich/lighttable
sudo apt-get update
sudo apt-get install lighttable-installer
許多網站推薦使用類似於以上幾行的形式 在 Ubuntu 中安裝應用程序。這就是所謂的使用 PPA 安裝應用程序。
但什麼是 PPA?為什麼要用它?使用 PPA 安全嗎?如何正確使用 PPA?如何刪除 PPA?
我將在這個詳細的指南中回答上述所有問題。即使你已經了解了一些關於 PPA 的事情,我相信這篇文章仍然會讓你了解這方面的更多知識。
請注意我正在使用 Ubuntu 撰寫本文。因此,我幾乎在各個地方都使用了 Ubuntu 這個術語,但文中的說明和步驟也適用於其他基於 Debian/Ubuntu 的發行版。
什麼是 PPA?為什麼要使用 PPA?
PPA 表示 個人軟體包存檔(Personal Package Archive)。
這樣說容易理解嗎?可能不是很容易。
在了解 PPA 之前,你應該了解 Linux 中軟體倉庫的概念。關於軟體倉庫,在這裡我不會詳述。
軟體倉庫和包管理的概念
軟體倉庫是一組文件,其中包含各種軟體及其版本的信息,以及校驗和等其他一些詳細信息。每個版本的 Ubuntu 都有自己的四個官方軟體倉庫:
- Main - Canonical 支持的自由開源軟體。
- Universe - 社區維護的自由開源軟體。
- Restricted - 設備的專有驅動程序。
- Multiverse - 受版權或法律問題限制的軟體。
你可以在 這裡 看到所有版本的 Ubuntu 的軟體倉庫。你可以瀏覽並轉到各個倉庫。例如,可以在 這裡 找到 Ubuntu 16.04 的主存儲庫(Main)。
所以,PPA 基本上是一個包含軟體信息的網址。那你的系統又是如何知道這些倉庫的位置的呢?
這些信息存儲在 /etc/apt
目錄中的 sources.list
文件中。如果查看此文件的內容,你就會看到裡面有軟體倉庫的網址。#
開頭的行將被忽略。
這樣的話,當你運行 sudo apt update
命令時,你的系統將使用 APT 工具 來檢查軟體倉庫並將軟體及其版本信息存儲在緩存中。當你使用 sudo apt install package_name
命令時,它通過該信息從實際存儲軟體的網址獲取該軟體包。
如果軟體倉庫中沒有關於某個包的信息,你將看到如下錯誤:
E: Unable to locate package
此時,建議閱讀我的 apt 命令使用指南 一文,這將幫你更好地理解 apt
、update
等命令。
以上是關於軟體倉庫的內容。但什麼是 PPA?PPA 和軟體倉庫又有什麼關聯呢?
為什麼要用 PPA?
如你所見,Ubuntu 對系統中的軟體進行管理,更重要的是控制你在系統上獲得哪個版本的軟體。但想像一下開發人員發布了軟體的新版本的情況。
Ubuntu 不會立即提供該新版本的軟體。需要一個步驟來檢查此新版本的軟體是否與系統兼容,從而可以確保系統的穩定性。
但這也意味著它需要經過幾周才能在 Ubuntu 上可用,在某些情況下,這可能需要幾個月的時間。不是每個人都想等待那麼長時間才能獲得他們最喜歡的軟體的新版本。
類似地,假設有人開發了一款軟體,並希望 Ubuntu 將該軟體包含在官方軟體倉庫中。在 Ubuntu 做出決定並將其包含在官方存軟體倉庫之前,還需要幾個月的時間。
另一種情況是在 beta 測試階段。即使官方軟體倉庫中提供了穩定版本的軟體,軟體開發人員也可能希望某些終端用戶測試他們即將發布的版本。他們是如何使終端用戶對即將發布的版本進行 beta 測試的呢?
通過 PPA!
如何使用 PPA?PPA 是怎樣工作的?
正如我已經告訴過你的那樣,PPA 代表 個人軟體包存檔(Personal Package Archive)。在這裡注意 「個人」 這個詞,它暗示了這是開發人員獨有的東西,並沒有得到分發的正式許可。
Ubuntu 提供了一個名為 Launchpad 的平台,使軟體開發人員能夠創建自己的軟體倉庫。終端用戶,也就是你,可以將 PPA 倉庫添加到 sources.list
文件中,當你更新系統時,你的系統會知道這個新軟體的可用性,然後你可以使用標準的 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
<- 此命令更新可以在當前系統上安裝的軟體包列表。sudo apt-get install <package_in_PPA>
<- 此命令安裝軟體包。
你會發現使用 sudo apt update
命令非常重要,否則你的系統將無法知道新軟體包何時可用。
現在讓我們更詳細地看一下第一個命令。
sudo add-apt-repository ppa:dr-akulavich/lighttable
你會注意到此命令沒有軟體倉庫的 URL。這是因為該工具被設計成將 URL 信息抽象之後再展示給你。
小小注意一下:如果你添加的是 ppa:dr-akulavich/lighttable
,你會得到 Light Table。但是如果你添加 ppa:dr-akulavich
,你將得到 「上層軟體倉庫」 中的所有倉庫或軟體包。它是按層級劃分的。
基本上,當您使用 add-apt-repository
添加 PPA 時,它將執行與手動運行這些命令相同的操作:
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
以上兩行是將任何軟體倉庫添加到你系統的 sources.list
文件的傳統方法。但 PPA 會自動為你完成這些工作,無需考慮確切的軟體倉庫 URL 和操作系統版本。
此處不那麼重要的一點是,當你使用 PPA 時,它不會更改原始的 sources.list
文件。相反,它在 /etc/apt/sources.d
目錄中創建了兩個文件,一個 .list
文件和一個帶有 .save
後綴的備份文件。
PPA 創建了單獨的 sources.list
文件
帶有後綴 .list
的文件含有添加軟體倉庫的信息的命令。
一個 PPA 的 source.list
文件的內容
這是一種安全措施,可以確保添加的 PPA 不會和原始的 sources.list
文件弄混,它還有助於移除 PPA。
為什麼使用 PPA?為何不用 DEB 包
你可能會問為什麼要使用 PPA,PPA 需要通過命令行使用,而不是每個人都喜歡用命令行。為什麼不直接分發可以圖形方式安裝的 DEB 包呢?
答案在於更新的過程。如果使用 DEB 包安裝軟體,將無法保證在運行 sudo apt update
和 sudo apt upgrade
命令時,已安裝的軟體會被更新為較新的版本。
這是因為 apt
的升級過程依賴於 sources.list
文件。如果文件中沒有相應的軟體條目,則不會通過標準軟體更新程序獲得更新。
那麼這是否意味著使用 DEB 安裝的軟體永遠不會得到更新?不是的。這取決於 DEB 包的創建方式。
一些開發人員會自動在 sources.list
中添加一個條目,這樣軟體就可以像普通軟體一樣更新。谷歌 Chrome 瀏覽器就是這樣一個例子。
某些軟體會在運行時通知你有新版本可用。你必須下載新的 DEB 包並再次運行,來將當前軟體更新為較新版本。Oracle Virtual Box 就是這樣一個例子。
對於其餘的 DEB 軟體包,你必須手動查找更新,這很不方便,尤其是在你的軟體面向 Beta 測試者時,你需要頻繁的添加很多更新。這正是 PPA 要解決的問題。
官方 PPA vs 非官方 PPA
你或許聽過官方 PPA 或非官方 PPA 這個詞,二者有什麼不同呢?
開發人員為他們的軟體創建的 PPA 稱為官方 PPA。很明顯,這是因為它來自項目開發者。
但有時,個人會創建由其他開發人員所創建的項目的 PPA。
為什麼會有人這樣做? 因為許多開發人員只提供軟體的源代碼,而且你也知道 在 Linux 中從源代碼安裝軟體 是一件痛苦的事情,並不是每個人都可以或者會這樣做。
這就是志願者自己從這些源代碼創建 PPA 以便其他用戶可以輕鬆安裝軟體的原因。畢竟,使用這 3 行命令比從源代碼安裝要容易得多。
確保你的 Linux 發行版本可以使用 PPA
當在 Ubuntu 或任何其他基於 Debian 的發行版中使用 PPA 時,你應該記住一些事情。
並非每個 PPA 都適用於你的特定版本。你應該知道正在使用 哪個版本的 Ubuntu。版本的開發代號很重要,因為當你訪問某個 PPA 的頁面時,你可以看到該 PPA 都支持哪些版本的 Ubuntu。
對於其他基於 Ubuntu 的發行版,你可以查看 /etc/os-release
的內容來 找出 Ubuntu 版本 的信息。
檢查 PPA 是否適用於你的 Ubuntu 版本
如何知道 PPA 的網址呢?只需在網上搜索 PPA 的名稱,如 ppa:dr-akulavich/lighttable
,第一個搜索結果來自 Launchpad,這是託管 PPA 的官方平台。你也可以轉到 Launchpad 並直接在那裡搜索所需的 PPA。
如果不驗證是否適用當前的版本就添加 PPA,當嘗試安裝不適用於你的系統版本的軟體時,可能會看到類似下面的錯誤。
E: Unable to locate package
更糟糕的是,因為它已經添加到你的 source.list
中,每次運行軟體更新程序時,你都會看到 「無法下載軟體倉庫信息」 的錯誤。
Failed to download repository information Ubuntu 13.04
如果你在終端中運行 sudo apt update
,錯誤提示將包含導致此問題的倉庫的更多詳細信息。你可以在 sudo apt update
的輸出內容結尾看到類似的內容:
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.
上面的錯誤提示說的很明白,是因為系統找不到當前版本對應的倉庫。還記得我們之前看到的倉庫結構嗎?APT 將嘗試在 http://ppa.launchpad.net/<PPA_NAME>/ubuntu/dists/<Ubuntu_Version>
中尋找軟體信息。
如果特定版本的 PPA 不可用,它將永遠無法打開 URL,你會看到著名的 404 錯誤。
為什麼 PPA 不適用於所有 Ubuntu 發行版?
這是因為 PPA 的作者必須編譯軟體並在特定版本上創建 PPA。考慮到每六個月發布一個新的 Ubuntu 版本,為每個版本的 Ubuntu 更新 PPA 是一項繁瑣的任務,並非所有開發人員都有時間這樣做。
如果 PPA 不適用於你的系統版本,該如何安裝應用程序?
儘管 PPA 不適用於你的 Ubuntu 版本,你仍然可以下載 DEB 文件並安裝應用程序。
比如說,你訪問 Light Table 的 PPA 頁面,使用剛剛學到的有關 PPA 的知識,你會發現 PPA 不適用於你的特定 Ubuntu 版本。
你可以點擊 「查看軟體包詳細信息」。
Get DEB file from PPA
在這裡,你可以單擊軟體包以顯示更多詳細信息,還可以在此處找到包的源代碼和 DEB 文件。
Download DEB file from PPA
我建議 使用 Gdebi 安裝這些 DEB 文件 而不是通過軟體中心,因為 Gdebi 在處理依賴項方面要好得多。
請注意,以這種方式安裝的軟體包可能無法獲得任何將來的更新。
我認為你已經閱讀了足夠多的關於添加 PPA 的內容,那麼如何刪除 PPA 及其安裝的軟體呢?
如何刪除 PPA?
我過去曾寫過 刪除 PPA 的教程,這裡寫的也是同樣的方法。
我建議在刪除 PPA 之前刪除從 PPA 安裝的軟體。如果只是刪除 PPA,則已安裝的軟體仍保留在系統中,但不會獲得任何更新。這不是你想要的,不是嗎?
那麼,問題來了,如何知道是哪個 PPA 安裝了哪個應用程序?
查找 PPA 安裝的軟體包並將其移除
Ubuntu 軟體中心無法移除 PPA 安裝的軟體包,你必須使用具有更多高級功能的 Synaptic 包管理器。
可以從軟體中心安裝 Synaptic 或使用以下命令進行安裝:
sudo apt install synaptic
安裝後,啟動 Synaptic 包管理器並選擇 「Origin」。你會看到添加到系統的各種軟體倉庫。PPA 條目將以前綴 PPA 進行標識,單擊以查看 PPA 可用的包。已安裝的軟體前面會有恰當的符號進行標識。
查找通過 PPA 安裝的軟體包
找到包後,你可以從 Synaptic 刪除它們。此外,也始終可以選擇使用命令行進行移除:
sudo apt remove package_name
刪除 PPA 安裝的軟體包後,你可以繼續從 sources.list
中刪除PPA。
以圖形界面的方式刪除 PPA
在設置中打開 「軟體和更新」,然後點擊 「其他軟體」 選項卡。查找要刪除的 PPA:
Delete a PPA from Software Source
此處你可以進項兩項操作,可以取消選擇 PPA 或選擇 「刪除」 選項。
區別在於,當你取消選擇 PPA 條目時,系統將在 /etc/apt/sources.list.d
中的ppa_name.list
文件中注釋掉倉庫條目;但如果選擇 「刪除」 選項,將會刪除 /etc/apt/sources.list.d
目錄中 ppa_name.list
文件里的倉庫條目。
在這兩種情況下,文件 ppa_name.list
都保留在所在的目錄中,即使它是空的。
使用 PPA 安全嗎?
這是一個主觀問題。純粹主義者厭惡 PPA,因為大多數時候 PPA 來自第三方開發者。但與此同時,PPA 在 Debian/Ubuntu 世界中很受歡迎,因為它們提供了更簡單的安裝選項。
就安全性而言,很少見到因為使用 PPA 之後你的 Linux 系統被黑客攻擊或注入惡意軟體。到目前為止,我不記得發生過這樣的事件。
官方 PPA 可以不加考慮的使用,使用非官方 PPA 完全是你自己的決定。
根據經驗,如果程序需要 sudo 許可權,則應避免通過第三方 PPA 進行安裝。
你如何看待使用 PPA?
我知道這篇文章需要挺長時間來閱讀,但我想讓你更好地了解 PPA。我希望這份詳細指南能夠回答你關於使用 PPA 的大部分問題。
如果你對 PPA 有更多疑問,請隨時在評論區提問。
如果你發現任何技術或語法錯誤,或者有改進的建議,請告訴我。
via: https://itsfoss.com/ppa-guide/
作者:Abhishek Prakash 選題:lujun9972 譯者:jlztan 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
推薦閱讀: