如果您一直在使用 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
PPA 代表个人包存档。 PPA 允许应用程序开发人员和 Linux 用户创建自己的存储库来分发软件。 使用 PPA,您可以轻松获取较新的软件版本或官方 Ubuntu 存储库无法提供的软件。
在了解 PPA 之前,您应该了解 Linux 中存储库的概念。 不过,我不会在这里详细介绍。
存储库(repositories)和包管理(package management)的概念
存储库是文件的集合,其中包含有关各种软件、其版本以及校验和等其他一些详细信息的信息。 每个 Ubuntu 版本都有自己的官方一组四个存储库:
- Main – Canonical 官方支持的免费开源软件。
- Universe – 社区维护的免费开源软件。
- Restricted – 设备的专有驱动程序。
- Multiverse – 受版权或法律问题限制的软件。
您可以在此处查看所有 Ubuntu 版本的此类存储库。 您可以浏览它们,也可以访问各个存储库。 例如,可以在此处找到 Ubuntu 16.04 主存储库。
所以基本上它是一个包含软件信息的网址。 您的系统如何知道这些存储库在哪里?
此信息存储在 /etc/apt 目录中的sources.list 文件中。 如果您查看其内容,您会发现它具有存储库的 URL。 以 # 开头的行将被忽略。
/etc/apt/sources.list 文件中列出的存储库
现在,当您运行命令 sudo apt update 时,您的系统将使用 APT 工具来检查存储库,并将有关软件及其版本的信息存储在缓存中。 当您使用命令 sudo apt install package_name 时,它会使用该信息从存储实际软件的 URL 获取该包。
如果存储库没有有关某个包的信息,您将看到无法找到包错误:
E: Unable to locate package
此时,我建议阅读我的 apt 命令使用指南。 这将使您更好地理解 apt 命令、更新等。
为什么使用PPA?
正如您所看到的,Ubuntu 控制着您在系统上安装的软件,更重要的是控制着软件的版本。 但想象一下,如果软件开发人员发布了该软件的新版本。
Ubuntu 不会立即提供它。 有一个程序可以检查新版本的软件是否与系统兼容。 这样保证了系统的稳定性。
但这也意味着 Ubuntu 需要几周甚至几个月的时间才能提供它。 并不是每个人都愿意等待那么久才能获得他们最喜欢的软件的新版本。
同样,假设有人开发了一个软件并希望 Ubuntu 将该软件包含在官方存储库中。 Ubuntu 仍然需要几个月的时间才能做出决定并将其纳入官方存储库。
另一种情况是在 Beta 测试期间。 即使官方存储库中有该软件的稳定版本,软件开发人员也可能希望一些最终用户测试他们即将发布的版本。 他们如何使最终用户能够对即将发布的版本进行 Beta 测试?
如何使用PPA? PPA如何运作?
正如我已经告诉过你的,PPA 的意思是“个人包存档”。 请注意这里的“个人”一词。 这暗示这是开发人员专有的东西,并且没有得到发行版的正式认可。
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 目录中创建两个文件,一个列表和一个后缀为“save”的备份文件。
后缀为“list”的文件具有添加有关存储库信息的命令。
这是一项安全措施,可确保添加 PPA 不会扰乱原始的sources.list。 它还有助于去除 PPA。
为什么选择PPA? 为什么不使用 DEB 包?
您可能会问为什么要使用 PPA,因为它涉及使用命令行,而这可能不是每个人都喜欢的。 为什么不直接分发一个可以图形化安装的 DEB 包呢?
答案在于更新过程。 如果您使用 DEB 软件包安装软件,则不能保证当您运行 sudo apt update && sudo apt Upgrade 时已安装的软件会更新到较新的版本。
这是因为apt升级过程依赖于sources.list。 如果没有软件条目,则无法通过标准软件更新程序获取更新。
那么这是否意味着使用 DEB 安装的软件永远不会更新? 不,不是真的。 这取决于包的创建方式。
一些开发人员会自动向sources.list添加一个条目,然后像常规软件一样更新它。 谷歌浏览器就是这样的一个例子。
当您尝试运行某些软件时,它会通知您有新版本可用。 您必须下载新的 DEB 包并再次运行它才能将当前软件更新到更新版本。 Oracle Virtual Box 就是这种情况下的一个示例。
对于其余的 DEB 软件包,您必须手动查找更新,这并不方便,特别是如果您的软件是供 Beta 测试人员使用的。 您需要经常添加更多更新。 这就是 PPA 发挥作用的地方。
官方 PPA 与非官方 PPA
您可能还会听到官方 PPA 或非官方 PPA 一词。 有什么不同?
当开发人员为其软件创建 PPA 时,它被称为官方 PPA。 很明显,因为它来自项目开发人员。
但有时,个人会为其他开发人员创建的项目创建 PPA。
为什么有人要这么做? 因为许多开发人员只是提供软件的源代码,并且您知道在 Linux 中从源代码安装软件是一件痛苦的事情,并不是每个人都可以或愿意这样做。
这就是为什么志愿者主动从这些源代码创建 PPA,以便其他用户可以轻松安装该软件。 毕竟,使用这 3 行代码比与源代码安装进行斗争要容易得多。
您如何知道PPA是否是官方的? 嗯,没有直接的方法。 有时,开发商的网站会提到他们维护 PPA。 有时 PPA 页面会提到它是官方 PPA。
确保 PPA 适用于您的Ubuntu分发版本
当谈到在 Ubuntu 或任何其他基于 Debian 的发行版中使用 PPA 时,您应该记住一些事情。
并非每个 PPA 都适用于您的特定版本。 您应该知道您正在使用哪个 Ubuntu 版本。 发行版的代号很重要,因为当您访问某个 PPA 的网页时,您可以看到该 PPA 支持哪些 Ubuntu 版本。
lsb_release -a
对于其他基于Ubuntu的发行版,您可以检查/etc/os-release的内容来了解Ubuntu的版本信息。
如何知道 PPA 网址? 只需在互联网上搜索 PPA 名称(如 ppa:dr-akulavich/lighttable),您应该会从 Launchpad 网站(托管 PPA 的官方平台)获得第一个结果。 您还可以前往 Launchpad 并直接在那里搜索所需的 PPA。
如果您不验证并添加 PPA,当您尝试安装不适合您的版本的软件时,您可能会看到类似的错误。
E: Unable to locate package
更糟糕的是,由于它已添加到您的 source.list 中,每次运行软件更新程序时,您都会看到错误“无法下载存储库信息”( “Failed to download repository information“)。
如果您在终端中运行 sudo apt update,错误将包含有关哪个存储库导致问题的更多详细信息。 您可以在 sudo apt update 的输出末尾看到类似这样的内容:
W:无法获取http://ppa.launchpad.net/venerix/pkg/ubuntu/dists/raring/main/binary-i386/Packages 404未找到
E: 部分索引文件下载失败。 它们已被忽略,或使用旧的。
这是因为系统找不到您的版本的存储库。 还记得我们之前看到的有关存储库结构的内容吗? 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 版本。
您可以点击“查看包裹详细信息”。
在这里,您可以单击某个包以显示更多详细信息。 您还可以在此处找到该包的源代码和 DEB 文件。
ufans.top建议使用 Gdebi 而不是软件中心来安装这些 DEB 文件,因为 Gdebi 在处理依赖关系方面要好得多。
请注意,以这种方式安装的软件包可能不会获得任何未来的更新。
如何删除 PPA?
方法1. 通过 GUI 从软件源中删除 PPA
如果您更喜欢使用 GUI 而不是命令行,则此方法适合。 在“软件和更新”工具中,转到“其他软件”选项卡,然后从列表中选择所需的 PPA。 然后单击“删除”以删除 PPA:
方法2. 在终端中使用 APT 删除 PPA
您很可能是使用 add-apt-repository 命令添加了 PPA。 您也可以使用相同的命令删除 PPA。 只需在命令中提供 --remove 选项即可。
当然,您需要知道此处的确切 PPA 名称。 您可以按以下方式使用该命令。
sudo add-apt-repository --remove ppa:PPA_Name/ppa
在上述命令中,将 PPA_Name 替换为正确的 PPA 名称。
方法3. 从终端的源列表中删除 PPA
使用以下命令查看系统中添加的所有 PPA:
ls /etc/apt/sources.list.d
在这里查找您想要的 PPA,然后使用以下命令删除与 PPA 关联的 .list 文件:
sudo rm -i /etc/apt/sources.list.d/PPA_Name.list
rm 命令的 -i 选项在删除文件之前询问。 将此视为安全检查。
方法4. 在终端中使用 ppa-purge 删除 PPA
您可能已经注意到,在上述三种方法中,我们只讨论了删除或移除 PPA。 使用这些 PPA 安装的应用程序怎么样? 它们会因为取消 PPA 而被删除吗? 答案是不。
这就是 PPA Purge 发挥作用的时候。 它不仅会禁用 PPA,还会卸载 PPA 安装的所有程序或将它们恢复为您的发行版提供的原始版本。
使用以下命令安装 ppa-purge:
sudo apt-get install ppa-purge
现在按以下方式使用它来清除 PPA:
sudo ppa-purge ppa-url
PPA 的 URL 可以在软件源列表中找到。
查找 PPA 安装的软件包并将其删除
Ubuntu 软件中心在这里没有帮助。 您必须在这里使用 Synaptic 包管理器,它具有更高级的功能。
您可以从软件中心在 Ubuntu 中安装 Synaptic 或使用以下命令:
sudo apt install synaptic
安装后,启动 Synaptic 包管理器并选择 Origin。 您将看到系统中添加了各种存储库。 PPA 条目将标有前缀 PPA。 单击它们可查看 PPA 可用的软件包。 安装的软件前面会有适当的符号。
找到这些软件包后,您可以从 Synaptic 本身删除它们。 否则,您始终可以选择使用命令行:
sudo apt remove package_name
删除 PPA 安装的软件包后,您可以继续从 resources.list 中删除 PPA。
以图形方式删除 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 来自第三方开发商。 但与此同时,PPA 在 Debian/Ubuntu 世界中很受欢迎,因为它们提供了更简单的安装选项。
就安全性而言,您使用 PPA 且 Linux 系统被黑客攻击或注入恶意软件的可能性较小。 我不记得到目前为止发生过这样的事件。
可以毫不犹豫地使用官方 PPA。 使用非官方 PPA 完全由您决定。
根据经验,如果程序需要 sudo 访问权限才能运行,则应避免通过第三方 PPA 安装程序。