在Chef中进行apt-get update和apt-get升级

Mar*_*tuc 17 linux ubuntu apt-get chef-infra vagrant

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

apt-get -y update
apt-get -y upgrade
Run Code Online (Sandbox Code Playgroud)

无法从apt食谱中找到答案.

jti*_*man 44

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

apt-get upgrade出于某些原因,我们通常不建议用户在配方中使用" ".

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

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

package "nginx" do
  action :upgrade
end
Run Code Online (Sandbox Code Playgroud)

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

resources("package[nginx]").action(:upgrade)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 每个人都说这个,但是当我包含apt cookbook并将其称为默认配方时,我无法更新存储库列表.更糟糕的是,如果合并到我的一个配方中的另一个配方依赖于apt,那么通过登录节点似乎没有可能缺少手动更新的方法.我希望在你被迫使用apt cookbook的情况下,如何让apt-get存储库更新,这是一个明确的解释. (6认同)