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. 无交互升级脚本
- export DEBIAN_FRONTEND=noninteractive
- 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 才能更新它们;决定更新时 (手动),列出重新加载软件包清单并避免下载繁琐的部件,管理者就能专注在真正有用的部件。