Product SiteDocumentation Site

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

6.1. 写入sources.list文件
6.1.1. 句法
6.1.2. 给Stable 使用者的仓库
6.1.3. 给测试/非稳定 版本用户的仓库
6.1.4. Using Alternate Mirrors
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.3. apt-cache 命令
6.4. 前置:aptitudesynaptic
6.4.1. aptitude
6.4.2. synaptic
6.5. 检查软件包真伪
6.6. 升级至下个稳定发行版
6.6.1. 建议进程
6.6.2. 处理升级后的问题
6.7. 保持系统在最新状态
6.8. 自动升级
6.8.1. 配置 dpkg
6.8.2. 配置 APT
6.8.3. 配置 debconf
6.8.4. 处理命令行接口
6.8.5. 神奇的组合
6.9. 搜索软件包
Debian 之所以如此受系统管理员欢迎,是因为项目提供的软件极易安装,整个系统的更新也极为简单。这一独特的优点主要得归功于 APT 程序,其特性在 Falcot 公司得到系统管理员们热情的研究。
是高级软件包管理器 的缩写。它的‘高级’之处在于对软件包的管理方法不同。APT并不是简单地独立评估每个包,而是将包看做一个整体系统,根据现有的和兼容的已有包找到最佳组合(包括依赖于这个软件包的其他包)。
APT需要一个”软件源列表“:文件/etc/apt/sources.list会列出发布 Debian 软件包不同的仓库(或软件源)。接下来APT会从每一个软件源导入所发布的软件包列表。这个过程是通过下载 Packages.xz或使用不同压缩方法的变体(比如Packages.gz或者.bz2) )文件(若是二进制包的仓库)和Sources.xz文件(若是软件包源的仓库),并分析这两个文件内容。如果文件的旧版本已经存在,APT仅下载更新的部分(参见:TIP 增量更新)。

6.1. 写入sources.list文件

6.1.1. 句法

/etc/apt/sources.list 文件中每个有效的代码行包括对源的描述,由三个被空格分开的部分组成。
第一个区域指示源的类型:
  • deb” 表示二进制软件包,
  • deb-src”表示源代码包。
