Ruby 在 CentOS 6 上使用 Puppet 部署模块时出错

Ruby error when deploying a module with Puppet on CentOS 6

我已经在机器上安装了 Puppet master 和 agent 运行 CentOS 6

一切顺利,直到我尝试部署一个简单的示例模块:我收到一个错误,在图片上有解释。

尝试编辑文件没有帮助,实际上每次都从存储库更新文件

我尝试了 运行 一个导致相同错误的不同模块

错误是因为 Ruby 代码的格式不适用于旧的 Ruby。 CentOS 6 upstream Ruby 软件包是 1.8.7,是一个超级老的 Ruby 版本,已经停产 3 years since 2014

为了解决这个问题,Puppet 开始打包 Ruby 和其他依赖项作为 all-in-one package since Puppet 4 的一部分。这意味着当涉及到 EOL Ruby、OpenSSL 和任何其他依赖项时,没有依赖地狱:它们都作为单个 RPM 捆绑和支持,而不会影响系统包。

这也意味着您不会破坏任何需要不同系统的应用程序 Ruby,并且通常使使用 Puppet 变得更加容易。

加上CentOS中Puppet的版本是3.X,which is also EOL. You should upgrade to Puppet 4. Here's a handy script that will install the Puppet 4 agent package on CentOS 6: https://github.com/petems/puppet-install-shell

如果您出于某种原因只能使用 Puppet 3,则有一些不太可取的解决方案:

  • 为 CentOS 6 下载新的 Ruby RPM,(例如来自 this Github repo) or a CloudPackage.io repo (such as this one I made for CentOS 6 Ruby packages https://packagecloud.io/petems/ruby2/install
    • 缺点:这些 RPM 不受官方支持,可能会出现意外问题
  • 分叉模块以更改 Ruby 代码
    • 缺点:这是一个很大的维护成本,每次上游模块发生更新时都必须这样做。