Product SiteDocumentation Site

第 6 章 维护和更新:APT 工具

6.1. 编写 sources.list 文件
6.1.1. 语法
6.1.2. 给稳定版使用者的仓库
6.1.3. 给测试版不稳定版用户的仓库
6.1.4. 使用其他镜像
6.1.5. 非官方来源:mentors.debian.net
6.1.6. Debian 软件包缓存代理
6.2. aptitudeapt-getapt 命令
6.2.1. 初始化
6.2.2. 安装和卸载
6.2.3. 系统升级
6.2.4. 配置选项
6.2.5. 软件包优先级管理
6.2.6. 在多个发行版中工作
6.2.7. 自动追踪已安装的软件包
6.2.8. APT Patterns
6.3. The apt-cache 命令
6.3.1. The apt-cache policy Command
6.4. apt-file 命令
6.5. 前端:aptitudesynaptic
6.5.1. aptitude
6.5.2. synaptic
6.6. 检查软件包真实性
6.7. 升级至下个稳定发行版
6.7.1. 推荐的程序
6.7.2. 处理升级后的问题
6.7.3. 升级后的清理
6.8. 保持系统在最新状态
6.9. 自动升级
6.9.1. 配置 dpkg
6.9.2. 配置 APT
6.9.3. 配置 debconf
6.9.4. 处理命令行接口
6.9.5. 神奇的组合
6.10. 搜索软件包
Debian 之所以如此受系统管理员欢迎,是因为软件极易安装且整个系统的更新也极为简单。这一独特的优点主要得归功于 Falcot 公司系统管理员们热情研究的 APT 程序。
APT is the abbreviation for Advanced Packaging Tool. What makes this program “advanced” is its approach to packages. It doesn't simply evaluate them individually, but it considers them as a whole and produces the best possible combination of packages depending on what is available and compatible according to dependencies.
APT 需要指定一个“软件源(仓库)列表”:文件 /etc/apt/sources.list 会列出发布 Debian 软件包的不同仓库。接下来 APT 会从每一个软件源导入所发布的软件包列表。在二进制包的场景下,这个过程是通过下载 Packages.xz 文件或其它使用不同压缩方式的文件(比如 Packages.gz 或者 .bz2),并分析它们的内容来完成。在源码包的场景下,APT 下载 Sources.xz 文件或其它使用了不同压缩方式的文件。当这些文件的旧版本已经存在的时候,APT 仅下载更新的部分(见补充说明 提示 增量更新)。

6.1. 编写 sources.list 文件

6.1.1. 语法

/etc/apt/sources.list 文件里处于激活状态每一行都代表一个软件包源(仓库),并且至少由空格分隔的三个部分组成。详细的文件格式和允许的条目组成参见 sources.list(5)

例 6.1. /etc/apt/sources.list 的格式样例

deb url distribution component1 component2 component3 [..] componentX
deb-src url distribution component1 component2 component3 [..] componentX
第一个字段标识源的类型:
deb
二进制软件包的软件包源(仓库)
deb-src
源代码软件包的软件包源(仓库)
The second field gives the base URL of the source. Combined with the filenames listed in the Packages.xz files, it must give a full and valid URL. This can consist in a Debian mirror or in any other package archive set up by a third party. The URL can start with file:// to indicate a local source installed in the system's file hierarchy, with http:// or https:// to indicate a source accessible from a web server, or with ftp:// or ftps:// for a source available on an FTP server. The URL can also start with cdrom: for CD-ROM/DVD/Blu-ray disc based installations, although this is less frequent, since network-based installation methods are eventually more common. More methods like ssh:// or tor+http(s):// are supported and are either described in sources.list(5) or their respective apt-transport-method package documentation.
The syntax of the last field depends on the structure of the repository. In the simplest case, you can simply indicate a subdirectory (with a required trailing slash) of the desired source. This is often a simple “./” which refers to the absence of a subdirectory. The packages are then directly at the specified URL. But in the most common case, the repositories will be structured like a Debian mirror, with multiple distributions, each having multiple components. In those cases, name the chosen distribution by its “codename” — see the list in sidebar 社区 Bruce Perens,一位有争议的领导者 — or by the corresponding “suite” (oldoldstable, oldstable, stable, testing, unstable) and then the components to enable. A typical Debian mirror provides the components main, contrib, and non-free.
cdrom 条目表示 CD、DVD 光盘。 跟其他条目不同,CD 光盘需要插入光驱中,并且每次只能读一张,所以并不总是可用。因此这种仓库管理起来稍有不同,需要用到 apt-cdrom 程序,经常与 add 参数一起执行。它会要求光驱中插入光盘,然后会浏览内容,寻找 Packages 文件。这些文件会用于更新可用软件包数据库(此过程由 apt update 命令完成)。自此,如果某些软件包需要光盘,APT 可发出插入光驱的要求。