The second field gives the base URL of the source (combined with the filenames present 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:// to indicate a source accessible from a web server, or with ftp:// for a source available on an FTP server. The URL can also start with cdrom: for CD-ROM/DVD-ROM/Blu-ray disc based installations, although this is less frequent, since network-based installation methods are more and more common.
最后这一区域的句法取决于仓库的结构。从最简单的例子开始,你可以很简单地描述一个软件源的子目录 (必须用到结尾处的斜线)(通常用 “./” 表示子目录不存在 - 这个软件源就位于给定的 URL上)。 不过一般来讲,仓库的结构类似于一个 Debian 的镜像, 包括很多分支,每一分支有很多组成部分。通常命名选定的分支(由 “codename” 来命名 - 参看附栏中的目录社区 Bruce Perens,一位有争议的领导者 或是由对应的 “suites” — stable, testing, unstable ),然后命名下面的组成部分(或分区)(从main, contribnon-free中选择) 来激活一个典型的 Debian 镜像。
cdrom 条目描述了你所有的CD/DVD光盘。 与其他条目不同,因为一个CD光盘需要插入光驱中,并且每次只能读一张,所以并不总是可用。因此这种仓库管理起来稍有不同,需要加在apt-cdrom 程序中,经常与add 参数一起执行。后者会要求驱动中插入光盘,并会浏览内容,寻找Packages 文件。这些文件会用于更新可用软件包的数据库(此过程由apt update 命令执行)。 自此, 如果某软件包需要光盘,APT 可发出要求插入光驱。

6.1.2. 给Stable 使用者的仓库

下面是一个标准的sources.list文件,它被用于 Stable 版本的 Debian 系统:

例 6.1. /etc/apt/sources.list 给 Debian Stable 使用者的文件

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

## Debian mirror

# Base repository
deb http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch main contrib non-free

# Stable updates
deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb-src http://deb.debian.org/debian stretch-updates main contrib non-free

# Stable backports
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free
This file lists all sources of packages associated with the Stretch version of Debian (the current Stable as of this writing). We opted to name “stretch” explicitly instead of using the corresponding “stable“ alias (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.
大多数软件包来源于“基础仓库”,它拥有所有的软件包,但极少更新(大概每两个月根据“点发布”更新)。其他仓库不完全(不包括所有软件包),不过可以支持更新(软件包是较新版本)。接下来的几章将会介绍这些仓库管理的目的和规则。
请注意,当你所需要的软件包版本存在于几个仓库中时,在文件sources.list中所列出的第一个会被使用。因此,非官方来源的包一般在此文件末尾处。
本节提到的稳定Stable 对于Oldstable 一样适用。后者只是同时维护的较旧Stable 版本。

6.1.2.1. 安全更新

安全更新一般不在 Debian 镜像通常所在的网络上,而是在security.debian.org(位于 Debian 系统管理员Debian System Administrators维护的小范围网络)。其上的文档包括为那些稳定版本准备的安全更新(由 Debian 安全团队和/或软件包维护者预备)。
服务器上也有针对测试版的安全更新。这类更新经常通过从非稳定版流入测试版,因此单独存在于服务器上的更新不常见。

6.1.2.2. 稳定更新

稳定更新对安全性不敏感,在下一个稳定版本点发布前,它还是很重要,需要推送给使用者。
这个仓库的典型例子包括修复在发布前无法修复的严重漏洞和后续更新引入的漏洞。根据紧急性,它还包含长期的软件包更新,比如spamassassin 的广告监测规则,clamav病毒库,或是各个时区的夏令时规则(tzdata)。
实际上,这个仓库是 计划-更新proposed-updates 的子库,是由稳定更新管理员小心选定的。

6.1.2.3. 计划更新

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

6.1.2.4. 向后移植到稳定版(Stable Backports)

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

6.1.3. 给测试/非稳定 版本用户的仓库

下面是一个标准 sources.list文件,用于系统运行 Debian 测试非稳定 版本:

例 6.2. Debian Testing/Unstable 用户的 /etc/apt/sources.list文件

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

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

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

# Security updates
deb http://security.debian.org/ stable/updates main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free
APT 通过sources.list 文件来从非稳定安装软件包。如果这不是你所需要的,用APT::Default-Release 设置(参见 第 6.2.3 节 “系统升级”)来指示 APT 从另一分布获取软件包(一般用 测试)。
应该纳入这些典藏库,即使一个也该这么做。测试版 用户将感谢管理者从 不稳定版 中挑选修改过的软件包,当 测试版 受到错误的干扰时。反过来说,被无预期错误干扰的 不稳定版 用户,可能降级至他们 (若以此工作) 使用的 测试版 软件包。
稳定版 的内容较有争议,但可接触被发展版移除的软件包。同时也确保取得尚未被修改的最新软件包。

6.1.3.1. 实验 仓库

实验性 典藏所的软件包是所有 Debian 镜射站的内容,包括因为品质关系尚未被纳入 不稳定版 的软件包 — 通常是发展中的软件版本或前置版 (alpha、beta、待发布…)。修改过的软件包多少有点问题,可送至此处。在高端用户的协助下,维护者努力找出该等问题。经过第一阶段后,把软件包移至 不稳定版,更多的用户以更详细的方式测试它。
不在乎系统崩盘并有能力自行修复的用户,就会取用 实验性 的软件包。用户导入此等软件包并测试其功能、检查是否满足其需求。这就是 Debian 的诉求,加入 APT 的 sources.list 内,并不表示该软件包可顺利使用,应加入这一个行:
deb http://deb.debian.org/debian experimental main contrib non-free

6.1.4. Using Alternate Mirrors

The sources.list examples in this chapter refer to package repositories hosted on deb.debian.og. 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 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.
Picky users who are not satisfied with the performance of deb.debian.org can try to find a better mirror in the official mirror list:
But when you don't know which mirror is best for you, this list is of not much use. Fortunately for you, Debian maintains DNS entries of the form ftp.country-code.debian.org (e.g. ftp.us.debian.org for the USA, ftp.fr.debian.org for France, etc.) which are covering many countries and which are pointing to one (or more) of the best mirrors available within that country.
As an alternative to deb.debian.org, there used to be httpredir.debian.org. This service would identify a mirror close to you (among the list of official mirrors, using GeoIP mainly) and would redirect APT's requests to that mirror. This service has been deprecated due to reliability concerns and now httpredir.debian.org provides the same CDN-based service as deb.debian.org.

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

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

6.1.6. Debian 软件包 缓存 代理

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