我正在使用 Chef Solo 为 Ubuntu 12.04 配置基于 Opscode 的“Bento”盒的 Vagrant VM。配置完成后,我第一次通过 SSH 登录,MOTD 告诉我有软件包和安全更新。然后我手动运行sudo apt-get upgrade
,这样后续登录时就会删除该消息。有没有办法用 Chef 自动执行此步骤?“apt”食谱似乎无法处理这个问题。我所有的 Google 搜索都只找到关于apt-get update
但没有的内容apt-get upgrade
。我可以在我的 Chef 配方中执行 apt-get 命令,但在升级过程中,粉红色屏幕上有一个伪 GUI,我必须在其中选择要安装的驱动器(我认为这叫做 GRUB,我是 Ubuntu 新手),我不确定如何使用 Chef 自动执行此部分。
答案1
我刚刚在使用 chef+vagrant 时遇到了这个确切的问题,并发现以下方法对我有用:
sudo dpkg-reconfigure -plow grub-pc
这允许您重新配置 grub-pc 并选择要安装 grub 的设备(如果有)。在此处将设备设置为默认设备应允许包含 grub 的升级不提示选择设备。此时,您可以创建一个新的 vagrant box 并将其用作默认设备。
或者
要运行 apt-get upgrade/dist-upgrade 而不被提示,你可以使用:
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
DEBIAN_FRONTEND=noninteractive
对任何提示使用默认答案。Dpkg::Options::="--force-confdef"
确保 dpkg 仅覆盖你未修改的配置文件Dpkg::Options::="--force-confold"
确保当前配置文件不会被覆盖。新创建的配置文件带有 .dpkg-dist 后缀。
答案2
添加“-y”将会绕过提示。
sudo apt-get upgrade -y
您应该在 chef 运行之前执行此操作,因为 chef 可能已在 apt 数据库中缓存了包版本。
答案3
根据 jtimberman 自己的说法,你不应该自动运行 apt-get upgrade。
opscode 推荐的升级方式是使用包资源对每个包进行升级。
package "php5-curl" do
action :upgrade
end
欲了解更多详情,请阅读不要在 Chef 中自动运行 apt-get upgrade