在 Ubuntu 中从外部存储库安装软件包 [Explained]

您对使用 apt 命令在 Ubuntu 中安装软件包有一些想法。 这些软件包来自 Ubuntu 的存储库。

第三方或外部存储库怎么样? 不,我不是在这里谈论 PPA。

迟早,您会遇到至少有四行的安装说明。 你安装了一个叫做“apt-transport-https”的东西,然后用 gpg 和源列表做一些事情。 之后,您安装该软件包。

完全想不起来。 让我分享一个在 Ubuntu 上安装最新版本 Yarn 的示例:

sudo apt install apt-transport-https curl curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list' sudo apt update && sudo apt install yarn

在直接从开发人员那里安装编程工具时,您经常会遇到这种安装方法。

许多人只是按照说明进行操作,而不会考虑这里发生的事情。 没有错,但了解该过程实际上可以提高您对此事的了解,并且还可以帮助进行故障排除。

让我解释一下这些线条背后的逻辑。

了解从外部存储库安装的过程

在您继续之前,我强烈建议您阅读这两篇文章,以便您对事情更加清楚:

  • Ubuntu 中存储库的概念
  • Ubuntu 中 PPA 的概念

快速回想一下,这是 Linux 中存储库和包管理器的可视化表示。

这里的整个想法是向系统添加一个新的外部存储库。 这样,您就可以从这个新存储库下载和安装可用的软件包。 如果存储库提供了软件包版本的更新,您可以更新已安装的软件包以及系统更新(apt update && apt upgrade)。

那么,这是如何工作的呢? 让我们一一分析。

第 1 部分:为 apt 获取 HTTPS 支持

第一行是这样的:

sudo apt install apt-transport-https curl

curl是Linux终端下载文件的工具。 这里的主要部分是安装 apt-transport-https 坦率地说,不再需要了。

使困惑? 这个 apt-transport-https 包允许您的系统通过安全的 HTTPS 协议访问存储库。 按照设计,Ubuntu 存储库使用 http,而不是 https。

看看下面的截图。 https 是我添加到系统中的外部存储库。 Ubuntu 存储库和 PPA 使用 http。

在旧版本的 apt 包管理器中,不包括 https 支持。 apt-transport-https 包为 apt 添加了 https 支持。 要添加使用 https 的存储库,首先安装此包。

我不是说不再需要了吗? 是的,因为较新版本的 apt(高于 1.5)支持 https,因此您不再需要安装 apt-transport-https。

但是您会在说明中看到这个包。 这更多是出于遗留原因或可能使用旧版本 apt 的非常旧的分发版本。

现在,您可能想知道为什么 Ubuntu 存储库使用 http 而不是 https,而 https 是安全协议。 难道不是安全隐患? 下一部分将回答这个问题。

第 2 部分:添加远程存储库的 GPG 密钥

Linux 存储库具有这种基于 GPG 密钥的内置安全机制。 每个存储库都将其公共 GPG 密钥添加到您系统的受信任密钥中。 存储库中的包由此 GPG 密钥“签名”,并且由于存储了公钥,您的系统可以验证该包是否来自存储库。

如果密钥不匹配,您的系统将抛出错误,而不是从所述存储库安装或更新软件包。

到现在为止还挺好。 下一步是将外部存储库的公共 GPG 密钥添加到您的 Linux 系统,以便它信任来自该存储库的包。

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -

在上面的命令中,您使用以下命令从给定的 URL 下载 GPG 密钥 curl. 选项 sS 确保您看不到泛滥的输出(静默模式),但会显示错误(如果有)。 最后 - 告诉 apt-key 使用 stdin 而不是文件(这是 curl 在这种情况下是命令)。

下载密钥添加到系统中 apt-key add 命令。

您可以使用以下命令查看系统中各种存储库添加的 GPG 密钥 apt-key list 命令。

这是将 GPG 密钥添加到系统的一种方式。 您将看到一些其他命令,它们看起来可能略有不同,但执行相同的工作,将存储库的公钥添加到您的系统。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

您会注意到 apt-key 已被弃用的警告。 你仍然可以使用 apt-key 命令直到 Ubuntu 22.04 但它最终会被删除。 我们暂时不要担心。

第 3 部分:将外部存储库添加到您的源列表

下一个命令将新条目添加到系统的源列表中。 这样,您的系统就会知道它必须检查此存储库中的软件包和更新。

sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list'

有一个文件 /etc/apt/sources.list 包含 Ubuntu 存储库的详细信息。 不应触及此文件。 所有额外的存储库都应该放在 /etc/apt/sources.list.d 目录中各自的文件中(以 .list 约定结尾)。

这使得包管理更容易。 如果要从系统中删除存储库,则只需删除相应的源文件。 无需弄乱主要的 sources.list 文件。

让我们更详细地看一下该命令。

sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list'

使用 sh,您要求在新的 shell 中运行命令,而不是 子壳. -c 选项告诉 sh 命令从操作数而不是标准输入读取命令。 然后它运行 echo 命令,它基本上添加了行 deb https://dl.yarnpkg.com/debian/ 稳定主 到 /etc/apt/sources.list.d/yarn.list 文件(文件将被创建)

现在,您可以通过多种方式在指定目录中创建 .list 文件并在其中添加包含存储库详细信息的行。 你也可以这样使用它:

echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

你明白要点了吧?

第 4 部分:从新添加的存储库安装应用程序

到目前为止,您已经将存储库的 GPG 密钥和存储库的 URL 添加到系统中。

但是您的系统仍然不知道这个新存储库中可用的包。 这就是为什么您需要首先使用以下命令更新包元数据的本地缓存:

sudo apt update

您的系统将拥有有关新添加的存储库中可用软件包的信息,您现在可以安装该软件包:

sudo apt install yarn

为了节省时间,您可以在一行中一个接一个地运行这两个命令。

sudo apt update && sudo apt install yarn

&& 确保第二个命令仅在前一个命令完成且没有任何错误时运行。

这样这个过程就完成了。

它是否让事情变得更清楚或更让你困惑?

我解释了在 Ubuntu 中使用外部存储库的步骤背后的逻辑。 我希望您现在对这个主题有更好的理解,但过多的细节也可能令人困惑。

如果仍有不清楚的地方或您有其他问题,请告诉我。 如果您发现技术上的不准确之处,请在评论部分告诉我。