Chef中的apt-get update和apt-get升级

时间:2013-02-26 03:30:44

标签: linux ubuntu chef vagrant apt-get

如果Chef中的package "nginx"被转换为Ubuntu节点上的apt-get install nginx,那么可以在Chef配方中写入哪些内容将转换为:

apt-get -y update
apt-get -y upgrade

无法从apt cookbook中找到答案。

2 个答案:

答案 0 :(得分:44)

The Opscode "apt" cookbook的默认配方将运行apt-get update以确保更新包缓存。我们建议您尽早将其放在节点的运行列表中,以便稍后可以使用正确的版本安装软件包。

由于一些原因,我们通常不建议用户在食谱中使用“apt-get upgrade”。

  1. apt-get可以升级具有冲突配置的程序包或其他无法在不再运行命令或手动运行其他apt / dpkg命令时无法解决的问题。
  2. 系统上所有软件包的自动升级可能会对正在运行的系统产生意想不到的副作用(边缘情况很多,可能很棘手,所以我无法全部覆盖它们。)
  3. 相反,对应始终更新到最新版本的软件包使用“升级”操作。

    package "nginx" do
      action :upgrade
    end
    

    如果您正在重复使用定义食谱的食谱,您可以编写修改现有资源操作的食谱,如下所示:

    resources("package[nginx]").action(:upgrade)
    

    配方中的#resources方法将在资源集合中查找指定的资源(包nginx)。然后使用参数#action发送:upgrade方法将告诉Chef该操作应该是升级。

    编辑 更新:选择以这种方式自动升级的软件包时要小心。包中的上游变化可能对系统造成不利影响。如果此类程序包重新启动它在安装后脚本期间管理的服务,则尤其如此。了解您的基础架构,如果有疑问,请运行您自己的软件包存储库,其中包含应用程序堆栈所需的关键软件包。

答案 1 :(得分:0)

每位厨师都不会更新Apt厨师食谱。控制此属性的属性称为periodic_update_min_delay,并设置为86400(该属性应称为sec_delay)。如果以下文件存在且超过24小时,则apt将更新缓存。

/var/lib/apt/periodic/update-success-stamp

apt配方(default.rb)似乎还包含一个强制更新配方可以调用的指令。

# For other recipes to call to force an update
execute 'apt-get update' do

如果您正在这样做,那么您将需要一个not_if来避免经常运行它,此时您也可以自己手动调用它。我厌倦了这个,最后在安装之前在一节中调用了apt-get update。

execute "apt-get-update" do
  command "apt-get update"
end

我怀疑安全更新的长期解决方案是将更新延迟设置为几个小时。