译:在 Ubuntu Linux 中使用 PPA(完全指南)

作者:
Abhishek Prakash

自由和开放源码软件的创造者。一个热心的 Linux 用户和开源推动者。从阿加莎·克里斯蒂和夏洛克·福尔摩斯到哥伦布和埃勒里·奎恩侦探,都是经典侦探小说的超级粉丝。他也是一个电影迷,喜欢黑色电影。


简述:这是一篇涵盖了在 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 的发行版。

what-is-ppa

什么是 PPA?

PPA 代表个人软件包存档(Personal Package Archive)。PPA 允许应用程序开发人员和 Linux 用户创建自己的软件仓库来分发软件。通过 PPA,你可以轻松地获得更加新的软件版本或获得官方 Ubuntu 仓库以外的软件。

这样讲得通吗?也许并不能。

在理解 PPA 之前,你应该了解 Linux 软件库的概念。不过,我不会在这里详细介绍。

软件仓库和包管理的概念

软件仓库就是文件的集合,包含各种软件的信息、版本和一些其他详细信息,如 checksum 值。每个 Ubuntu 版本都有自己的四个官方仓库:

  • Main —— 标准支持的免费和开源的软件
  • Universe —— 社区维护的免费和开源的软件
  • Restricted —— 对各个设备的专有驱动
  • Multiverse —— 受限于版本和法律条目的软件

你可以从这里看到所有 Ubuntu 版本的软件仓库。你可以浏览他们,也可以单独访问某个仓库。例如,可以在这里找到 Ubuntu 20.04 主仓库。

所以基本上它是一个包含软件信息的网络 URL 地址。你的系统又是如何知道这些软件仓库在哪里的呢?

这些信息存储在 /etc/apt 目录下的 sources.list 文件。如果你查看它的内容,你将看到它有软件仓库的 URL。忽略开关带有 # 的行。

sources-list

现在,当你运行命令 sudo apt update 时,你的系统使用 APT 工具检查软件仓库,并将有关软件及其版本的信息存储在缓存中。当你使用命令 sudo apt install package_name 时,它使用该信息从存储实际软件的 URL 获取该软件包。

如果软件仓库没有关于某个包的信息,你将看到无法定位包的错误:

E: Unable to locate package

这时,我建议阅读我的《Using apt Commands in Linux》,这将能令你更好地理解 apt 命令,更新等。

所以这就是关于软件仓库的介绍。但什么是 PPA?它又是如何进入画面的?

为什么使用 PPA?

正如你所见,Ubuntu 控制着软件及更重要的是控制着你在系统上安装的软件版本。但是想象一下,如果软件开发人员发布了新版本的软件。

Ubuntu 并不会立即让其变得可用,有一个检查新版本软件是否与系统相兼容的流程,通过这样的流程来确保系统的稳定性。

但这也意味着,Ubuntu 将需要几周甚至几个月的时间才能发布,不是每个人都想等那么久才能拿到他们最喜欢的软件的新版本。

类似地,假设有人开发了一个软件,并希望 Ubuntu 将该软件包含在官方软件仓库中,在 Ubuntu 做出决定并将其纳入官方软件仓库前,还需要几个月的时间。

另一种情况是在 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 是很重要的,否则你的系统将不知道新包何时可用。Ubuntu 18.04 及以上的版本会自动运行更新命令以刷新软件包列表,但我不能保证其他发行版,所以运行此命令是一个很好的做法。

现在让我们更详细地看一下第一个命令。

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.list.d 目录创建了两个文件,一个 .list 列表文件和一个以 .save 为后缀的备份文件。

ppa-sources-list-files

后缀为 .list 的文件具有添加软件仓库信息的命令。

content-of-ppa-list

这是一项安全措施,以确保添加 PPA 不会干扰原始的 sources.list 文件,同时它也有助于移除 PPA。

为什么是 PPA?为什么不是 DEB 包?

你可能会问当涉及使用命令行时为什么要使用 PPA,这可能不是每个人都喜欢的。为什么不发行一个可以图形化安装的 DEB 包呢?

答案在于更新过程。如果你使用 DEB 软件包安装软件,则无法保证在运行 sudo apt update && sudo apt upgrade 时安装的软件将升级为更加新的版本。

这是因为 apt 升级过程依赖于 sources.list,如果没有软件条目,则不会通过标准软件更新程序获得更新。

那么这是否意味着使用 DEB 安装的软件永远不会更新?当然这不是真的,这取决于软件包是如何被创建的。

一些开发人员会自动将条目添加到 sources.list,然后像常规软件一样进行更新,Google Chrome 就是这样一个例子。

当您尝试运行时,某些软件会通知你有新版本可用。您必须下载新的 DEB 包并再次运行它,以将当前软件更新为新版本。Oracle Virtual Box 就是一个例子。

对于其余的 DEB 包,你必须手动查找更新但这并不方便,尤其是如果你的软件是针对 beta 测试人员的,你需要经常添加更多更新,这就是 PPA 拯救你的地方。

