我正在使用 Vagrant 在 Amazon AWS 中测试我的 Chef 食谱,但遇到了一个令人恼火的问题:
我最初以为 Vagrant 会自行安装 chef(就像使用 Virtual Box 作为提供程序时一样),但似乎需要使用 cloud-init 脚本来完成。然而,即使在我通过 cloud-init 成功安装了 chef gem 之后,我仍然收到以下错误:
The chef binary (either
chef-solo or
chef-client) was not found
通过快速谷歌搜索这个错误,我们发现有三个可能的原因:
- Chef 安装失败
- 已安装,但目录不在 $PATH 环境变量中
- 它已安装并位于 $PATH 中,但权限不正确
我登录并仔细检查;chef-solo 和 chef-client 已安装;用户、sudo 和 root 的路径变量均已包含,/usr/local/bin
并且权限全部正常。
我设法通过卸载并重新安装 gem 解决了这个问题sudo gem install chef
。我不明白为什么这应该可以解决这个问题,而且如果每次我都必须 ssh 进入测试箱并手动安装 gem,那就有点麻烦了。
有谁能提出为什么会发生这种情况?
答案1
我不会chef-client
通过 gem 安装。
Opscode 建议通过其“综合”安装程序。
一个方便的方法是,通过 Vagrant 插件https://github.com/schisamo/vagrant-omnibus.
vagrant-omnibus
支持多个供应商,包括vagrant-aws
,并且还支持许多不同的分布。
通常很简单:
$ vagrant plugin install vagrant-omnibus
并向您Vagrantfile
的
答案2
这里遇到了同样的问题...暂时我修复了它:
vagrant ssh -c 'sudo ln -s /opt/chef/bin/* /usr/local/bin/'
但这是一个糟糕的解决方案...我希望尽快找到更好的解决方案。