ChefもKnifeも知らない初心者がBerkshelfに頼ってVagrantでUbuntuを構築する例



# はじめに

調理の初心者がBerkshelfに頼ってVagrantのVMを構築します．Ubuntuを動かし，試しにgitをインストールしてみます．なお，RubyやVagrant本体は既にインストールしてあるものとします．この記事執筆時点でのバージョンです．

-   VirtualBox 4.2.16 for Linux
-   Vagrant 1.2.3
-   ruby 2.0.0p195

なお，rbenvには

-   ruby-build
-   rbenv-binstubs

のプラグインを入れています．


# インストール

berkshelfとvagrant用プラグインをインストールします．

    $ gem install berkshelf
    $ vagrant plugin install vagrant-berkshelf
    Installing the 'vagrant-berkshelf' plugin. This can take a few minutes...
    Installed the plugin 'vagrant-berkshelf (1.3.2)'!


# berksで初期化

「precise」という名前で作成します．

    $ berks cookbook precise
          create  precise/files/default
          create  precise/templates/default
          create  precise/attributes
          （省略）
             run  git init from "./precise"
          create  precise/Gemfile
          create  precise/Vagrantfile

できたディレクトリに移動して，記録のためにcommitしておきます．

    $ cd precise
    $ git add .
    $ git commit -a -m 'Initial commit'


# bundle install

さらにbundleinstallとかもやっておきます．このフォルダで入力したコマンドはbundleexecなしでもこの場所でインストールされたバージョンのものになります（rbenvにrbenv-binstubsプラグインを入れてあるので）．

```sh
$ bundle install --path=vendor/bundle --binstubs=vendor/bin
$ bundle package --all
$ echo 'vendor/bundle' >> .gitignore
$ git add .
$ git commit -a -m 'Bundle install'
```

vendor/bundleにgemが，vendor/cacheにダウンロードしてきたgemが，vendor/binに実行コマンドインストールされます．vundle/bulder以外はgitの管理下に置きます．なお，この手順を省略し，Bundle外の共通のgemとしてbundleinstallしても構いません．


# Vagrantfileの変更

ツールが生成したVagrantfileはCentOSになっているのでUbuntuに変更します．

    $ vim Vagrantfile

変更した内容は次のとおりです．

    diff --git a/Vagrantfile b/Vagrantfile
    index f7e6e9f..efdbb32 100644
    --- a/Vagrantfile
    +++ b/Vagrantfile
    @@ -6,14 +6,14 @@ Vagrant.configure("2") do |config|
       # options are documented and commented below. For a complete reference,
       # please see the online documentation at vagrantup.com.
    
    -  config.vm.hostname = "precise-berkshelf"
    +  config.vm.hostname = "precise"
    
       # Every Vagrant virtual environment requires a box to build off of.
    -  config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal"
    +  config.vm.box = "precise"
    
       # The url from where the 'config.vm.box' box will be fetched if it
       # doesn't already exist on the user's system.
    -  config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box"
    +  config.vm.box_url = "http://files.vagrantup.com/precise32.box"
    
       # Assign this VM to a host-only network IP, allowing you to access it
       # via the IP. Host-only networks can talk to the host machine as well as


# Vagrantを立ち上げる

起動させてみます．

    $ vagrant up
    $ vagrant ssh

きちんとログインできました．


# Berksfileの編集

試しにgitを追加してみます．Berksfileをエディタで開きます．

```sh
$ vim Berksfile
```

変更内容は次の通り．

    diff --git a/Berksfile b/Berksfile
    index c4bb297..6d86dcf 100644
    --- a/Berksfile
    +++ b/Berksfile
    @@ -1,3 +1,4 @@
     site :opscode
    
     metadata
    +cookbook 'git'


# Vagrantfileの編集

Vagrantfileも変更します．

```sh
$ vim Vagrantfile
```

こちらは，次のように変更しました．

    diff --git a/Vagrantfile b/Vagrantfile
    index efdbb32..dbb240a 100644
    --- a/Vagrantfile
    +++ b/Vagrantfile
    @@ -80,7 +80,8 @@ Vagrant.configure("2") do |config|
         }
    
         chef.run_list = [
    -        "recipe[precise::default]"
    +        "recipe[precise::default]",
    +        "git"
         ]
       end
     end


# 再起動

    $ vagrant reload

sshして試すと，無事，gitが使えるようになっています．


# 感想

ChefやKnifeはいずこへ・・・笑


# おわりに

この記事はVagrant初心者が書いておりますので，もし間違い等ございましたらご遠慮なく連絡ください♪

[次回](http://qiita.com/ychubachi@github/items/befe8ab4cd0765643628)はrbenvでrubyの環境を構築する例を紹介します．



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