入門Chef 補完 – chef〜vagrant saharaインストール


Chef Logo

来ました Chef です。DevOps は考え方として把握していたけど、具体的にツールとして Chef が登場したし、スマートWordPress でも使えそうな気配がしたので、そろそろ把握するにはいタイミングだろうと思って学んでみている。

伊藤直也さん著の、今や Amazon でUnixオペレーティングシステムカテゴリベストセラーNo.1の入門Chef Solo を購入して読了。

入門Chef Solo – Infrastructure as Code

その通りに自分の環境づくりから始めたものの結構のっけからうまくいかないことが起こった。
先端的なものは変化が激しいしそんなこともあると思いつつ、色々調べつつ自分なりに起こった事象に対して解消していった。

そんな解消した方法を 入門Chef 補完として紹介します。

最初はChef インストールからローカルで 仮想環境操作を CLI 操作する vagrant のインストール、さらに vagrant のプラグイン sahara インストールまでのインストール手順になります。

今後、また検証が進んで補完内容がたまったら紹介します。

環境は

  • OS X 10.7.5
  • Ruby 1.8.7
  • gem 1.3.7

と、ちょっと古めの MacBook Air です。

Chef のインストール手順は Opscode のマニュアルに従う

Chef のインストールは入門Chefでは gem install だが、古い gem だと入らない。gem をアップデートすればよいけど、そもそも ruby 1.9.2 より古いと動作しないかもということもあり、依存しているもののバージョンアップをいちいちするのは手間だし、追い切れない。

Chef のインストール方法は Opscode 提供のシェルを使うと Chef 含め必要なものを丸っとインストールしてくれる。動作確認されているであろう新しいバージョンが入る。
ここらへんの手順は入門Chefに頼らず一度 opscode.com のマニュアルを読んだ方が良い。

http://docs.opscode.com/chef/install_workstation.html

手順は、以下を実行するだけ。

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

注意点は現状の環境と別で Mac だと /opt/chef というディレクトリが作られるので、環境に上書きされず Chef 用の独立した環境が1つ追加される。これを個人として許容できれば良いだろう。

作られる階層構造は以下、

/opt
   /chef
      /bin
      /embedded
         /bin
         /include
         /lib
         /share
         /ssl

インストールが終わると、2つの異なる ruby バージョンが存在することになる。

# 今までの環境
$ ruby -v
ruby 1.8.7 (2012-10-12 patchlevel 371) [i686-darwin11]

$ which ruby
/opt/local/bin/ruby

$ gem -v
1.3.7

# インストールされた Chef 用の環境
$ /opt/chef/embedded/bin/ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin11.2.0]

$ /opt/chef/embedded/bin/gem -v
1.8.24

自分は現状の環境のバージョンがちょっと古いしその上で動かしていたものもあるので、独立して設けたほうが支障がなく簡単に導入できるのでこのやり方を使った。

VirualBox, Vagrant, Sahara の失敗しないインストール方法

本では、Vagran, Saharaまでのインストール手順は、

  1. VirtualBox インストール
  2. gem install vagrant
  3. OSメージダウンロード
  4. vagrant gem install sahara

だけど、この方法は自分の環境では動かなかったり、途中で不整合がでてインストールし直しが起きたりした。
結果的に手順は以下のようになった。

  1. Vagrant で使いたいOSイメージを決める
  2. OSイメージのVirtualBox Guest Additions バージョンを確認
  3. OSイメージの VirtualBox Guest Additions バージョンと同じ VirtualBox のバージョンをインストール
  4. Vagrant のWebから最新バージョンのインストーラーをダウンロードしてインストール
  5. vagrant plugin install sahara

VirtualBox のバージョンはゲストOSに依存している

ゲストOSの VirtualBox Guest Additions と VirualBox のバージョンを一致させないと動かない。
vagrant up するとこんなエラーが出る

[default] The guest additions on this VM do not match the install version of
VirtualBox! This may cause things such as forwarded ports, shared
folders, and more to not work properly. If any of those things fail on
this machine, please update the guest additions and repackage the
box.

Guest Additions Version: 4.2.16
VirtualBox Version: 4.2.18

なので、最初にOSイメージを決めてそれに対応する VirtualBox のバージョンをインストールする必要がある。

http://www.vagrantbox.es/ からだと、VirtualBox Guest Additions が示されていないイメージもあったり情報が不足しているが、自分はとりあえず情報がある
CentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.16, Chef 11.6.0, Puppet 3.2.3)
をダウンロードした。

VirtualBox Guest Additions 4.2.16 なので、VirualBox も 4.2.16 をインストールする。
https://www.virtualbox.org/wiki/Downloads からだと最新版 4.2.18 しかないので、
https://www.virtualbox.org/wiki/Download_Old_Builds_4_2 から 4.2.16 を見つけてダウンロード、インストーラーでインストールする。

Vagrant インストールは最新版インストーラーを使う

入門Chefでは Vagrant のインストール方法は gem install でとあるが、gem を使うと古い Vagrant がインストールされて、Sahara などのプラグインが追加できなかった。
Opscode インストール方法で作られた Chef用 gem でも古い Vagrant だった。

$ /opt/chef/embedded/bin/gem search vagrant
 vagrant (1.0.7)

このバージョンではプラグインを追加するコマンドがない。

解決方法は http://downloads.vagrantup.com/ より最新版をインストールする。OS X、Windows、Linuxなどプラットフォームごとにインストーラーが用意されている。
インストールが終わると sahara プラグインがインストールできる。

コマンドは vagrant gem install sahara ではなく(誤字?) vagrant plugin install sahara
参考になったURL : http://qiita.com/hnakamur/items/2c1ae50a23ddc9f7cbe8

$ vagrant -v
 Vagrant 1.3.4

# sahara プラグインインストール
 $ vagrant plugin install sahara

$ vagrant -h
 Usage: vagrant [-v] [-h] command []

-v, --version Print the version and exit.
 -h, --help Print this help.

Available subcommands:
 box
 destroy
 halt
 help
 init
 package
 plugin
 provision
 reload
 resume
 sandbox
 ssh
 ssh-config
 status
 suspend
 up

vagrant sandbox コマンドが追加される。これで vagrant sandbox on とかが使えるようになる。

このやり方なら Chef インストールから vagrant が使えるところまで来れるはずです。

本を読んだけど、あれ?うまくいかないなぁとつまずいてしまった方の参考になれば幸いです。