Chefの環境を構築する



```
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
```

または

```
$ sudo gem install chef --verbose
```

```
$ sudo gem install knife-solo --verbose
```

だと、以下のエラーがでた。

```
Successfully installed libyajl2-1.2.0
Installing gem ffi-yajl-2.3.0
Downloading gem ffi-yajl-2.3.0.gem
GET https://rubygems.org/gems/ffi-yajl-2.3.0.gem
Fetching: ffi-yajl-2.3.0.gem (100%)
200 OK
ERROR:  Error installing knife-solo:
	ffi-yajl requires Ruby version >= 2.1.
```

バージョンが古いと 新しいRubyを要求される。

バージョンを上げる

## Rubyのバージョンを上げる

### CentOS7.0

rbenvを利用してパッケージ管理できるようにするため、
最初からインストールされているrubyは削除する。

```
[vagrant@localhost ~]$ sudo yum -y remove ruby
[vagrant@localhost ~]$ ruby -v
-bash: /usr/bin/ruby: そのようなファイルやディレクトリはありません
[vagrant@localhost ~]$ gem -v
-bash: /usr/bin/gem: そのようなファイルやディレクトリはありません
```

rbenvはgit cloneするため、gitインストールしておく

```
[vagrant@localhost ~]$ sudo yum install git
[vagrant@localhost ~]$ git --version
git version 1.8.3.1
```

