第 9 章 使您的 Debian 系统保持最新状态

# 第 9 章 使您的 Debian 系统保持最新状态

Debian 的目标之一是提供一致的升级路径和安全的升级过程。我们尽力让用户可以平滑地升级到新版本。如果升级过程有一些重要的注意事项，软件包会提示用户，并且常常会对可能出现的问题提供解决方案。

您也应该阅读发行说明，里面描述了特定的升级过程的细节。发行说明可以在 Debian 网站的 https://www.debian.org/releases/stable/releasenotes 阅读，也可以在 Debian CD、DVD 和蓝光光碟中找到。

## 9.1. 如何使 Debian 系统保持最新？

最直接的方法是进入 Debian 档案站点，在各种目录中找到需要的文件，下载它，最后用 `dpkg` 进行安装。注意 `dpkg` 会原地安装升级文件，即使系统正在运行。有时候，一个软件包的新版本会依赖另外一个软件包的新版本，这种情况下，安装就会失败，除非已经安装了所依赖的那个软件包。

很多人觉得这种方式太耗时间了，因为 Debian 更新得实在太快——每周一般有数十个或更多的软件包被上传。新版本发布前这个数字可能更大。为了处理大量更新的软件包，许多人倾向于使用更加自动化的方法。有多个不同的软件包可以实现这一目的：

### 9.1.1. aptitude

aptitude 是 Debian 系统推荐的软件包管理器，在第 8.1.3 节 “aptitude”中有描述。

在使用 aptitude 进行升级之前，您需要编辑 `/etc/apt/sources.list` 以完成设置过程。如果您希望升级到 Debian 的最新稳定版本，您可以使用类似如下的软件源：

    http://deb.debian.org/debian stable main contrib

The mirror https://deb.debian.org/ is backed by a content-delivery network and requests to it will be directed to the closest instance to you. If you have a faster Debian mirror close to you, you can replace deb.debian.org with that one. See the mirror list at https://www.debian.org/mirror/list for more information.

或者您也可以使用 httpredir.debian.org 重定向服务，它的设计目标是解决选择 Debian 镜像的难题。它使用用户的地理位置信息和其他信息，以选择下载文件的最佳镜像。要使用它，请使用类似如下的软件源：

    http://httpredir.debian.org/debian stable main contrib

更多信息请阅读 sources.list(5) 手册页。

要从命令行升级系统，请运行

    aptitude update

然后运行

    aptitude full-upgrade

回答可能出现的问题，然后您的系统就会被升级。

注意 aptitude 不是进行 Debian GNU/Linux 大版本升级的推荐工具。这种情况请使用 apt-get。进行大版本升级，请先阅读发行说明。该文档详细描述了从上一个大版本升级的推荐步骤，以及升级前需要考虑的已知问题。

更多详细信息，请阅读 aptitude(8) 手册页，以及 `/usr/share/aptitude/README` 文件。

### 9.1.2. apt-get 和 apt-cdrom

aptitude 的一个替代品是 apt-get，它是基于 APT 的命令行工具（之前在第 8.1.2 节 “APT”介绍过）。

apt-get 是基于 APT 的命令行软件包管理工具，提供了安装和升级软件包的简单而安全的方式。

要使用 apt-get，请编辑 `/etc/apt/sources.list` 文件完成设置，就像第 9.1.1 节 “aptitude”中一样。

然后执行

    apt-get update

然后运行

    apt-get dist-upgrade

回答任何可能出现的问题，然后您的系统就会被升级。也请阅读 apt-get(8) 手册页，以及第 8.1.2 节 “APT”。

如果您希望使用 CD/DVD/BD 来安装软件包，您可以使用 apt-cdrom。更多详情，请阅读发行说明中的“从光学介质中添加 APT 源”一节。

请注意，当您获取和安装软件包时，在 /var 目录中可能会保留这些软件包。为了防止您的分区空间不足，记得使用 `apt-get clean` 和 `apt-get autoclean` 删除多余的文件，或者把它们移动到其他地方（提示：使用 `apt-move`）。

## 9.2. 必须进入单用户模式才能升级软件包吗？

不是。即使是在正在运行的系统中，软件包也可以原地升级。Debian 有一个 `start-stop-daemon` 程序，在软件包升级时，如有必要，会调用它来停止和重启正在运行的进程。

## 9.3. 我需要在磁盘上保留所有的 .deb 档案文件吗？

不需要。如果您已经下载了这些文件到您的磁盘上，那么在您安装完软件包后，您就可以从系统中删除这些文件，例如，可以执行 `aptitude clean`。

## 9.4. 我应该如何保存关于安装了哪些软件包的日志？我想知道什么时候进行了安装和卸载，以及安装和卸载了哪些软件包！

dpkg 的 `--log` 选项使 dpkg 记录软件包的状态改变和动作。它既记录对 dpkg 的调用（例如

    2005-12-30 18:10:33 install hello 1.3.18 2.1.1-4

），也记录结果（例如

    2005-12-30 18:10:35 status installed hello 2.1.1-4

）。如果您想记录所有的 dpkg 调用（包括来自前端，如 aptitude 的调用），您可以将

    log /var/log/dpkg.log

添加到您的 `/etc/dpkg/dpkg.cfg` 文件中。请确保配置了日志文件的周期性滚动。如果您使用 logrotate，您可以创建 `/etc/logrotate.d/dpkg` 文件，内容为

    /var/log/dpkg {
      missingok
      notifempty
    }

关于 dpkg 日志的更多信息可以在 dpkg(1) 手册页中找到。

aptitude 会将它打算进行的软件包安装、卸载和升级操作记录到 `/var/log/aptitude` 中。注意这些操作的结果不会被记录到该文件！

记录您的操作的另一种方式是在 script(1) 程序中进行您的软件包管理会话。

## 9.5. 可以自动升级系统吗？

可以。您可以使用 cron-apt；这一工具使用 cron 任务定期升级系统。它默认只更新软件包列表并下载新的软件包，但不安装它们。

注意：不建议在 testing 或 unstable 系统上配置软件包的自动升级，因为有可能出现意料之外的行为，或者在不通知您的情况下卸载软件包。

## 9.6. 我有多台机器；我怎样才能只下载一次更新？

如果您的网络上有多台 Debian 机器，您可以使用 apt-cacher 确保您所有的 Debian 系统处于最新状态。

apt-cacher 能减少对 Debian 镜像站点的带宽需求，原理是从后端限制 Packages、Releases 和 Sources 文件的更新频率，且任何文件只下载一次，不管实际向代理请求了几次。apt-cacher 会基于经过代理的请求自动构建一个 Debian HTTP 镜像。

当然，如果您已经在使用标准的缓存代理，且您的所有系统都已经配置好使用它，您也能得到一样的结果。

第 8 章 Debian 软件包管理工具 |  | 第 10 章 Debian 和内核