Product SiteDocumentation Site

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

6.1. 编写 sources.list 文件
6.1.1. 语法
6.1.2. 给稳定版使用者的仓库
6.1.3. 给测试版不稳定版用户的仓库
6.1.4. 使用其他镜像
6.1.5. 非官方来源
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
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 bullseye-security main contrib non-free
deb-src bullseye-security main contrib non-free

## Debian mirror

# Base repository
deb bullseye main contrib non-free
deb-src bullseye main contrib non-free

# Stable updates
deb bullseye-updates main contrib non-free
deb-src bullseye-updates main contrib non-free

# Stable backports
deb bullseye-backports main contrib non-free
deb-src 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 版本。 安全更新

Debian 非常重视安全。已知的 Debian 软件漏洞会在 Security Bug Tracker 进行跟踪,而且通常会在合理时限内被修复。安全更新的内容通常不在 Debian 镜像站内,而是在由 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),并且在 邮件列表(邮件归档)随着安全更新一起公告。 稳定版更新

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

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 bullseye-proposed-updates main contrib non-free 稳定版向后移植

stable-backports 仓库存放“软件包的向后移植版本”。该术语指的是一些近期发布的软件针对旧的发行版重新编译的包,这里所指的旧发行版通常是指稳定版(Stable)
当发行版本经过一段时间后,大量的软件项目都发布了新的软件版本,但它们都没有整合进入当前的稳定版(它仅接受那些解决最重要问题的修改,例如安全更新)。因为测试版不稳定版均具有一定风险,软件包维护者有时会针对稳定版提供近期发布的软件的重新编译版本,这样做可以将潜在的不稳定因素限制在一小部分经过筛选的软件包之间,因而具有一定的优势。 这个页面提供了更多信息。
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 unstable main contrib non-free
deb-src unstable main contrib non-free

# Testing
deb testing main contrib non-free
deb-src testing main contrib non-free

# Testing security updates
deb testing-security main contrib non-free
deb-src testing-security main contrib non-free

# Stable
deb stable main contrib non-free
deb-src stable main contrib non-free

# Stable security updates
deb stable-security main contrib non-free
deb-src 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.
稳定版的内容比较有争议,但它也常常保留了某些不再开发的软件包版本。同时也确保你能获取到尚未修改的最新软件包的更新包。 实验性仓库

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

6.1.4. 使用其他镜像

The sources.list examples in this chapter refer to package repositories hosted on 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.
之前使用 作为 的另一个选择。此服务会标识最近的镜像(在广泛镜像列表中,主要使用GeoIP)并重定向APT请求到该镜像。由于可靠性问题此服务已弃用,现在 提供与 相同的基于CDN的服务。

6.1.5. 非官方来源

高级用户们为一些重新编译过的软件建立了众多的非官方的 Debian 软件源 — Ubuntu 使用他们的个人包存(PPA)档服务 — 程序员提供他们编写的软件给所有人,甚至有 Debian 开发人员在线提供他们的软件包的预览版本。 站点比较有意思(虽然它只提供源码包),它搜集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>
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