我正在尝试弄清楚一件事,并希望听听其他人对此的看法。我通过 awesome 在我的 Ubuntu 服务器 (11.10) 上安装了 chef综合安装。它运行得非常好。我能够运行 chef-client,它运行起来没有任何问题。
然后我安装了 RVM 和两个 ruby - 问题就从那时开始。在我安装完 RVM 系统后,我直接运行:
curl -L https://get.rvm.io | sudo bash -s stable
并安装了 2 个 ruby(将其中一个 ruby 设置为系统上的默认 ruby)我无法再运行 chef-client - 当我以普通用户身份运行时,我收到“命令未找到”的消息 - 我认为 RVM 弄乱了一些 PATHS,所以这就是原因。我想我会以 root 身份运行它,即:
sudo su -
chef-client
结果相同。然后我尝试了 rvmsudo,因为有些人建议这样做,但这也没有帮助。然后我做了最后一次尝试 - 我将其运行为
sudo chef-client
一切运行正常!我真的很困惑,为什么上面的方法有效,为什么以 root 身份运行 chef -client(即 sudo su -; chef-client)却不起作用。我是不是漏掉了什么?我真的很感激所有的提示或解释,因为我有点迷茫。我想以 root 身份运行 chef-client 作为守护进程,但我无法使用上面的 sudo 命令做到这一点 - 我知道我可以使用 nopasswd 设置用户,它可能会起作用,但我真的很想了解这里发生了什么 ;)
答案1
看起来您遇到了路径加载问题。
综合安装程序将 Chef 安装到/opt/chef/bin/chef-client
,然后符号链接到/usr/bin/chef-client
参考文献1以便所有用户都可以使用$PATH
。
当你安装 rvm 时,它会与 $PATH 发生冲突,具体来说,Chef 将使用哪个 ruby,因为它是加载当前运行环境的 ruby执行时。
当使用 运行时sudo su -
,您将更改为root
的环境,并运行设置用户环境的所有相关 profile/bashrc/bash_profile 加载器。
当使用运行时sudo
,您不会加载整个环境,因此 RVM 不会改变路径。
您可以执行另一项测试来查看 shell 差异的影响,即运行:
sudo which ruby
sudo su - which ruby
并比较其差异。
你可能想看看厨师-客户cookbook 一旦执行,将帮助您设置一个服务守护进程来控制/配置您的 chef-client 服务(我们在所有服务器上使用它)。
由于 rvm 是作为系统范围的默认安装的,所以您可能必须为 root(或您想要以 root 身份运行 Chef 的用户,但我建议使用 root)禁用它。