![Linux/CentOS 上的 Puppet 包安装](https://linux22.com/image/798027/Linux%2FCentOS%20%E4%B8%8A%E7%9A%84%20Puppet%20%E5%8C%85%E5%AE%89%E8%A3%85.png)
我是 Puppet 的新手 - 我一直在尝试学习基础知识。大多数示例(除了最基本的那些)都在木偶页面对我来说不起作用 - 缺少某些依赖项或未找到包。我没有看到解释出错原因的日志(即使我运行--test
或--verbose
选项)
有人可以解释一下 puppet 如何从标题安装任何给定的包吗(例如从下面的清单开始:
class httpd { package { 'httpd': ensure => installed, } }
这里 - 从 'httpd' 开始 - 当我们在这个清单上运行 puppet apply 时会发生什么?它在哪里找到安装程序(即存储库在哪里 - 它在哪里配置?)
具体来说,我收到了这个错误:
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 执行。