2011-10-22 71 views
8

Tôi muốn cung cấp một hộp Ubuntu 10.04 mới với Ruby 1.9.2. Tôi đang sử dụng Vagrant và Chef Solo để cung cấp hộp với mọi thứ khác tôi cần (ví dụ: Rails, Rake, MongoDB). Phiên bản Ruby mặc định là 1.8.7.Cài đặt Ruby 1.9.2 trên Ubuntu bằng Chef và Vagrant

Có cách nào để cài đặt Ruby 1.9.2 như một phần của quy trình cấp phép Vagrant/Chef không?

Tôi đã đọc trên trang web Chef về cách sử dụng mẫu bootstrap của riêng tôi - có thể bằng dao - chẳng hạn như this one, nhưng vì tôi đang sử dụng Vagrant Tôi không chắc chắn vị trí đặt mẫu này - Tôi không có một đầu bếp-repo, một thư mục .chef hoặc thậm chí bất kỳ công cụ đầu bếp được cài đặt trong/etc/đầu bếp.

Trả lời

11

Đầu tiên, một chút ngữ cảnh. Hầu hết các basebox Vagrant cài đặt Ruby để sử dụng bởi Chef và Puppet, nhưng những cái mới nhất làm điều này vào/opt/ruby ​​hơn là sử dụng các gói hệ thống. Họ cũng thêm/opt/ruby ​​/ bin vào đường dẫn, nhưng cuối cùng.

mẫu VeeWee này cho thấy cách 10.04 hộp hiện đang được xây dựng: https://github.com/jedi4ever/veewee/blob/master/templates/ubuntu-10.04.3-server-i386/postinstall.sh

Đối với câu hỏi của bạn, họ là những bối cảnh khác nhau bạn có thể cố gắng để giải quyết, mỗi một giải pháp khác nhau. Hy vọng rằng một trong số đó sẽ là những gì bạn đang tìm kiếm.

Run Chef thức nấu ăn với 1.9.2

Bạn có thể muốn kiểm tra chạy công thức nấu ăn đầu bếp dưới 1.9.2 và bạn không muốn bất cứ nơi nào gần 1.8.7 hộp của bạn. Cách tốt nhất để tiếp cận điều này là tạo mẫu VeeWee của riêng bạn và tự xây dựng một basebox mới. Bạn có thể thay đổi một liên kết ở trên để biên dịch 1.9.2 thay vì 1.8.7 và làm theo các hướng dẫn trên https://github.com/jedi4ever/veewee

Phát triển với Ruby 1.9.2

Có lẽ nhiều khả năng là bạn muốn hack vào một số Mã Ruby sử dụng 1.9.2. Đối với điều này, bạn chỉ cần cài đặt Ruby và có các tệp nhị phân trên đường dẫn của bạn trước mục nhập/opt/ruby. Có một số cách để làm điều này:

  • Compile Ruby từ xước mình
  • Sử dụng một gói. Các gói apt trong sáng suốt sẽ không cung cấp cho bạn 1.9.2 để bạn có thể cuộn của riêng bạn nếu bạn muốn. Hoặc đây là một Tôi hiện đang sử dụng https://github.com/garethr/packages/downloads
  • Sử dụng một cái gì đó giống như RVM http://beginrescueend.com/

Tất cả những có thể được quản lý sử dụng một công thức Chef. Tôi có lẽ không đi cho các tùy chọn biên dịch, để lại hoặc chỉ là một tải về thẳng và tài nguyên gói hoặc RVM cookbook sau đây có thể được tiện dụng http://community.opscode.com/cookbooks/rvm cho RVM.

Các * gem_binary * tùy chọn trên tài nguyên gói cũng có thể có ích ở đây tùy thuộc vào cách bạn muốn đảm bảo đá quý được cài đặt cho bạn mới 1.9.2 Ruby (chứ không phải là 1.8.7 quyền chọn tham gia)

Các Mục tiêu của knife bootstrap là để có được Chef cài đặt trên hệ thống đích để nó có thể chạy Chef Client. Các baseboxes Vagrant có xu hướng đã có Chef cài đặt vì vậy trừ khi bạn đang làm một cái gì đó cụ thể và muốn chạy nhiều phiên bản của Chef tôi muốn tránh con đường này. Việc xây dựng trong cung cấp đầu bếp như http://vagrantup.com/docs/provisioners/chef_solo.html là một đặt cược tốt hơn.

+0

tôi đã đi cho các tùy chọn gói, sử dụng gói 1.9.2 bạn liên kết đến, mặc dù tôi dường như thiếu một phụ thuộc (libffi5) vì vậy tôi cũng phải thêm nó vào công thức của mình. –

0

Dưới đây là công thức tôi đang sử dụng để cài đặt của Ruby 1.9.2

package "libffi5" do 
    action :install 
    provider Chef::Provider::Package::Apt 
end 

package "ruby-1.9.2" do 
    action :install 
    source "/tmp/vagrant-chef/cookbooks-0/ruby-1.9.2/files/default/ruby-1.9.2-p290_i386.deb" 
    provider Chef::Provider::Package::Dpkg 
end 
2

Tôi biết câu hỏi là khá cũ và đã trả lời, nhưng tôi hy vọng điều này vẫn có thể rất thú vị đối với một ai đó vấp ngã khi câu hỏi này .

tôi đã xây dựng một Github repo mà có ý định cung cấp một số cấu hình cho việc xây dựng và provisioning một hộp Vagrant mà không cần phải viết một công thức trích lập dự phòng từ đầu.

Ví dụ, bằng cách sử dụng cấu hình hiện cung cấp, bạn có thể xây dựng và cung cấp một hộp với:

  • của Ruby 1.9.2-p290, quản lý với rbenv và sử dụng Bundler cho đá quý
  • PostgreSQL 8.4
  • MongoDB

Đây là introduction article trên blog của tôi.

Vì đây gần như phù hợp với yêu cầu, tôi cảm thấy đó là giá trị thêm câu trả lời cuối này :)

Các vấn đề liên quan