2023-07-31 10:07:59 +08:00
|
|
|
|
[#]: subject: "Understanding Ubuntu’s Repository System"
|
|
|
|
|
[#]: via: "https://itsfoss.com/ubuntu-repository-mechanism/"
|
|
|
|
|
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
|
|
|
|
[#]: collector: "lkxed"
|
2023-08-02 16:16:52 +08:00
|
|
|
|
[#]: translator: "HankChow"
|
2023-07-31 10:07:59 +08:00
|
|
|
|
[#]: reviewer: " "
|
|
|
|
|
[#]: publisher: " "
|
|
|
|
|
[#]: url: " "
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
了解 Ubuntu 的软件存储库系统
|
2023-07-31 10:07:59 +08:00
|
|
|
|
======
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
当你开始使用 Ubuntu 或者其它基于 Ubuntu 的发行版时,你很快就会学会使用 `apt` 命令安装软件包:
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo apt install package_name
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
你可能还会使用这三条 PPA 命令安装其它软件:
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo add-apt-repository ppa:PPA_Name/ppa
|
|
|
|
|
sudo apt update
|
|
|
|
|
sudo apt install package_from_ppa
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
但当你添加一些外部的软件存储库时,很可能会遇到一些更新错误。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
尽管你可以在互联网上搜索到同样的报错以及对应的解决方案,_但在大多数情况下,你并不知道这些错误为什么会出现,也不知道它们是怎么被解决的。_
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
**如果你了解了 Ubuntu 软件存储库的运行机制,你就会很清楚这些问题的根源是什么**,进而对症下药地给出处理方式。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
在 It's FOSS 或者其它类似的论坛上,你可以找到很多相关的零散内容,但那些碎片化的信息并不能让你对其产生一个全面的理解。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
因此我写出了这篇文章,以便让你全面了解软件存储库是如何运作的。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
本文的内容适用于 Linux Mint、Elementary OS 以及其它基于 Ubuntu 的发行版(Debian 或许也适用)。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
> 本文主要面向终端用户而不是开发者,我只会介绍维护系统软件存储库所需要的知识,不会展示如何在 Ubuntu 中打包应用程序。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
我们会先从关键部分开始,了解软件包管理器和软件存储库的基本概念。这可以为了解它们的底层运作方式奠定基础。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### 什么是包管理器?
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
简单地说,包管理器就是让用户在操作系统上安装、移除、升级、配置、管理软件包的工具。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
Ubuntu 通过软件存储库为用户提供软件。软件存储库中包含了各种不同类型的软件包以及它们的元数据文件,元数据文件中记录了软件包的信息,包括软件包名称、版本号、软件包描述和软件存储库名称等。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
软件包管理器与元数据进行交互,并在你的系统上创建本地的元数据缓存。当你需要安装软件时,软件包管理器会引用这些缓存来获取信息,通过互联网连接到对应的存储库下载软件包,然后再将软件包安装到系统上。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
![][1]
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
[这篇文章](https://itsfoss.com/package-manager/)详细介绍了软件包管理器的工作原理,欢迎查阅。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### Ubuntu 的默认软件存储库
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
在上一节中,你可能已经对软件存储库有了一些认识。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
你可能已经猜到,没有哪个软件存储库会包含所有软件包。因为软件包会被分类放置在不同的软件存储库中,这样就可以方便地启用或禁用部分软件存储库。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
每个 Ubuntu 版本都有自己的一组四个官方存储库:
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
- **Main** – Canonical 支持的免费开源软件
|
|
|
|
|
- **Universe** – 社区维护的免费开源软件
|
|
|
|
|
- **Restricted** – 设备的专有驱动程序
|
|
|
|
|
- **Multiverse** – 受版权或法律问题限制的软件
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### 了解 `sources.list`
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
`sources.list` 是 Ubuntu 软件存储库机制的一个组成部分。`sources.list` 文件中存在的错误条目常常是引发一些与更新问题的根本原因。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
因此,了解 `sources.list` 很重要。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
`sources.list` 是一个记录了软件存储库信息的文本文件,每一行未被注释的内容都代表一个单独的软件存储库。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
![sources.list in Ubuntu][2]
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
但这些内容需要遵循特定的格式,并且不应出现重复的行。[这篇文章](https://itsfoss.com/sources-list-ubuntu/)中介绍了 `sources.list` 的更多详细内容。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### 深入了解 PPA
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
尽管 Ubuntu 最近在大力推广 Snap,但 PPA 仍然是获取 Ubuntu 最新软件的一个可靠途径。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
然而很多 Ubuntu 用户都只是刻板地直接运行上面的三条命令来使用 PPA,自然很容易会遇到诸如“repository does not have release file”这样的问题。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
[这篇文章](https://itsfoss.com/ppa-guide/)是一篇深入详尽的 PPA 指南。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### 添加外部软件存储库
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
除了默认软件存储库和 PPA,你还可以从第三方软件存储库中添加软件。比如 Brave 浏览器、Docker 等软件都专门为 Ubuntu 提供了软件存储库。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
你可以通过[这篇文章](https://itsfoss.com/adding-external-repositories-ubuntu/)了解使用外部软件存储库的机制。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### 排查常见错误
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
现在你已经了解了底层机制,现在可以熟悉一下在使用 Ubuntu 时可能遇到的典型更新错误了。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
当你看到出现错误之后,你会得到一些关于它的根本原因的提示。在了解根本原因后,你就能知道某个解决方案是如何解决问题的了。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
这就是本文的目的。让你充分了解软件包管理系统的底层知识,从而避免常见错误或者直接有效修复这些错误。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
**你不仅要知其然,还要知其所以然。**
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
#### 下载软件存储库信息失败
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
如果遇到了这种情况,这仅仅是排查过程的开始。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
![Failed to download repository information][3]
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
在某些情况下,可能是网络连接的问题,但也有可能是因为你自行添加了某些软件存储库,或者 `sources.list` 中的条目有误。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
这个时候应该在终端中尝试刷新软件包缓存。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo apt update
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
检查输出结果的最后几行,它会给出错误信息(也就是以 E: 开头的行)。有了错误信息之后,就可以开始故障排除了。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
#### 软件存储库中没有发布文件
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
如果 Ubuntu 用户未检查其 Ubuntu 版本是否存在 PPA,盲目向系统中添加 PPA 时,就很可能会遇到这样的错误。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
E: The repository ‘http://ppa.launchpad.net/numix/ppa/ubuntu focal Release’ does not have a Release file.
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
原因很可能就是这个软件存储库没有针对所使用的 Ubuntu 版本进行配置。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
#### MergeList 问题
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
如果你看到这样的错误:
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
E:Encountered a section with no Package: header,
|
|
|
|
|
E:Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_precise_universe_binary-i386_Packages,
|
|
|
|
|
E:The package lists or status file could not be parsed or opened.
|
|
|
|
|
```
|
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
这表明第二行中提到的缓存文件已经损坏。对应的解决方法是清空缓存并重试。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
#### 目标软件包被多次配置
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
好吧!严格来说,这不是一个错误。它只是一个警告。但它仍然很常见,可能会给许多 Ubuntu 新用户带来麻烦。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
这是一个能让你把新学到的知识用在这里的好例子。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
出现这个问题是因为 `sources.list` 文件中有重复的条目。解决办法是将所有重复的行删除至只保留一行。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
### 继续学习
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
在读完这篇文章后,希望你对 Ubuntu 的软件存储库机制能有更深入的了解。下一次当你遇到错误并寻找解决方案时,你就更有可能理解发生了什么。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
接下来,你应该学会使用 `apt` 的各种命令管理软件包,不仅仅只是 `apt install` 或 `apt remove`。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
你还可以详细了解一下关于软件包管理的其它知识。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
由于 Ubuntu 比以往任何时候都更推崇 Snap,所以你也应该学习一些必要的 Snap 命令。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
Flatpak 应用程序也越来越受欢迎,你也很可能会接触到它们。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
2023-08-09 14:19:34 +08:00
|
|
|
|
希望你喜欢学习软件存储库的机制,并对软件包管理有更清晰的认识。欢迎在评论区分享你的想法。
|
2023-07-31 10:07:59 +08:00
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://itsfoss.com/ubuntu-repository-mechanism/
|
|
|
|
|
|
|
|
|
|
作者:[Abhishek Prakash][a]
|
|
|
|
|
选题:[lkxed][b]
|
2023-08-09 14:21:03 +08:00
|
|
|
|
译者:[HankChow](https://github.com/HankChow)
|
2023-07-31 10:07:59 +08:00
|
|
|
|
校对:[校对者ID](https://github.com/校对者ID)
|
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://itsfoss.com/author/abhishek/
|
|
|
|
|
[b]: https://github.com/lkxed/
|
|
|
|
|
[1]: https://itsfoss.com/content/images/2023/04/image.png
|
|
|
|
|
[2]: https://itsfoss.com/content/images/2023/07/image-4.png
|
2023-07-31 10:07:19 +08:00
|
|
|
|
[3]: https://itsfoss.com/content/images/2023/07/failed-to-download-repository-information-1.png
|