与Chef Solo一起运行`apt-get upgrade`

我正在使用Chef Solo为Ubuntu 12.04提供一个基于Opscode的“Bento”盒子的Vagrant虚拟机。 当它完成configuration和我第一次SSH时,MOTD告诉我有包和安全更新。 然后,我手动运行sudo apt-get upgrade ,这会删除后续login中的消息。 厨师有没有办法让这个步骤自动化? “易”食谱似乎并没有处理这一点。 我所有的Googlesearch都只能findapt-get update东西,而不是apt-get upgrade 。 我只能在Chef配方中执行apt-get命令,但在升级过程中,在粉红色屏幕上有一个伪GUI,我必须select驱动器进行安装(我认为这叫做GRUB,我是新的到Ubuntu),我不知道这部分如何自动与厨师。

我刚刚遇到了这个确切的问题,自己与厨师+stream浪汉,发现以下工作对我来说:

 sudo dpkg-reconfigure -plow grub-pc 

这允许你重新configurationgrub-pc并select你想要安装grub的设备(如果有的话)。 在此处将设备设置为默认设置应允许包括grub在内的升级不会提示进行设备select。 在这一点上,你可以创build一个新的stream浪者箱子,并使用它作为默认值。

要么

要运行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只覆盖你没有修改过的configuration文件
  • Dpkg::Options::="--force-confold"确保当前configuration文件不被覆盖。 新的configuration文件使用.dpkg-dist后缀创build。

添加“-y”将超过提示。

 sudo apt-get upgrade -y 

你应该在厨师跑之前这样做,因为厨师可能已经在apt数据库中caching了包版本。

据jtimberman自己,你不应该自动运行apt-get升级。

opscode推荐的升级方法是使用软件包资源逐个打包。

 package "php5-curl" do action :upgrade end 

有关更多详细信息,请阅读Chef中的不要自动运行apt-get upgrade