【问题标题】:How to properly install a repository with Puppet如何使用 Puppet 正确安装存储库
【发布时间】:2019-02-06 18:35:27
【问题描述】:

我正在努力使用 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 代理?

【问题讨论】:

  • 对谁投反对票,你能解释一下原因吗?
  • 不是我的反对票,但我看到将其迁移到超级用户的投票结果很接近,所以可能谁也投票赞成。我觉得这应该保持开放,尽管由于提供了高质量的答案,即使它可能与 SO 无关。
  • 谢谢解释,下次一定要用超级用户。
  • @MattSchuchard 即使问题已关闭,它也会与现有内容保持在线。接受的答案防止它被删除为放弃。虽然可以由受信任的用户手动删除,但删除投票通常保留给有问题的内容,此处并非如此。
  • @AndreasKralj,一般来说,在这里问你的 Puppet 问题,但不要添加与你的问题没有真正关系的标签。然而,这个问题是临界的,因为根本原因在于 Linux 系统。当然,对于知道根本原因的人来说,这样说更容易。我投了赞成票。

标签: linux centos repository puppet zabbix


【解决方案1】:

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

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

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

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

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

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

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

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

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

node 'puppet-agent' {
  include importRepos

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

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

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2013-01-07
    相关资源
    最近更新 更多