linux - Chef 中的 apt-get update 和 apt-get upgrade

标签 linux ubuntu chef-infra vagrant apt-get

如果 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”。

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

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

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/

相关文章:

linux - Libcurl 未更新

在 ubuntu 小查询上设置 SVN 服务器

Ubuntu 默认语言 midnight commander

linux - 在内核 v3.11.10-20 中未获取entry.S 文件

c - 获取LAN ip并打印

linux - Chef 厨房无法从 Windows 10 集成 bash 工作

ruby - 如何在 InSpec 中访问 Chef data_bags

chef-infra - 向节点添加角色不起作用

linux - 来自 TP-LINK 路由器的 CSI(信道状态信息)

c++ - 是否可以在 C++ 中禁用 stderr?