Linux/CentOS 上的 Puppet 包安装

Linux/CentOS 上的 Puppet 包安装

我是 Puppet 的新手 - 我一直在尝试学习基础知识。大多数示例(除了最基本的那些)都在木偶页面对我来说不起作用 - 缺少某些依赖项或未找到包。我没有看到解释出错原因的日志(即使我运行--test--verbose选项)

  1. 有人可以解释一下 puppet 如何从标题安装任何给定的包吗(例如从下面的清单开始:

    class httpd {
          package { 'httpd':
               ensure => installed,
          }
    }
    

    这里 - 从 'httpd' 开始 - 当我们在这个清单上运行 puppet apply 时会发生什么?它在哪里找到安装程序(即存储库在哪里 - 它在哪里配置?)

  2. 具体来说,我收到了这个错误:

    err: /Stage[main]/Ntp/Package[httpd]/ensure: change from absent to present failed: Execution of '/usr/bin/yum -d 0 -e 0 -y install httpd' returned 1: Error: failure: repodata/filelists.xml.gz from base: [Errno 256] No more mirrors to try.
    You could try using --skip-broken to work around the problem
    You could try running: package-cleanup --problems
                           package-cleanup --dupes
                           rpm -Va --nofiles --nodigest
    

我怎样才能解决这个问题 ?

答案1

它正在尝试运行 yum 来安装 httpd

 /usr/bin/yum -d 0 -e 0 -y install httpd

尝试以 root 身份运行,但我确信它会失败,所以尝试

 /usr/bin/yum clean all
 /usr/bin/yum -d 0 -e 0 -y install httpd

如果这不起作用,则您的 yum 存储库无法正常工作,因此您必须修复该文件。可能

/etc/yum.repos.d

答案2

虽然 Mike 的回答确实解决了问题 - 但我会通过 Puppet 做类似的事情。

例如,作为第一步,我会在安装任何包之前添加以下代码

exec {'yum-clean-all':
  command =>  'yum clean all',
  path    =>  '/usr/bin',
  user    =>  'root',
  before  =>  Package[httpd],
}

类似地,任何在安装包之前需要执行的操作都应首先通过 puppet 执行。

相关内容