Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在Chef中获得apt更新和apt升级_Linux_Ubuntu_Chef Infra_Vagrant_Apt Get - Fatal编程技术网

Linux 在Chef中获得apt更新和apt升级

Linux 在Chef中获得apt更新和apt升级,linux,ubuntu,chef-infra,vagrant,apt-get,Linux,Ubuntu,Chef Infra,Vagrant,Apt Get,如果Chef中的包“nginx”被翻译成Ubuntu节点上的apt get install nginx,那么Chef菜谱中可以写些什么来翻译成: apt-get -y update apt-get -y upgrade 无法从中找出。的默认配方将运行apt get update,以确保包缓存已更新。我们建议尽早将其放在节点的运行列表中,以便以后可以使用正确的版本安装软件包 出于几个原因,我们通常不建议用户在配方中使用“apt get upgrade” apt get可能会升级配置冲突或其他问题

如果Chef中的
包“nginx”
被翻译成Ubuntu节点上的
apt get install nginx
,那么Chef菜谱中可以写些什么来翻译成:

apt-get -y update
apt-get -y upgrade
无法从中找出。

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

出于几个原因,我们通常不建议用户在配方中使用“
apt get upgrade

  • apt get
    可能会升级配置冲突或其他问题的软件包,这些问题在不再次运行命令或手动运行其他apt/dpkg命令的情况下无法解决
  • 系统上所有软件包的自动升级可能会对正在运行的系统产生意外的副作用(边缘案例很多,可能很棘手,所以我不能全部涵盖)
  • 相反,对应该始终更新到最新版本的包使用“升级”操作

    package "nginx" do
      action :upgrade
    end
    
    如果您正在重用定义烹饪书的烹饪书,您可以编写一个配方来修改现有资源的操作,如下所示:

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


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

    Apt chef配方不会随着每次chef运行而更新。控制这一点的属性称为
    定期更新\u min\u delay
    ,并设置为86400(该属性应称为秒延迟)。如果以下文件存在且超过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
    

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

    这会有帮助吗?我想是的,但我对是否有更轻松的解决方案感兴趣。每个人都这么说,但当我包括apt cookbook并称之为默认配方时,我无法更新存储库列表。更糟糕的是,如果我的一个配方中包含的另一个配方依赖于apt,那么除了通过登录节点手动更新之外,似乎没有其他可能的方法。我希望有一个明确的解释,说明如何在您被迫使用apt cookbook的情况下更新apt get存储库。apt似乎只会每24小时更新一次。此临时文件控制该过程/var/lib/apt/periodic/update成功戳