一篇涵蓋了在 Ubuntu 和其他 Linux 發行版中使用 PPA 的幾乎所有問題的深入的文章。
如果你一直在使用 Ubuntu 或基於 Ubuntu 的其他 Linux 發行版,例如 Linux Mint、Linux Lite、Zorin OS 等,你可能會遇到以下三種神奇的命令:
sudo add-apt-repository ppa:dr-akulavich/lighttablesudo apt-get updatesudo apt-get install lighttable-installer
許多網站推薦使用類似於以上幾行的形式 在 Ubuntu 中安裝應用程式。這就是所謂的使用 PPA 安裝應用程式。
但什麼是 PPA?為什麼要用它?使用 PPA 安全嗎?如何正確使用 PPA?如何刪除 PPA?
我將在這個詳細的指南中回答上述所有問題。即使你已經了解了一些關於 PPA 的事情,我相信這篇文章仍然會讓你了解這方面的更多知識。
請注意我正在使用 Ubuntu 撰寫本文。因此,我幾乎在各個地方都使用了 Ubuntu 這個術語,但文中的說明和步驟也適用於其他基於 Debian/Ubuntu 的發行版。
PPA 表示個人軟體包存檔。
這樣說容易理解嗎?可能不是很容易。
在了解 PPA 之前,你應該了解 Linux 中軟體倉庫的概念。關於軟體倉庫,在這裡我不會詳述。
軟體倉庫是一組檔案,其中包含各種軟體及其版本的資訊,以及校驗和等其他一些詳細資訊。每個版本的 Ubuntu 都有自己的四個官方軟體倉庫:
你可以在 這裡 看到所有版本的 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 和軟體倉庫又有什麼關聯呢?
如你所見,Ubuntu 對系統中的軟體進行管理,更重要的是控制你在系統上獲得哪個版本的軟體。但想象一下開發人員發布了軟體的新版本的情況。
Ubuntu 不會立即提供該新版本的軟體。需要一個步驟來檢查此新版本的軟體是否與系統相容,從而可以確保系統的穩定性。
但這也意味著它需要經過幾週才能在 Ubuntu 上可用,在某些情況下,這可能需要幾個月的時間。不是每個人都想等待那麼長時間才能獲得他們最喜歡的軟體的新版本。
類似地,假設有人開發了一款軟體,並希望 Ubuntu 將該軟體包含在官方軟體倉庫中。在 Ubuntu 做出決定並將其包含在官方存軟體倉庫之前,還需要幾個月的時間。
另一種情況是在 beta 測試階段。即使官方軟體倉庫中提供了穩定版本的軟體,軟體開發人員也可能希望某些終端使用者測試他們即將發布的版本。他們是如何使終端使用者對即將發布的版本進行 beta 測試的呢?
通過 PPA!
正如我已經告訴過你的那樣,PPA 代表個人軟體包存檔。在這裡注意 “個人” 這個詞,它暗示了這是開發人員獨有的東西,並沒有得到分發的正式許可。
Ubuntu 提供了一個名為 Launchpad 的平台,使軟體開發人員能夠建立自己的軟體倉庫。終端使用者,也就是你,可以將 PPA 倉庫新增到 sources.list
檔案中,當你更新系統時,你的系統會知道這個新軟體的可用性,然後你可以使用標準的 sudo apt install
命令安裝它。
sudo add-apt-repository ppa:dr-akulavich/lighttablesudo apt-get updatesudo 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 maindeb-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,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 或非官方 PPA 這個詞,二者有什麼不同呢?
開發人員為他們的軟體建立的 PPA 稱為官方 PPA。很明顯,這是因為它來自專案開發者。
但有時,個人會建立由其他開發人員所建立的專案的 PPA。
為什麼會有人這樣做? 因為許多開發人員只提供軟體的原始碼,而且你也知道 是一件痛苦的事情,並不是每個人都可以或者會這樣做。
這就是志願者自己從這些原始碼建立 PPA 以便其他使用者可以輕鬆安裝軟體的原因。畢竟,使用這 3 行命令比從原始碼安裝要容易得多。
當在 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
中,每次執行軟體更新程式時,你都會看到 “無法下載軟體倉庫資訊” 的錯誤。
如果你在終端中執行 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 FoundE: 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 的作者必須編譯軟體並在特定版本上建立 PPA。考慮到每六個月發布一個新的 Ubuntu 版本,為每個版本的 Ubuntu 更新 PPA 是一項繁瑣的任務,並非所有開發人員都有時間這樣做。
儘管 PPA 不適用於你的 Ubuntu 版本,你仍然可以下載 DEB 檔案並安裝應用程式。
比如說,你存取 Light Table 的 PPA 頁面,使用剛剛學到的有關 PPA 的知識,你會發現 PPA 不適用於你的特定 Ubuntu 版本。
你可以點選 “檢視軟體包詳細資訊”。
在這裡,你可以單擊軟體包以顯示更多詳細資訊,還可以在此處找到包的原始碼和 DEB 檔案。
我建議 使用 Gdebi 安裝這些 DEB 檔案 而不是通過軟體中心,因為 Gdebi 在處理依賴項方面要好得多。
請注意,以這種方式安裝的軟體包可能無法獲得任何將來的更新。
我認為你已經閱讀了足夠多的關於新增 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 或選擇 “刪除” 選項。
區別在於,當你取消選擇 PPA 條目時,系統將在 /etc/apt/sources.list.d
中的ppa_name.list
檔案中註釋掉倉庫條目;但如果選擇 “刪除” 選項,將會刪除 /etc/apt/sources.list.d
目錄中 ppa_name.list
檔案裡的倉庫條目。
在這兩種情況下,檔案 ppa_name.list
都保留在所在的目錄中,即使它是空的。
這是一個主觀問題。純粹主義者厭惡 PPA,因為大多數時候 PPA 來自第三方開發者。但與此同時,PPA 在 Debian/Ubuntu 世界中很受歡迎,因為它們提供了更簡單的安裝選項。
就安全性而言,很少見到因為使用 PPA 之後你的 Linux 系統被駭客攻擊或注入惡意軟體。到目前為止,我不記得發生過這樣的事件。
官方 PPA 可以不加考慮的使用,使用非官方 PPA 完全是你自己的決定。
根據經驗,如果程式需要 sudo 許可權,則應避免通過第三方 PPA 進行安裝。
我知道這篇文章需要挺長時間來閱讀,但我想讓你更好地了解 PPA。我希望這份詳細指南能夠回答你關於使用 PPA 的大部分問題。
如果你對 PPA 有更多疑問,請隨時在評論區提問。
如果你發現任何技術或語法錯誤,或者有改進的建議,請告訴我。