使用 Chef Solo 运行“apt-get upgrade”

使用 Chef Solo 运行“apt-get upgrade”

我正在使用 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

相关内容