Product SiteDocumentation Site

6.9. 自动升级

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

6.9.1. 配置 dpkg

As we have already mentioned (see sidebar 更进一步 避免配置文件问题), dpkg can be instructed not to ask for confirmation when replacing a configuration file (with the --force-confdef --force-confold options). Interactions can, however, have three other sources: some come from APT itself, some are handled by debconf, and some happen on the command line due to package configuration scripts (sometimes handled by ucf).

6.9.2. 配置 APT

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

6.9.3. 配置 debconf

debconf 需要较详细的说明。此程序原本的设计就是控制给用户看到的相关性及数量,以及显示的方法。问题需有最小的优先权;拥有最小优先权以上的问题才显示。debconf 缺省的答案 (由软件包维护者设置) 会略过。
其他的相关配置元素是前端用到的接口。若选择 noninteractive,就停用所有的用户交互。若软件包试图显示信息性说明,则以电子邮件送给管理者。
配置 debconf 时,用到 dpkg-reconfigure 工具,它是来自 debconf 软件包;相关的命令是 dpkg-reconfigure debconf。配置值可能是在需要时暂时取代的环境变量 (例如,DEBIAN_FRONTEND 控制接口,如同在 debconf(7) 手册页面所述)。

6.9.4. 处理命令行接口

最后一个交互来源,以及最难摆脱的,是 dpkg 运行的配置脚本。不幸的是,没有标准的解法且没有较佳的答案。
通常的做法是,把标准的输入由空白内容的 /dev/null 文件转向给 命令 </dev/null,或由新的键入字符串取代。以上的方法都不是 100 % 可靠,但它们可以转至缺省的答案,因为大部分的脚本已考量到无默认值的答案。

6.9.5. 神奇的组合

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

例 6.5. 无交互升级脚本

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