Ubuntu PPA 使用指南

Ubuntu PPA 使用指南

轉自:https://zhuanlan.zhihu.com/p/55250294

在這里插入圖片描述

一篇涵蓋了在 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 命令使用指南 一文,這將幫你更好地理解 aptupdate 等命令。

以上是關于軟件倉庫的內容。但什么是 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 updatesudo 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中國 榮譽推出

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532514.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532514.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532514.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務 轉自&#xff1a;https://linux.cn/article-10205-1.html 如今&#xff0c;我有很多方法來通過 Web 瀏覽器為局域網中的其他系統提供單個文件或整個目錄的訪問。我在我的 Ubuntu 測試機上測試了這些方法&#xff0c;它們如下面…

Linux apt命令

Linux apt命令及其與apt-get的關系 轉自&#xff1a;https://blog.csdn.net/taotongning/article/details/82320472、https://www.runoob.com/linux/linux-comm-apt.html apt&#xff08;Advanced Packaging Tool&#xff09;是一個在 Debian 和 Ubuntu 中的 Shell 前端軟件包管…

楊宏宇:騰訊多模態內容理解技術及應用

楊宏宇&#xff1a;騰訊多模態內容理解技術及應用 分享嘉賓&#xff1a;楊宇鴻 騰訊 內容理解高級工程師 編輯整理&#xff1a;吳祺堯 出品平臺&#xff1a;DataFunTalk 導讀&#xff1a; 搜索內容的理解貫穿了整個搜索系統。我們需要從多個粒度理解搜索內容&#xff0c;包括語…

git登錄相關操作梳理

git登錄相關操作梳理 本文主要基于 Linux/Mac &#xff0c;Windows下未經測試&#xff0c;不過估計差不多&#xff0c;在 git bash 內操作即可。 創建ssh key并關聯github等賬號 因為本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密傳輸的&#xff0c;GitHub需要識別是否是…

關于mmdetection上手的幾點說明

關于mmdetection上手的幾點說明 官方的文檔很有參考價值&#xff0c;并且也有中文版&#xff0c;應當是大家上手 mmdetection 的第一參考&#xff0c;本文是記錄一些筆者在小白階段上手 mmdetection 時的一些心得&#xff0c;這些東西沒有人提&#xff0c;可能是大佬們覺得這些…

docker gpu報錯Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

Docker容器中使用Nvidia GPU報錯 docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]]. 問題出現 我們知道&#xff0c;想要在 docker19 及之后的版本中使用 nvidia gpu 已經不需要單獨安裝 nvidia-docker 了&#xff0c;這…

CUDA環境詳解

CUDA環境詳解 本文主要介紹 CUDA 環境&#xff0c;這一堆東西網上有很多博客介紹過了&#xff0c;我再來一篇:)&#xff0c;參考前輩們的文章&#xff0c;看能不能寫的更清楚一點。讀后仍有問題&#xff0c;歡迎留言交流。 CUDA APIs CUDA是由NVIDIA推出的通用并行計算架構&…

共享內存簡介及docker容器的shm設置與修改

共享內存簡介及docker容器的shm設置與修改 共享內存簡介 共享內存指 (shared memory)在多處理器的計算機系統中&#xff0c;可以被不同中央處理器&#xff08;CPU&#xff09;訪問的大容量內存。由于多個CPU需要快速訪問存儲器&#xff0c;這樣就要對存儲器進行緩存&#xff…

對Docker鏡像layer的理解

對Docker鏡像layer的理解 轉自&#xff1a;https://blog.csdn.net/u011069294/article/details/105583522 FROM python:3.6.1-alpine RUN pip install flask CMD [“python”,“app.py”] COPY app.py /app.py上面是一個Dockerfile的例子&#xff0c;每一行都會生成一個新的l…

ssh免密登錄配置方法及配置

