【问题标题】:Where is the PATH in a Chef Run (Omnibus installation) enforced/configured?Chef Run(综合安装)中的路径在哪里强制/配置?
【发布时间】:2013-12-06 08:48:42
【问题描述】:

我正在尝试通过 Vagrant/Chef-solo 构建一个基于 Centos 6.4 并使用 vagrant-omnibus (1.1.2) 的开发框,以确保该框使用最新的 Chef(同时创建/整理食谱,那么我可能会冻结版本)。目前它安装的是 11.8.2。

其中一本食谱是使用ruby_build 安装 Ruby 2.0.0-p353,然后在 /usr/local/bin 下创建符号链接,以便在厨师运行完成后所有用户都可以使用 Ruby。它还安装了一些我想在系统范围内强制安装的 gem。

问题是在执行ruby_build 之后使用gem_package 资源会将gem 安装到来自Chef Omnibus 安装的嵌入式ruby 中。到目前为止,我使用gem_binary 选项来解决这个问题,以强制检测系统范围的 Ruby 环境,但这让我开始思考,所以我检查了在 Chef 运行期间使用了哪个 PATH(使用shell_out 打印 PATH到一个文件)并发现它显示以下内容:

/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/chef/embedded/bin:/opt/chef/embedded/bin:/usr/local/bin

这是从哪里来的?如何/为什么在/usr/local/bin之前添加/opt/chef/embedded/bin

【问题讨论】:

  • 我猜它是在安装 Chef 时配置的,它与 chef-run 没有任何连接。

标签: ruby chef-infra vagrant chef-solo


【解决方案1】:

答案是:

  1. Vagrant 使用ssh 以“vagrant”用户身份登录guest 框。这将添加 sshd_config 安全路径。在 CentOS 6.4 中是:

    /sbin:/bin:/usr/sbin:/usr/bin

  2. 然后它使用sudo 成为“root”用户。配置文件的来源是在 CentOS 6.4 中,这意味着 sbin 路径是前置的,而 $HOME/bin 是附加的。

  3. 然后chef-solo 运行并强制执行路径健全性。 Path sanity 将所有路径(如果不是现有 $PATH 的一部分)附加到末尾,从 ruby_bindirgem_bindir 开始(指的是 Chef Omnibus 安装)。然后,如果不是 $PATH 的一部分,则附加所有其他健全的路径,这就是为什么 /usr/local/bin 位于最后。

正如 Mark O'Connor 所提到的,对于 gem_packagegem_binary 选项可用于特定宝石。对于其他资源,可以指定完整路径。但是对于shell_out!,如果要以具有登录shell 的用户身份执行命令,首先需要清空环境(enviroment: { 'PATH' => nil }bash -l -c 用于执行所需的命令。

【讨论】:

    【解决方案2】:

    我建议指定目标 ruby​​ 的 gem 命令的路径:

    gem_package "mypackage" do
      gem_binary "/path/to/my/ruby/distro/bin/gem"
    end
    

    【讨论】:

    • @tnarik 这不仅仅是一种解决方法。确定 chef 将 gem 安装在正确位置的唯一方法是使用这种方法,当然还要加上一个“包”声明,在您的系统上安装所需版本的 ruby​​。在我们的例子中,我们必须创建自己的 RPM ruby​​ 发行版。
    • 好吧,在gem_package 的情况下,我希望它安装在系统范围的默认Ruby 安装中,并且gem_binary 指向特定的。但它有效。不过,我的问题更多的是关于授权 Vagrant/Chef-Solo 通常使用的 PATH 的机制,gem_package 是让我研究它的原因。
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2020-03-20
    • 2015-09-22
    • 2021-03-11
    • 1970-01-01
    • 2011-09-05
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多