6.1.2. 给稳定版使用者的仓库

下面是标准的稳定版 Debian sources.list 文件:

例 6.2. 给 Debian 稳定版用户的 /etc/apt/sources.list 文件

# Security updates
deb http://security.debian.org/ bullseye-security main contrib non-free
deb-src http://security.debian.org/ bullseye-security main contrib non-free

## Debian mirror

# Base repository
deb https://deb.debian.org/debian bullseye main contrib non-free
deb-src https://deb.debian.org/debian bullseye main contrib non-free

# Stable updates
deb https://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src https://deb.debian.org/debian bullseye-updates main contrib non-free

# Stable backports
deb https://deb.debian.org/debian bullseye-backports main contrib non-free
deb-src https://deb.debian.org/debian bullseye-backports main contrib non-free
This file lists all sources of packages associated with the Bullseye version of Debian (the current Stable suite as of this writing). In the example above, we opted to name “bullseye” explicitly instead of using the corresponding “stable“ aliases (stable, stable-updates, stable-backports) because we don't want to have the underlying distribution changed outside of our control when the next stable release comes out.
Most packages will come from the “base repository”, which contains all packages but is seldom updated (about once every 2 months for a “point release”). The other repositories are partial (they do not contain all packages) and can host updates (packages with newer version) that APT might install. The following sections will explain the purpose and the rules governing each of those repositories.
请注意,当你所需要的软件包版本同时存在于几个仓库中时,在文件 sources.list 中所列出的第一个会被使用。因此,非官方的软件源一般建议加在文件的末尾处。
补充一点,本节中提到内容不仅适用于 Stable 版本,对于 Oldstable 一样适用。后者只是同时在维护的更老旧的 Stable 版本。

6.1.2.1. 安全更新

Debian 非常重视安全。已知的 Debian 软件漏洞会在 Security Bug Tracker 进行跟踪,而且通常会在合理时限内被修复。安全更新的内容通常不在 Debian 镜像站内,而是在 security.debian.org(由 Debian 系统管理员们维护的小范围机器上)。上面的内容包括了那些由为 Debian 安全团队及软件包维护者提供给 稳定版旧的稳定版 的安全更新。
The server can also host security updates for Testing but this doesn't happen very often since those updates tend to reach that suite via the regular flow of updates coming from Unstable.
对于严重的问题,安全团队会发布 Debian 安全通告(DSA),并且在 邮件列表(邮件归档)随着安全更新一起公告。

6.1.2.2. 稳定版更新

稳定版更新对安全性不敏感,在下一个稳定版本点发布前,它还是很重要,需要推送给使用者。
这个仓库通常包括修正补丁,用于修复在发布前无法修复的严重漏洞和后续更新引入的漏洞。根据紧急性,它还包含长期的软件包更新,比如 spamassassin 的垃圾邮件检测规则,clamav 病毒库,各个时区的夏令时规则 (tzdata),Firefox 的延长支持ESR版 (firefox-esr),或是类似 debian-archive-keyring 这种加密密钥。
实际上,这个仓库是由稳定版发布管理员proposed-updates 仓库中精心挑选的子集。所有更新都会在 邮件列表 (archive) 上公布,并且无论如何都会包含在下一个稳定版的小版本更新中。

6.1.2.3. 计划更新

