【问题标题】:Proper Chef way to use Poise installed Python/Ruby使用 Poise 安装 Python/Ruby 的正确 Chef 方法
【发布时间】:2018-06-05 09:58:46
【问题描述】:

我们正在尝试使用 Poise 在我们的 Centos7 服务器上管理 PythonRuby 的运行时。据我了解,这适用于其他食谱,但我无法弄清楚将二进制文件链接到标准 bin 位置(/usr/bin/ 等)的“正确”方法是什么。到目前为止,作为标准流程的一部分,我一直无法找到一种方法来做到这一点——只能通过四处寻找它们的安装位置,然后将这些链接作为一个单独的步骤添加到配方中——这似乎是一个主要的破解。

换句话说,在包含一些脚本的配方中添加以下内容,这些脚本被复制到需要 Python 3 的服务器,看起来就像安装了 Python 3:

python_runtime '3'

但脚本(无法更改)永远不会知道 Python 3 的存在。

如果我只是使用 yum 安装 Python3,一切显然都可以正常工作 - 实际上对于 Centos 来说,平衡似乎也可以。

我对 Chef 比较陌生,但我已经与我们的其他 devops 团队成员核实过,并进行了大量搜索,但我们无法弄清楚这应该如何正式完成。我们不是在寻找更多的技巧,因为我们显然可以做到这一点,但是“厨师”的方法是什么?

提前致谢。

【问题讨论】:

    标签: python ruby chef-infra


    【解决方案1】:

    不幸的是,仅仅链接二进制文件并不能真正帮助你,因为默认情况下在 CentOS 上它将使用需要一些特殊环境变量才能运行的 SCL 包。如果您希望它使用“正常”系统,您可以这样做:

    python_runtime '3' do
      provider :system
    end
    

    但是,这可能会失败,因为没有适用于 Python 3 的 EL7 发行包。如果您想继续使用 SCL 包但让它们看起来像普通的二进制文件,不妨试试这样:

    file '/usr/local/bin/python' do # or .../python3 if you prefer
      owner 'root'
      group 'root'
      mode '755'
      content "#!/bin/sh\nexec scl enable rh-python35 -- python3 \"$@\""
    end
    

    或者类似的东西。这仍然表明它是 SCL 以及正在使用哪个 SCL 包这一事实,这并不可爱,但完全通用的形式(虽然可行)要复杂得多。

    【讨论】:

    • 另一种选择是使用 Python 的 IUS 包,但是 IUS 不提供 Ruby,因此在使用 SCL 或被 2.0 发行包卡住时会遇到类似的问题。
    • 谢谢。我担心它可能是这样的,但这看起来是一个合理的方向。现在我刚刚使用了一种 yum 安装 Python3 和 setuptools 的 hacky 感觉方式,然后 easy_installing pip 来安装其他必要的库。然后当然一切都按预期链接,但它并不漂亮。
    • 如果您在 Chef 内部完成所有操作,我的代码会为您处理好 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多