6.8. 自动升级

Falcot Corp 虽有多部电脑但人力有限,其管理者试图尽可能地自动升级。必须在无人为介入情况下处理升级事宜。

6.8.1. 配置 dpkg

如稍早提过的 (见专栏 更进一步 避免配置文件问题),dpkg 可在不必确认的情况下取代原来的配置档 (以 --force-confdef --force-confold 选项运行该功能)。然而,有三个交互来源:有些来自 APT 自身、有些由 debconf 处理、还有的是由软件包配置脚本运行。

6.8.2. 配置 APT

APT 的例子很简单:-y 选项 (或 --assume-yes) 告诉 APT 面对所有的问题时,答案都是 “yes”。

6.8.3. 配置 debconf

debconf 需要较详细的说明。此程序原本的设计就是控制给用户看到的相关性及数量,以及显示的方法。问题需有最小的优先权;拥有最小优先权以上的问题才显示。debconf 缺省的答案 (由软件包维护者设置) 会略过。

其他的相关配置元素是前端用到的接口。若选择 noninteractive,就停用所有的用户交互。若软件包试图显示信息性说明,则以电子邮件送给管理者。

配置 debconf 时,用到 dpkg-reconfigure 工具,它是来自 debconf 软件包;相关的命令是 dpkg-reconfigure debconf。配置值可能是在需要时暂时取代的环境变量 (例如,DEBIAN_FRONTEND 控制接口,如同在 debconf(7) 手册页面所述)。

6.8.4. 处理命令行接口

最后一个交互来源,以及最难摆脱的,是 dpkg 运行的配置脚本。不幸的是,没有标准的解法且没有较佳的答案。

通常的做法是,把标准的输入由空白内容的 /dev/null 文件转向给 *命令* </dev/null,或由新的键入字符串取代。以上的方法都不是 100 % 可靠,但它们可以转至缺省的答案,因为大部分的脚本已考量到无默认值的答案。

6.8.5. 神奇的组合

把前述的元素组合起来,就可能设计出一个可处理自动升级的小而可靠脚本。

例 6.4. 无交互升级脚本

  1. export DEBIAN_FRONTEND=noninteractive
  2. yes '' | apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" dist-upgrade

实务 Falcot Corp 个案

Falcot 公司采用异质系统电脑,运行多种功能。管理者必须为每部电脑挑选最适合的解决方案。

事实上,安装 Jessie 的服务器脑采用上述的 “奇特组合”,并且自动更新。只有最挑剔的服务器 (如防火墙) 才以 apticron 设置,所以总是在管理员的监控下更新。

办公室的桌机也可安装 Jessie,但加装 gnome-packagekit,所以用户可以自行更新。没有用户介入的更新,电脑可能出现无预期的结果,可能让用户摸不清头绪。

在实验室里,有些安装 测试版 — 就是使用最新版的软件 — 的电脑也不会自动更新。管理者必须配置 APT 才能更新它们;决定更新时 (手动),列出重新加载软件包清单并避免下载繁琐的部件,管理者就能专注在真正有用的部件。