一旦发布,稳定版只会每两个月更新一次。接下来的更新在计划更新仓库里准备(由稳定版发布管理员监督)。
这个仓库不仅包含上一章节提到的安全更新和稳定更新的文件,还有更多内容,因为软件包维护者可能在这里修复一些不需要马上发布的重要漏洞。
Anyone can use this repository to test those updates before their official publication. The extract below uses the bullseye-proposed-updates alias which is both more explicit and more consistent since buster-proposed-updates also exists (for the Oldstable updates):
deb https://deb.debian.org/debian bullseye-proposed-updates main contrib non-free

6.1.2.4. 稳定版向后移植

stable-backports 仓库存放“软件包的向后移植版本”。该术语指的是一些近期发布的软件针对旧的发行版重新编译的包,这里所指的旧发行版通常是指稳定版(Stable)
当发行版本经过一段时间后,大量的软件项目都发布了新的软件版本,但它们都没有整合进入当前的稳定版(它仅接受那些解决最重要问题的修改,例如安全更新)。因为测试版不稳定版均具有一定风险,软件包维护者有时会针对稳定版提供近期发布的软件的重新编译版本,这样做可以将潜在的不稳定因素限制在一小部分经过筛选的软件包之间,因而具有一定的优势。http://backports.debian.org 这个页面提供了更多信息。
stable-backports 里面的软件向后移植版本通常是源自于不稳定版的。这样能确保一旦下一个稳定的 Debian 版本可用,所有安装的向后移植版本软件都可以升级到相应的稳定版本。
尽管该仓库提供软件包较新的版本,APT 也只会在给出明确指令的情况下安装它们(或者你之前已经安装了对应软件的上一个向后移植版本):
$ sudo apt-get install package/bullseye-backports
$ sudo apt-get install -t bullseye-backports package

6.1.3. 给测试版不稳定版用户的仓库

下面是一个标准 sources.list 文件,用于测试版不稳定版

例 6.3. Debian 测试版不稳定版用户的 /etc/apt/sources.list 文件

# Unstable
deb https://deb.debian.org/debian unstable main contrib non-free
deb-src https://deb.debian.org/debian unstable main contrib non-free

# Testing
deb https://deb.debian.org/debian testing main contrib non-free
deb-src https://deb.debian.org/debian testing main contrib non-free

# Testing security updates
deb http://security.debian.org/ testing-security main contrib non-free
deb-src http://security.debian.org/ testing-security main contrib non-free

# Stable
deb https://deb.debian.org/debian stable main contrib non-free
deb-src https://deb.debian.org/debian stable main contrib non-free

# Stable security updates
deb http://security.debian.org/ stable-security main contrib non-free
deb-src http://security.debian.org/ stable-security main contrib non-free
用上面的 sources.list 文件,APT 将安装软件包的不稳定版。如果这不是你所期望的,可以用 APT::Default-Release 设置(参见 第 6.2.3 节 “系统升级”)来指明 APT 从另外的版本获取软件包(这个例子中多数会使用测试版)。
There are good reasons to include all those repositories, even though a single one should be enough. Testing users will appreciate the possibility to cherry-pick a fixed package from Unstable when the version in Testing is affected by an annoying bug. On the other hand, Unstable users bitten by unexpected regressions have the possibility to downgrade packages to their (supposedly working) Testing version.
稳定版的内容比较有争议,但它也常常保留了某些不再开发的软件包版本。同时也确保你能获取到尚未修改的最新软件包的更新包。

6.1.3.1. 实验性仓库

所有 Debian 镜像站都会包含实验性的软件包,包括因为达不到质量要求尚未被纳入不稳定版的软件包 — 通常是开发中的版本或发布前的前置版本(alpha、beta、rc 等)。软件包在经过修改后就会被放上来,多少会带来点问题。在能力强的高级用户的协助下,维护者会努力找出并修复这些问题。经过第一阶段后,软件包会移到不稳定版仓库中,会有更多的用户以更详细的方式测试它。
实验性软件通常只有不在乎系统崩溃并且有能力自行修复的用户才会使用。用户可以导入此等软件包并测试其功能、检查是否满足其需求。这就是 Debian 的诉求,加入 APT 的 sources.list 内,并不表示该软件包可顺利使用,应加入下面这行:
deb https://deb.debian.org/debian experimental main contrib non-free

