linux - 如何使用 Puppet 正确安装存储库

标签 linux centos repository puppet zabbix

我正在努力使用 Puppet 安装存储库,特别是 zabbix 存储库。我从 here 获得了 CentOS 7 的 zabbix 存储库,并且正在使用以下内容:

http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

我尝试使用以下 Puppet 代码将其安装到我的节点上,但它似乎不起作用:

node 'puppet-agent' {
    include importRepos
    package { 'php':
        ensure => "installed",
    }
    package { 'zabbix-agent':
        ensure => "installed", 
    }

}

class importRepos {
    yumrepo { "zabbix":
        baseurl => "http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm",
        descr => "Zabbix repo to install Zabbix client on CentOS 7",
        enabled => 1,
        gpgcheck => 1
        }
}

我得到的错误是:

...
Execution of '/usr/bin/yum -d 0 -e 0 -y install zabbix-agent' returned 1: Delta RPMs disabled because /usr/bin/applydeltarpm not installed.


Error downloading packages:
  zabbix-agent-3.4.15-1.el7.x86_64: [Errno 256] No more mirrors to try.

我尝试安装 deltarpm 包,但现在出现此错误:

...
Error downloading packages:
  zabbix-agent-3.4.15-1.el7.x86_64: [Errno 256] No more mirrors to try.
Error: /Stage[main]/Main/Node[puppet-agent]/Package[zabbix-agent]/ensure: change from purged to present failed: Execution of '/usr/bin/yum -d 0 -e 0 -y install zabbix-agent' returned 1: No Presto metadata available for zabbix


Error downloading packages:
  zabbix-agent-3.4.15-1.el7.x86_64: [Errno 256] No more mirrors to try.

然后我做了一个 yum clean all 并再次尝试,现在我得到这个错误:

Error: Execution of '/usr/bin/yum -d 0 -e 0 -y install zabbix-agent' returned 1: One of the configured repositories failed (Zabbix repo to install Zabbix client on CentOS 7),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

它建议我禁用 repo,所以我不确定我犯了什么错误,但出于某种原因,根据我的配置,repo 似乎无效。有谁知道我如何获得zabbix repo 在 Puppet 中工作,以便我可以安装 zabbix agent?

最佳答案

您必须始终牢记,Puppet 的 DSL 专注于要管理的机器状态细节,而不是更改机器状态的细节。这会帮助您避免误解 the docs for the Yumrepo resource type .

具体来说,该类型的 baseurl 属性直接对应于同名的每个存储库 Yum 配置参数。该参数指定存储库的基本 URL (在您的情况下可能是 http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/)不是要安装以获取 repo 定义的包的名称。

如果您愿意,您可以完全不使用包,而是通过 Yumrepo 资源严格配置存储库。但是,如果您想至少部分地通过包来管理它,那么您就会遇到先有鸡还是先有蛋的问题:您从哪里获得包以便为包含包的 repo 创建 repo 定义?有两种主要选择:

  • 通过手动安装软件包,在 Puppet 范围之外执行存储库的初始配置,作为供应过程的一部分。此后,您可以通过 Puppet 调整存储库配置并更新存储库发布包。

  • 将存储库发布包的副本放入您自己的本地包存储库(您有一个,不是吗?)。根据需要配置该存储库,允许 Puppet 从那里安装存储库发布包。

无论哪种方式,如果您通过 Puppet 管理发布包和 repo 详细信息,那么该部分看起来像这样:

class importRepos {
  package { 'zabbix-release' ensure => 'latest' }

  yumrepo { "zabbix":
    # Most repo properties probably should not be managed
    enabled  => 1,
  }
}

完成之后,您可能还需要注意类和资源的排序。这是一个太大的话题,无法在一个 SO 答案中涵盖,但对于您的特定情况,鉴于您直接在节点 block 中而不是通过类声明包,我的建议是在相关包的属性之间声明适当的依赖关系:

node 'puppet-agent' {
  include importRepos

  package { 'php':
    ensure => "installed",
  }

  package { 'zabbix-agent':
    ensure  => "installed",
    require => Yumrepo['zabbix'],  # <--- this
  }
}

关于linux - 如何使用 Puppet 正确安装存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560364/

相关文章:

centos - docker exec -it 返回 "cannot enable tty mode on non tty input"

c - rshd.c 源代码中缺少 pam_appl.h 和 pam_misc.h

c# - 如何在 C# 中抽象实体数据上下文

c++ - 将 Win 代码移植到 Linux 时出错

linux - Bash 将值加载到文件中的更直接方式

nginx - 将 Google Analytics 跟踪代码段注入(inject) Nginx 反向代理背后的网站

java - Spring 。异常翻译如何工作?

rest - 通过 CLI 或 Rest 添加 Artifactory 存储库

c - 非法内存写入导致 recv() 返回零

c++ - 盈透证券 C++ POS API 示例?