当您尝试按照网上的教程并使用 apt 命令安装软件时,但它会抛出无法定位包错误 E: Unable to locate package xyz。

您可能会很惊讶,因为该软件包应该可用。您在互联网上搜索并找到一个解决方案,但您必须启用 Universe 或 Multiverse 仓库才能安装该软件包。

您可以运行以下命令在 Ubuntu 启用 Universe 和 Multiverse 仓库,此时您已经安装 Universe 和 Multiverse 仓库。

但您知道这些仓库是什么吗?它们在安装软件包时如何发挥作用?为什么有多个软件仓库?我将在这里详细解释所有这些问题。

sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt update

Ubuntu 软件仓库的概念

你已经知道要在 Ubuntu 安装软件,可以使用 apt 命令。这与 Ubuntu 软件中心底层使用的 APT 包管理器相同。所以你在软件中心看到的所有软件(除了Snap包)基本都是来自 APT。

您是否想知道 apt 程序从哪里安装程序?它如何知道哪些软件包可用,哪些不可用?

Apt 在软件仓库之上运行。软件仓库只不过是包含一组软件的服务器。Ubuntu 提供存储软件的仓库,这样您就不必在互联网搜索您需要的各种软件的安装文件。这种集中提供软件的方式是使用 Linux 的主要优点之一。

APT 包管理器从 /etc/apt/sources.list 文件和 /etc/apt/sources.list.d 目录中列出的文件获取软件仓库的信息。软件仓库的记录通常采用以下格式:

deb http://cn.archive.ubuntu.com/ubuntu/ bionic main

其实你可以在 Web 浏览器打开上面的 URL 地址看看软件仓库是如何构造的。

当您使用 apt update 命令更新 Ubuntu 时,apt 包管理器会从软件仓库获取可用包的信息及其版本信息,并将它们存储在本地缓存中。您可以在 /var/lib/apt/lists 目录中看到它。

将此信息保存在本地可以加快搜索过程,因为您不必通过网络并搜索可用软件包的数据库来检查某个软件包是否可用。

现在您知道软件仓库如何发挥重要作用,让我们看看为什么 Ubuntu 提供的多个软件仓库。

Ubuntu 软件仓库:Main、Universe、Multiverse、Restricted 和 Partner

Ubuntu 软件仓库中的软件分为五类:Main、Universe、Multiverse、Restricted 和Partner。

为什么 Ubuntu 要这么做呢?为什么不将所有软件放入一个仓库中?为了回答这个问题,让我们看看这些软件仓库是什么:

Main

当您安装 Ubuntu 时,这是默认启用的仓库。main 软件仅包含自由开源软件,可以不受任何限制地分发。

main 软件仓库中的软件得到 Ubuntu 开发者的完全支持。这就是 Ubuntu 将提供的安全更新,直到您的系统达到支持日期为止。

Universe

Universe 软件仓库还包含自由的开源软件,但 Ubuntu 不保证此类软件的定期安全更新。

此类软件由社区打包和维护。Universe 软件仓库拥有大量开源软件,因此您可以通过 apt 包管理器安装大量的软件。

Multiverse

Multiverse 包含非自由和开源软件的软件。由于许可和法律问题,Ubuntu 默认没有启用此仓库,也无法提供修复和更新。

由您决定是否要启用 Multiverse 软件仓库并检查您是否有权使用该软件。

Restricted

Ubuntu 试图只提供自由的开源软件,但这并不总是可行,特别是在支持硬件方面。Restricted 受限软件仓库由专有驱动程序组成。

Partner

该软件仓库由 Ubuntu 为其合作伙伴打包的专有软件组成。早些时候,Ubuntu 曾经通过这个仓库提供 Skype。随着 Ubuntu 转向 Snap 打包的方式,该仓库将在未来版本的 Ubuntu 停止使用。

第三方软件仓库与  PPA

以上五个软件仓库是 Ubuntu 提供的。如果您愿意,您还可以添加第三方软件仓库来访问更多软件或访问较 新版本的软件,因为 Ubuntu 可能提供同一软件的旧版本。

例如,如果添加 VirtualBox 的软件仓库,则可以获得最新版本的 VirtualBox。它将在您的 sources.list 中添加一个新的记录。您还可以使用 PPA(个人包存档)安装其他应用程序。

不要尝试在您的 sources.list 文件中添加除 Ubuntu 仓库之外的任何内容。您应该保持此文件处于原始状态,因为如果您弄乱它,您将无法更新系统或甚至安装新软件包。

启用 universe, multiverse

到目前为止,您应该默认启用 main 和 Universe 仓库。但是,如果您想通过终端启用其它软件仓库,请运行命令 sudo add-apt-repository universe

sudo add-apt-repository universe

要启用受限软件仓库,请运行命令 sudo add-apt-repository restricted

sudo add-apt-repository restricted

要启用 Multiverse 存储库,请运行命令 sudo add-apt-repository multiverse

sudo add-apt-repository multiverse

启用这些软件仓库后必须运行命令 sudo apt update 重建系统软件包信息的本地缓存。

如果您想删除软件仓库,可以使用 add-apt-repository 命令的 -r 选项,例如 sudo add-apt-repository -r Universe

除了使用命令行之外,你也可以以图形方式,转到软件和更新,您可以在此处启用软件仓库:

您将在“其他软件”选项卡中找到启用合作伙伴软件仓库的选项。

要禁用软件仓库,只需取消选中多选框即可。

如何知道软件包属于哪个软件仓库

Ubuntu 有一个专门的网站,为您提供 Ubuntu 所有可用软件包的信息。转至 Ubuntu 软件包网站

您可以在搜索字段中搜索包名称。您也可以选择是否要查找指定 Ubuntu 版本或制定软件仓库。通常不需要指定这个两个选项。

它将显示所有匹配的软件包、Ubuntu 版本和软件仓库信息。

正如您在上面所看到的,tor 包在各个 Ubuntu 版本的 Universe 仓库中可用。

结论

至此,您已经了解 Ubuntu 软件仓库的概念。如果您有任何疑问或建议,请随时在下方留言。