官方 PPA 与非官方 PPA

你可能也听过官方 PPA 或非官方 PPA 的说法,它们有什么区别呢?

当开发人员为其软件创建 PPA 时,称为官方 PPA,很明显,因为它来自于项目开发人员。

但有时,一些个人也会为其它开发人员的项目创建 PPA。

为什么会有人这么做?因为许多开发人员只提供软件的源代码,并且你知道在 Linux 中从源码安装软件是一件痛苦的事情,并且不是每个人都可以或愿意这样做。

这就是为什么志愿者他们根据源代码创建 PPA,以便其他用户可以轻松安装软件。毕竟,使用这 3 行代码要比在源代码安装中进行斗争容易得多。

确保 PPA 可用于你的发行版

当在 Ubuntu 或任何其他基于 Debian 的发行版中使用 PPA 时,有几件事你应该记住。

并非每个 PPA 都适用于你的特定版本,你应该知道你现在使用的是哪个 Ubuntu 版本。版本的代号很重要,因为当你进入某个 PPA 的网页时,你可以看到该 PPA 支持哪些 Ubuntu 版本。

对于其他基于 Ubuntu 的发行版,你可以查看 /etc/os-release 的内容以了解 Ubuntu 版本信息。

verify-ppa

如何知道 PPA 的 url 呢?只需在互联网上搜索 PPA 名称如 ppa:dr-akulavich/lighttable 你就可以从 Launchpad 网站获得第一个结果,该网站是托管 PPA 的官方平台。你也可以直接从 Launchpad 搜索所需的 PPA。

如果你没有验证就添加 PPA,当你尝试安装不适用于你的系统版本的软件时,您可能会看到类似这样的错误。

E: Unable to locate package

更糟糕的是,因为它已添加到你的 sources.list,当你每次运行软件更新程序时,你都会看到错误“Failed to download repository information”.

failed-to-download

如果你在终端运行 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,考虑到新的 Ubuntu 版本每六个月发布一次,为每个 Ubuntu 版本更新 PPA 是一项令人厌烦的任务,并非所有开发人员都有时间这样做。

如果 PPA 不适用于你的版本该如何安装应用程序?

虽然 PPA 不适用于你的 Ubuntu 版本,但你仍然可以下载 DEB 文件并安装应用程序。

假设你去访问 Light Table PPA,使用你刚刚学到的关于 PPA 的知识,你意识到 PPA 不适用于你的特定 Ubuntu 版本。

你可以单击 “View package details

deb-from-ppa

在这里,你可以点击一个包来显示更多细节,你还可以在这里找到包的源代码和 DEB 文件。

deb-from-ppa-2

我建议使用 Gdebi 来安装这些 DEB 文件,而不是 Software Center,因为 Gdebi 在处理依赖关系方面做得更好。

请注意,以这种方式安装的软件包将来可能不会得到任何更新。

我想你已经阅读了足够多关于添加 PPA 的内容,那如何删除 PPA 及其安装的软件呢?

如何删除 PPA?

我曾经写过关于删除 PPA 的文章,我也将在这里描述相同的方法。

我建议在删除 PPA 之前删除你从 PPA 中安装的软件,如果你只是删除 PPA,安装的软件将保留在系统中,但不会得到任何更新,你不会想要这样的结果吧?

因此,问题来了,如何知道哪个应用程序是由哪个 PPA 安装的呢?

查找 PPA 安装的软件包并将其删除

Ubuntu Software Center 在这里没有帮助,你必须在这里使用 Synaptic 软件包管理器,它具有更高级的功能。

你可以从 Software Center 或使用以下命令在 Ubuntu 中安装 Synaptic:

sudo apt install -y synaptic

安装后,启动 Synaptic 软件包管理器并选择 Origin,你将看到添加到系统中的各种软件仓库。PPA 条目将标有前缀 PPA,单击它们以查看 PPA 提供的包,已安装的软件前面将有适当的符号。

ppa-synaptic-manager

找到包后,可以从 Synaptic 删除它们,或者你始终可以选择使用命令行:

sudo apt remove package_name

删除 PPA 安装的软件包后,你可以继续从 sources.list 中删除 PPA。

以图形方式删除 PPA

打开 “Software & Updates” 然后转到 “Other Software” 选项卡,查找要删除的 PPA。

Delete a PPA

这里有两种选择,你可以取消选择 PPA 或选择 “Remove” 选项。

不同之处在于当你取消选择 PPA 条目时,系统将在 /etc/apt/sources.list.d 下的 ppa_name.list 文件中注释掉软件仓库条目,但如果选择 “Remove” 选项,它将从 /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 有更多问题,请随时在评论部分提问。

如果您注意到任何技术或语法错误,或者您有改进本文的建议,也请告诉我。

原文

[1] Using PPA in Ubuntu Linux


欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