myfreax
apt

如何在 Ubuntu 添加删除 PPA 软件源

PPA 全称是 Personal Package Archives,翻译过来就是个人包存档。PPA 允许应用程序开发者和 L​​inux 用户创建自己的软件源来分发软件,从而使用更新版本的软件

13 min read
By myfreax
如何在 Ubuntu 添加删除 PPA 软件源
如何在 Ubuntu 添加删除 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。

值得一提的是,虽然本教程是使用 Ubuntu 编写,你几乎在所有地方都使用 Ubuntu 一词,但说明和步骤也适用于其他基于 Debian / Ubuntu 的 Linux 发行版。

什么是 PPA

PPA 全称是 Personal Package Archives,翻译过来就是个人包存档。PPA 允许应用程序开发者和 L​​inux 用户创建自己的软件源来分发软件。使用 PPA,您可以轻松获取最新的软件版本或官方 Ubuntu 软件源无法提供的软件。

在了解 PPA 之前,您应该了解 Ubuntu 软件源的概念。不过,我不会在这里详细介绍。

软件源和包管理的概念

软件源是软件包保存的服务器,其中包含各种软件详细信息。每个 Ubuntu 版本都有自己官方的四个软件源:

  • Main – Canonical 支持的自由开源软件。
  • Universe – 社区维护的自由开源软件。
  • Limited – 设备的专有驱动程序。
  • Multiverse – 受版权或法律问题限制的软件。

您可以在此处查看所有 Ubuntu 版本的软件源。您可以浏览它们,也可以访问各个软件源。例如,可以在此处找到 Ubuntu 16.04 主要软件源。

基本上它是一个包含软件包信息的站点。您的系统将此信息存储在 /etc/apt 目录的 sources.list 文件。

如果您查看 sources.list 文件内容,您会发现它保存着软件源的 URL。以 # 开头的行将被忽略。

cat /etc/apt/sources.list
# deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ focal main restricted
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates main restricted
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates main restricted
.....

现在,当您运行命令 sudo apt update 时,您的系统将使用 APT 包管理器来检查软件源,并将软件及其版本的信息存储在缓存。

当您运行命令 sudo apt install package_name 安装软件时,它​​会使用本地的缓存信息从实际的 URL 下载并安装软件。

如果软件源没有某个包的信息,您将看到无法找到包错误 E: Unable to locate package:

E: Unable to locate package

为什么使用 PPA

正如您所看到的,Ubuntu 的软件源控制着您在系统安装的软件,更重要的是控制着软件的版本。但想象一下,如果软件开发者发布软件的新版本。

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 以及更高版本的发行版会自动运行更新以刷新软件包列表缓存。

现在让我们更详细地看一下第一个命令 add-apt-repository

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 你的Ubuntu代号 main
deb-src http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu 你的Ubuntu代号 main

上面两行是将任何软件源添加到 sources.list 的传统方法。但 PPA 会自动为您完成此操作,而无需考虑确切的软件源 URL 和操作系统版本。

这里需要注意的一件重要的事情是,当您使用 PPA 时,它不会更改您的原始sources.list。但它会在 /etc/apt/sources.list.d 目录中创建两个文件,一个 .list 和一个扩展名为 .save 的备份文件。

这是一项安全措施,可确保添加 PPA 不会打乱的 sources.list 文件。避免你误删 Ubuntu 官方的软件源。

ls /etc/apt/sources.list.d 
dr-akulavich-ubuntu-lighttable-focal.list  google-chrome.list  google-chrome.list.save  vscode.list  vscode.list.save

扩展名为 .list 的文件包含 PPA 的软件源的信息。

cat /etc/apt/sources.list.d/google-chrome.list
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main

为什么选择 PPA

您可能会问为什么要使用 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 的版本信息。

cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

要知道 PPA 详细信息的URL,你只需在 Google 搜索 PPA 名称,如 ppa:dr-akulavich/lighttable。

您应该获得第一个结果是托管 PPA 的官方平台 Launchpad 网站。您还可以前往 Launchpad 并直接在那里搜索所需的 PPA。

如果您不验证并添加 PPA,当您尝试安装不适合您的版本的软件时,您可能会看到类似的错误,E: Unable to locate package。

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 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 处查找软件信息。

如果特定 Ubuntu 版本的 PPA 不可用,它将永远无法打开 URL,并且您会看看 HTTP 的 404 错误。

PPA 之所以不适用于所有 Ubuntu 版本,是因为必须有人编译该软件并在指定的版本上创建 PPA。

考虑到新的 Ubuntu 版本每六个月发布一次,为每个 Ubuntu 版本更新 PPA 是一项艰巨的任务。并非所有开发人者都有时间这样做。

删除 PPA

通常建议先删除从 PPA 安装的软件,然后再删除 PPA。如果您只是删除 PPA,已安装的软件仍保留在系统,但不会获得更新。

Ubuntu 软件中心在这里没有帮助。您必须在这里使用 Synaptic 包管理器,它具有更高级的功能。可以在 Ubuntu 软件中心安装 Synaptic 或运行命令安装:

sudo apt install synaptic

安装后,启动 Synaptic 包管理器并选择 Origin。您将看到系统中添加各种软件源。PPA 记录将标有前缀 PPA。单击它们可查看 PPA 可用的软件包。

已安装的软件前面会有适当的符号。找到这些软件包后,您可以从 Synaptic 删除它们。您也可以选择使用命令 sudo apt remove package_name 删除软件:

查找通过 PPA 安装的软件包
sudo apt remove package_name

删除通过 PPA 安装的软件后,接下来删除 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 有更多疑问,请随时在评论反馈。