18

如果package "nginx"在 Chef 中被翻译成apt-get install nginxUbuntu 节点,那么可以在 Chef 配方中写入的内容将翻译成:

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

无法从apt食谱中弄清楚。

4

2 回答 2

44

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

我们通常不建议用户apt-get upgrade在食谱中使用“”,原因有几个。

  1. apt-get如果不再次运行该命令或手动运行其他 apt/dpkg 命令,可能会升级具有冲突配置或其他无法解决的问题的软件包。
  2. 系统上所有软件包的自动升级可能会对正在运行的系统产生意想不到的副作用(边缘情况很多而且可能很棘手,所以我不能全部介绍)。

相反,对应始终更新到最新版本的软件包使用“升级”操作。

package "nginx" do
  action :upgrade
end

如果您正在重用定义说明书的说明书,则可以编写修改现有资源操作的配方,如下所示:

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

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

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

于 2013-02-26T15:51:22.217 回答
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

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

于 2016-02-17T18:22:27.367 回答