6.1.4. 使用其他镜像

The sources.list examples in this chapter refer to package repositories hosted on deb.debian.org. Those URLs will redirect you to servers which are close to you and which are managed by Content Delivery Networks (CDN) whose main role is to store multiple copies of the files across the world, and to deliver them as fast as possible to users. The CDN companies that Debian is working with are Debian partners who are offering their services freely to Debian. While none of those servers are under direct control of Debian, the fact that the whole archive is sealed by GPG signatures makes it a non-issue.
deb.debian.org的性能不满意的挑剔的用户可以尝试在官方镜像列表中找到更好的镜像:
当不知道那个镜像最适合自己时,这个列表没那么有用。幸运的是,Debian保留了DNS条目表ftp.country-code.debian.org(例如ftp.us.debian.org用于美国,ftp.fr.debian.org用于法国等),它涵盖了很多国家,并指向某个国家中的一个(或多个)最佳镜像。
之前使用 httpredir.debian.org 作为 deb.debian.org 的另一个选择。此服务会标识最近的镜像(在广泛镜像列表中,主要使用GeoIP)并重定向APT请求到该镜像。由于可靠性问题此服务已弃用,现在 httpredir.debian.org 提供与 deb.debian.org 相同的基于CDN的服务。

6.1.5. 非官方来源:mentors.debian.net

高级用户们为一些重新编译过的软件建立了众多的非官方的 Debian 软件源 — Ubuntu 使用他们的个人包存(PPA)档服务 — 程序员提供他们编写的软件给所有人,甚至有 Debian 开发人员在线提供他们的软件包的预览版本。
mentors.debian.net 站点比较有意思(虽然它只提供源码包),它搜集Debian开发者候选人员制作的软件包,以及那些希望创建Debian软件包又不想经历成为Debian开发者整套流程的那些志愿者的软件包。这些软件包提供时没有任何质量保证;请确保您在将它们用于生产环境之前检查它们的来源和完整性并进行测试。
安装一个包意味着需要给包的创建者以 root 权限,因为其决定了以该身份运行的初始化脚本的内容。官方的 Debian 包由志愿者创建,志愿者经过指派和评估,且能封装软件包,因而软件包的来源与完整性可以确认。
一般地,你要当心来源未知以及没有位于任一 Debian 官方服务器上的软件包:要评估包创建者的可信度,并检查包的完整性。

6.1.6. Debian 软件包缓存代理

当一整个网络的机器被配置为使用同样的远程服务器并下载同样的更新包时,管理员会知道有一个当作网络-本地缓存器的中介代理是有好处的(参见侧边栏术语 缓存)。
您可以配置 APT 使用一个“标准”的代理(参见第 6.2.4 节 “配置选项” 获取 APT 相关内容,参见第 11.6 节 “HTTP/FTP 代理”获取代理相关内容),Debian 体系提供了一个解决问题的更佳手段。本节中所述的专用软件比普通的代理缓存更加智能,因为它们可依赖于 APT 软件源的特定结构(例如,它们了解单独的文件在什么时间废弃与否,并由此来调整在保持阶段的时间)。
apt-cacherapt-cacher-ng的工作方式类似代理缓存服务器。对于外部请求,APT 的sources.list 保持不变,但是 APT 被配置为把它们作为代理使用。
另一方面,approx,工作方式则类似一个 HTTP 服务器,在它的顶级 URL 地址上“镜像”任意数量的远程软件源。这些顶级目录与远程 URL 之间的映射存储于/etc/approx/approx.conf中:
# <name>   <repository-base-url>
debian     https://deb.debian.org/debian
security   http://security.debian.org/debian-security
approx 默认通过一个systemd socket在9999端口运行,并需要用户调整sources.list 文件来指向 approx 服务器:
# Sample sources.list pointing to a local approx server
deb http://localhost:9999/security bullseye-security main contrib non-free
deb http://localhost:9999/debian   bullseye main contrib non-free