Product SiteDocumentation Site

6.9. 自动升级

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

6.9.1. 配置 dpkg

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

6.9.2. 配置 APT

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

6.9.3. 配置 debconf

debconf 需要较详细的说明。此程序原本的设计就是控制给用户看到的相关性及数量,以及显示的方法。问题需有最小的优先权;拥有最小优先权以上的问题才显示。debconf 缺省的答案 (由软件包维护者设置) 会略过。
The other relevant configuration element is the interface used by the frontend. If you choose noninteractive out of the choices, all user interaction is disabled. If a package tries to display an informative note, it will be sent to the administrator by email.
配置 debconf 时,用到 dpkg-reconfigure 工具,它是来自 debconf 软件包;相关的命令是 dpkg-reconfigure debconf。配置值可能是在需要时暂时取代的环境变量 (例如,DEBIAN_FRONTEND 控制接口,如同在 debconf(7) 手册页面所述)。

6.9.4. 处理命令行接口

最后一个交互来源,以及最难摆脱的,是 dpkg 运行的配置脚本。不幸的是,没有标准的解法且没有较佳的答案。
通常的做法是,把标准的输入由空白内容的 /dev/null 文件转向给 command </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