gpt4 book ai didi

ruby - Chef Run(Omnibus 安装)中的 PATH 在哪里强制执行/配置?

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:03 25 4
gpt4 key购买 nike

我正在尝试通过基于 Centos 6.4 的 Vagrant/Chef-solo 构建一个开发箱,并使用 vagrant-omnibus (1.1.2) 以确保该箱使用最新的 Chef(在创建/整理 Recipe 时,然后我可能会卡住版本)。目前它安装 11.8.2。

其中一本 Recipe 使用 ruby_build 安装 Ruby 2.0.0-p353,然后在/usr/local/bin 下创建符号链接(symbolic link),以便在 chef 运行完成后所有用户都可以使用 Ruby .它还安装了一些我想在系统范围内强制执行的安装。

问题在于,在 ruby_build 执行后使用 gem_package 资源会在 Chef Omnibus 安装的嵌入式 ruby​​ 中安装 gem。到目前为止,我一直在解决使用 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

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

最佳答案

答案是:

  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 的一部分)附加到末尾,以 ruby_bindirgem_bindir(指的是Chef Omnibus 安装)。然后,如果不是 $PATH 的一部分,则附加所有其他正常路径,这就是为什么 /usr/local/bin 位于最后。

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

关于ruby - Chef Run(Omnibus 安装)中的 PATH 在哪里强制执行/配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com