如果 Chef 中的 package "nginx"
被翻译成 Ubuntu 节点上的 apt-get install nginx
,那么可以在 Chef 配方中编写的内容将被翻译成:
apt-get -y update
apt-get -y upgrade
无法从 apt
cookbook 中找出答案.
最佳答案
The Opscode "apt" cookbook的默认配方将运行 apt-get update
以确保更新包缓存。我们建议将其放在节点运行列表的早期,以便稍后可以安装正确版本的包。
出于几个原因,我们通常不建议用户在配方中使用“apt-get upgrade
”。
apt-get
可能会升级具有配置冲突或其他问题的软件包,如果不再次运行命令或手动运行其他 apt/dpkg 命令就无法解决这些问题。- 系统上所有软件包的自动升级可能会对正在运行的系统产生意想不到的副作用(极端情况很多而且可能很棘手,所以我无法涵盖所有情况)。
相反,对应始终更新到最新版本的包使用“升级”操作。
package "nginx" do
action :upgrade
end
如果您正在重用定义 Recipe 的 Recipe ,您可以编写一个修改现有资源操作的 Recipe ,如下所示:
resources("package[nginx]").action(:upgrade)
配方中的#resources
方法将在资源集合中查找指定的资源(package nginx)。然后发送带有参数 :upgrade
的 #action
方法将告诉 Chef 该操作应该是升级。
编辑 更新:选择以这种方式自动升级的包时一定要小心。包中的上游更改可能会对系统造成不利影响。如果此类软件包在安装后脚本期间重新启动其管理的服务,则尤其如此。了解您的基础架构,如果有疑问,请运行您自己的包存储库,其中包含应用程序堆栈所需的关键包。
关于linux - Chef 中的 apt-get update 和 apt-get upgrade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080876/