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



# はじめに

[前回](http://qiita.com/ychubachi@github/items/8c57481b85865e562c47)からの続きです．

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


# vagrantにプラグインを追加

chefの最新版（Chef11.4.4）を利用できるようにするために，vagrantにもうひとつプラグインを追加します．

```sh
$ 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の状況は次のとおりです．

```sh
$ vagrant plugin list
vagrant-berkshelf (1.3.2)
vagrant-omnibus (1.1.0)
```


# chefの最新版を指定する

Vagrantfileでchef\_versionを指定します．変更の差分は次のとおりです．

    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-getupdateを実行させるためのものです．rbenvのインストールに必要な新しいバージョンのパッケージをインストールできるようにするためです．残りは，ruby\_buildとrbenv関連の設定になります．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-getupdateが実行されます．加えて，rbenvの設定も追加します．

    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を実行

```sh
$ vagrant provision
```

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


# rubyの動作確認

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

```sh
$ 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-getupdateを実行させることの必要性に気づくために手間取りましたが，それ以外の設定は楽勝でした．びっくりですね．

[次回](http://qiita.com/ychubachi@github/items/d286ccab0fa0d501a45c)は，berksコマンドで作成したCookbookの中身についてです．


# 参考文献

-   <http://misheska.com/blog/2013/06/16/getting-started-writing-chef-cookbooks-the-berkshelf-way/>
-   <http://qiita.com/ogomr/items/98a33f47f6ba050adac4>
-   <https://github.com/dergachev/vagrant_redmine/blob/master/NOTES.md#apt-get-install-error-code-100>



------
 - **source** /mnt/c/Users/yc/Dropbox/org/qiita/befe8ab4cd0765643628.org