ssh免密登錄配置方法及配置 直接上步驟&#xff0c;記我們本機為機器A&#xff0c;而機器B、機器C等是我們的服務器&#xff0c;我們要配置的是A到B、C等的 ssh 免密登錄。 1 在機器A上生成秘鑰對 ssh-keygen會得到輸出&#xff1a; Generating public/private rsa key pai…

機器學習系統:設計與實現 計算圖

機器學習系統:設計與實現 計算圖 轉自&#xff1a;https://openmlsys.github.io/chapter_computational_graph/index.html 在上一章節中&#xff0c;我們展示了用戶利用機器學習框架所編寫的程序。這些用戶程序包含了對于訓練數據&#xff0c;模型和訓練過程的定義。然而為了…

常見浮點數格式梳理

常見浮點數格式梳理 IEEE 754 標準 浮點數轉換網站&#xff1a;https://www.h-schmidt.net/FloatConverter/IEEE754.html IEEE二進制浮點數算術標準&#xff0c;為許多CPU與浮點運算器所采用。這個標準定義了表示浮點數的格式&#xff08;包括負零-0&#xff09;與反常值&am…

Python拾遺1:collections、itertools和內存io

Python拾遺1&#xff1a;collections、itertools和內存io 轉自&#xff1a;https://www.liaoxuefeng.com/wiki/1016959663602400 本系列旨在補充python中一些很好用但是并非常規課程主線中的知識。 collections collections是Python內建的一個集合模塊&#xff0c;提供了許…

混合精度訓練

混合精度訓練 轉自&#xff1a;https://zhuanlan.zhihu.com/p/441591808 通常我們訓練神經網絡模型的時候默認使用的數據類型為單精度FP32。近年來&#xff0c;為了加快訓練時間、減少網絡訓練時候所占用的內存&#xff0c;并且保存訓練出來的模型精度持平的條件下&#xff0…

拓撲排序C++

拓撲排序C 幾個基本概念的介紹 入度和出度 圖中的度&#xff1a;所謂頂點的度(degree)&#xff0c;就是指和該頂點相關聯的邊數。在有向圖中&#xff0c;度又分為入度和出度。 入度 (in-degree) &#xff1a;以某頂點為弧頭&#xff0c;終止于該頂點的邊的數目稱為該頂點的…

C++面試常考題——編譯內存相關

C面試常考題——編譯內存相關 轉自&#xff1a;https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/e4ns5g/ C程序編譯過程 編譯過程分為四個過程&#xff1a;編譯&#xff08;編譯預處理、編譯、優化&#xff09;&#xff0c;匯編&#xff0c;鏈接。 編譯預處…

C++遍歷刪除元素

C遍歷刪除元素 轉自&#xff1a;http://zencoder.info/2019/10/11/erase-element-from-container/ 今天看到一個patch fix從std::map中遍歷刪除元素導致crash問題&#xff0c;突然意識到自己對如何正確地從map等C容器中刪除元素也沒有很牢固清醒的認知。重新梳理了下這塊的正…

關鍵字庫函數

關鍵字庫函數 轉自&#xff1a;https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/ej3mx1/ sizeof和strlen的區別 strlen 是頭文件<cstring> 中的函數&#xff0c;sizeof 是 C 中的運算符。 strlen 測量的是字符串的實際長度&#xff08;其源代碼如下&…

memcpy和memmove的區別以及內存重疊問題

memcpy和memmove的區別以及內存重疊問題 轉自&#xff1a;https://www.codecomeon.com/posts/89/ 區別 memcpy() 和 memmove() 都是C語言中的庫函數&#xff0c;在頭文件 string.h 中&#xff0c;作用是拷貝一定長度的內存的內容&#xff0c;原型分別如下&#xff1a; void…

從頭搭建一個深度學習框架

從頭搭建一個深度學習框架 轉自&#xff1a;Build a Deep Learning Framework From Scratch 代碼&#xff1a;https://github.com/borgwang/tinynn 當前深度學習框架越來越成熟&#xff0c;對于使用者而言封裝程度越來越高&#xff0c;好處就是現在可以非常快速地將這些框架作為…