Edited at

Chefを新しくしてrbenvをberkshellでvagrantのUbuntuにインストール

More than 5 years have passed since last update.


はじめに

前回からの続きです.

前回の設定のままではchefのバージョンの古いもの(10.14.2)がvagrantから内部的に起動されました.これではrbenvがインストールできませんでした.また,関連するライブラリをインストールする前にapt-get updateをするための設定を追加します.


vagrantにプラグインを追加

chefの最新版(Chef 11.4.4)を利用できるようにするために,vagrantにもうひとつプラグインを追加します.

$ vagrant plugin install vagrant-omnibus

Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
Installed the plugin 'vagrant-omnibus (1.1.0)'!

現在のvagrant pulginの状況は次のとおりです.

$ vagrant plugin list

vagrant-berkshelf (1.3.2)
vagrant-omnibus (1.1.0)


chefの最新版を指定する

Vagrantfileでchef_versionを指定します.変更の差分は次のとおりです.


Vagrantfile

diff --git a/Vagrantfile b/Vagrantfile

index dbb240a..e3a5d5d 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -61,6 +61,7 @@ Vagrant.configure("2") do |config|
# Enabling the Berkshelf plugin. To enable this globally, add this configuration
# option to your ~/.vagrant.d/Vagrantfile file
config.berkshelf.enabled = true
+ config.omnibus.chef_version = :latest

# An array of symbols representing groups of cookbook described in the Vagrantfile
# to exclusively install and copy to Vagrant's shelf.

一行追加しただけですね.


Berksfileの編集

ここではaptのcookbookを指定します.これは,apt-get updateを実行させるためのものです.rbenvのインストールに必要な新しいバージョンのパッケージをインストールできるようにするためです.残りは,ruby_buildとrbenv関連の設定になります.Berksfileの差分は次のとおりです.


Berksfile

diff --git a/Berksfile b/Berksfile

index 6d86dcf..79cace7 100644
--- a/Berksfile
+++ b/Berksfile
@@ -1,4 +1,7 @@
site :opscode

metadata
+cookbook 'apt'
cookbook 'git'
+cookbook 'ruby_build'
+cookbook 'rbenv', github: "fnichol/chef-rbenv"



Vagrantfileの修正

Vagrantfileも修正します.chef.run_listに,apt::defaultレシピを追加しました.これにより,apt-get updateが実行されます.加えて,rbenvの設定も追加します.


Vagrantfile

diff --git a/Vagrantfile b/Vagrantfile

index e3a5d5d..ec6caf8 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -77,12 +77,27 @@ Vagrant.configure("2") do |config|
:server_root_password => 'rootpass',
:server_debian_password => 'debpass',
:server_repl_password => 'replpass'
+ },
+ rbenv: {
+ user_installs: [{
+ user: "vagrant",
+ rubies: ["2.0.0-p195"],
+ global: "2.0.0-p195",
+ gems: {
+ "2.0.0-p195" => [
+ {name: "bundler"}
+ ]
+ }
+ }]
}
}

chef.run_list = [
"recipe[precise::default]",
- "git"
+ "recipe[apt::default]",
+ "git",
+ "ruby_build",
+ "rbenv::user"
]
end
end



vagrantでprovisionを実行

$ vagrant provision

ずらーっとログが出て,rubyのコンパイルで相当待たされます.手元の環境で1430.25秒かかりました.


rubyの動作確認

でも,完了するとrbenv経由でrubyが利用できるようになります.

$ vagrant ssh

vagrant@precise:~$ rbenv versions
system
* 2.0.0-p195 (set by /home/vagrant/.rbenv/version)
vagrant@precise:~$ ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [i686-linux]

きちんとrubyが動作しています.


おわりに

chefのバージョン違いの解消とapt-get updateを実行させることの必要性に気づくために手間取りましたが,それ以外の設定は楽勝でした.びっくりですね.

次回は,berksコマンドで作成したCookbookの中身についてです.


参考文献