[rbenv](https://github.com/rbenv/rbenv)をインストールする

```
[vagrant@localhost ~]$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
Cloning into '/home/vagrant/.rbenv'...
remote: Counting objects: 2542, done.
remote: Total 2542 (delta 0), reused 0 (delta 0), pack-reused 2542
Receiving objects: 100% (2542/2542), 461.07 KiB | 101.00 KiB/s, done.
Resolving deltas: 100% (1598/1598), done.
[vagrant@localhost ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[vagrant@localhost ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[vagrant@localhost ~]$ source ~/.bash_profile
[vagrant@localhost ~]$ cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

```

[ruby_build](https://github.com/rbenv/ruby-build)をインストールする

```
[vagrant@localhost ~]$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
Cloning into '/home/vagrant/.rbenv/plugins/ruby-build'...
remote: Counting objects: 6993, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 6993 (delta 2), reused 0 (delta 0), pack-reused 6981
Receiving objects: 100% (6993/6993), 1.36 MiB | 162.00 KiB/s, done.
Resolving deltas: 100% (4153/4153), done.
[vagrant@localhost ~]$ cd ~/.rbenv/plugins/ruby-build
[vagrant@localhost ruby-build]$ sudo ./install.sh
[vagrant@localhost ruby-build]$ rbenv -v
rbenv 1.0.0-33-gc7dcaf1
```

Ruby の最新版をインストールする

インストール可能なバージョンを確認する

```
$ rbenv install -l
  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.3.1
  2.4.0-dev
  2.4.0-preview1
  2.4.0-preview2
  2.4.0-preview3
```

2016年11月14日時点で、安定版の最新は 2.3.1 なので、それをインストールする。

```
[vagrant@localhost ruby-build]$ rbenv install 2.3.1
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
Installing ruby-2.3.1...
Installed ruby-2.3.1 to /home/vagrant/.rbenv/versions/2.3.1
[vagrant@localhost ruby-build]$ rbenv rehash
[vagrant@localhost ruby-build]$ rbenv global 2.3.1
```

バージョン確認

```
[vagrant@localhost ruby-build]$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
[vagrant@localhost ruby-build]$ which ruby
~/.rbenv/shims/ruby
[vagrant@localhost ruby-build]$ which gem
~/.rbenv/shims/gem
[vagrant@localhost ruby-build]$ gem -v
2.5.1
```

### Mac OS (El Captain)

rbenvでRubyをインストールする

brew をupdate て必要なソフトをインストールする

```
$ brew update
$ brew install openssl
$ brew install readline
```

```
$ brew install rbenv
$ brew install rbenv-gemset
```

```
$ rbenv --version
rbenv 1.0.0
```

```
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

rbenvが見ているバージョンを確認する

```
$ rbenv versions
* system (set by /Users/hogehoge/.rbenv/version)
```

Ruby の最新版をインストールする

インストール可能なバージョンを確認する

```
$ rbenv install -l
  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.3.1
  2.4.0-dev
  2.4.0-preview1
  2.4.0-preview2
  2.4.0-preview3
```

インストール前のrubyバージョンを確認しておく
（El Captainだと 2.0.0になってる）

```
$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]

```

2016年11月14日時点で、安定版の最新は 2.3.1 なので、それをインストールする。

```
$ rbenv install 2.3.1
$ rbenv rehash
```

rehashしたけど、まだ変わっていない

```
$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
```

見ているバージョンがsysytemとなっている

```
$ rbenv versions
* system (set by /Users/hogehoge/.rbenv/version)
  2.3.1
```

グローバルのバージョン指定を行うと切り替わる

```
$ rbenv global 2.3.1
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
```


## Chefをインストールする

```
$ gem install chef --verbose

Successfully installed chef-12.16.42
Parsing documentation for chef-12.16.42
Parsing sources...
100% [822/822]  lib/chef/workstation_config_loader.rb                                                           
Done installing documentation for chef after 25 seconds
1 gem installed
```

## ツールをインストールする

knife-solo

```
$ gem install knife-solo --verbose
100% [50/50]  lib/knife-solo/tools.rb                                                                                     
Installing ri documentation for knife-solo-0.6.0
Done installing documentation for mixlib-shellout, mixlib-config, fuzzyurl, public_suffix, addressable, chef-config, mixlib-cli, mixlib-log, mixlib-authentication, mixlib-archive, systemu, libyajl2, ffi-yajl, plist, ipaddress, wmi-lite, ffi, ohai, net-ssh, net-ssh-gateway, net-ssh-multi, net-sftp, highline, erubis, diff-lcs, hashie, uuidtools, rack, chef-zero, iniparse, rspec-support, rspec-core, rspec-expectations, rspec-mocks, builder, rspec_junit_formatter, rspec, rspec-its, multi_json, net-scp, sfl, specinfra, serverspec, syslog-logger, proxifier, bundler, chef, knife-solo after 72 seconds
48 gems installed
```

macだと以下のメッセージが出たので対応した

```
If you run into any issues please let us know at:
  https://github.com/matschaffer/knife-solo/issues

If you are upgrading knife-solo please uninstall any old versions by
running `gem clean knife-solo` to avoid any errors.

See http://bit.ly/CHEF-3255 for more information on the knife bug
that causes this.
Successfully installed knife-solo-0.6.0
Parsing documentation for knife-solo-0.6.0
Parsing sources...
100% [50/50]  lib/knife-solo/tools.rb                                                                                     
Installing ri documentation for knife-solo-0.6.0
Done installing documentation for knife-solo after 1 seconds
1 gem installed

$ gem clean knife-solo
Cleaning up installed gems...
Clean Up Complete

```

berkshelf

```
$ gem install berkshelf --verbose
Done installing documentation for multipart-post, faraday, httpclient, buff-extensions, varia_model, buff-config, buff-ignore, buff-ruby_engine, buff-shell_out, hitimes, timers, celluloid, nio4r, celluloid-io, retryable, semverse, ridley, berkshelf-api-client, cleanroom, minitar, molinillo, solve, thor, sawyer, octokit, berkshelf after 16 seconds
26 gems installed


```

## vagrantのプラグインをインストールする

```
$ vagrant plugin install vagrant-omnibus
Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
Installed the plugin 'vagrant-omnibus (1.5.0)'!
```

```
$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.13.0)'!
```

## 参考

[rbenv + ruby-build はどうやって動いているのか](http://takatoshiono.hatenablog.com/entry/2015/01/09/012040)