我在 Ubuntu 12.04 上安装了 Chef Server,使用官方说明,它使用嵌入了 ruby 1.8.7 的“综合安装程序”。
我正在尝试安装刀窗,但是当我运行时gem install knife-windows
出现此错误:
ERROR: Error installing knife-windows:
gssapi requires Ruby version >= 1.9.1.
我尝试安装右心室和 1.9.3,但是我得到了这个错误,并且退出了:
/opt/vagrant_ruby/lib/ruby/site_ruby/1.8/rubygems.rb:900:in `report_activate_error': Could not find RubyGem chef (>= 0) (Gem::LoadError)
from /opt/vagrant_ruby/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
from /opt/vagrant_ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1276:in `gem'
from /opt/vagrant_ruby/bin/knife:18
使用 Ruby 1.9.x 安装 Chef 服务器和 Knife 的正确方法是什么?
答案1
看起来 Chef Server 安装在由 Vagrant ( /opt/vagrant_ruby
) 创建的虚拟机中。但是,Chef Server 11+ 是基于 Erlang 而不是 Ruby 构建的。它确实附带了 Ruby,但您不应该直接使用它。它用于使用 来管理 Chef Server chef-server-ctl
。
上面 Vagrant 框中的安装可能将各种 Ruby 二进制文件放在默认的 $PATH 中,这意味着使用gem install
将尝试将knife-windows
gem 安装到 Vagrant 放置在那里的 Ruby 中。
进一步解释一下,Opscode 为 Chef 和 Chef Server 提供的软件包包含它们自己单独的 Ruby 安装。Opscode 这样做是因为 Chef 和 Chef Server 支持的平台都默认提供不同(过时)版本的 Ruby。
日常情况下,大多数与 Chef Server 的交互都是通过 API knife
(或 WebUI)进行的。knife
并且其插件应从“工作站”系统(如本地笔记本电脑)使用。如果 Chef 是安装 Ruby 的唯一原因,那么请使用嵌入在厨师套餐,应安装在本地系统上。安装程序适用于大多数主要平台,包括 Ubuntu、Windows、OS X 等。根据插件的不同,可能需要各种开发头文件和构建工具(gcc、make 等)。
值得一提的是,Chef Server 当前“综合”包中的 Ruby 版本不是 1.8.7。可以在以下位置找到它:
ubuntu@os-9348884648703137:~$ /opt/chef-server/embedded/bin/ruby --version
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]
(撰写本文时的当前版本)
Chef 客户端包中使用的 Ruby 版本通常更新更频繁,因为客户端/工作站使用需求的变化比 Chef 服务器更快。Chef 客户端包中嵌入的 Ruby 版本是:
% /opt/chef/embedded/bin/ruby --version
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-darwin11.2.0]
Opscode 计划在下一版本中更新此版本,因此它可能与未来访问此站点的访客所看到的内容不同。另请注意,这是来自“本地工作站”安装,而不是 Chef Server。
答案2
如果使用 RVM 来安装 1.9.3 版的 chef-server,我会感到不舒服。
我会从Brightbox PPA(这里有详细说明,但它基本上是添加 PPA 并用 1.9 替换 1.8,即sudo apt-get install ruby1.9.3
。
一旦 1.9.3 和相关的 RubyGem 到位,运行就足够了gem install chef
,这样 chef-server 就安装为 gem,而不是 deb 包。