Vagrant + Chef-solo (Knife-solo)

【vagrant + chef-solo および knife-solo による開発環境構築】(2014/03/15 – )

■概要

○目的

同一構成の複数の仮想マシンを開発環境として構築することで、開発環境構築の効率化と各開発者間の開発環境の統一を図る。

○構成

各ソフトウェアのバージョンは現時点(2014/03/15)での版である。

  • ホストOS: Windows7
  • ゲストOS: CentOS 6.5 64bit
  • 仮想マシン: VitualBox ver4.3.8
  • 仮想マシン管理: Vagrant ver1.5.1
  • 自動システム管理: chef-solo および Knife-solo
  • その他: rsync ver3.1.0

その他:
・chef-solo を動作させるため、windows上にver1.9以降のrubyが必要である。1.8系以前のバージョンは非推奨。
・knife-solo は、chef-solo を補助するためのツールである。

○大まかな手順

— 準備 —

  1. Vagrant上の仮想マシンテンプレートに対し、chef-solo および knife-solo を利用し開発環境構築を行う。
  2. 上記開発環境のBoxファイルを作成し、Vagrantfile、レシピと共に各開発者に公開する。

— 必要に応じて各開発者が行う —

  1. 各開発者はvirtualboxとVagrantを自分のローカル環境にインストールする。
  2. 各開発者は上記1.で作成したBoxファイルをVagrantコマンドによりダウンロードし、共有されたVagrantfileを利用して仮想マシンを起動する。

以下より構築手順詳細 以下はホストOSであるWindows上で行うこと

■Vagrantの準備

○VirtualBox導入

VirtualBoxはVagrant上のBOXを稼働させるために利用する。 公式サイトからVirtualBoxをダウンロードしインストールする。

https://www.virtualbox.org/wiki/Downloads

○ホストOS(Windows)へVagrant導入

・準備

公式サイトからVagrantをダウンロードしインストールする。

http://www.vagrantup.com/

インストール後PCを再帰動し、vagrantが正しくインストールされたか確認するため、DOS窓を開いて以下のようにvagrantのバージョンを表示させる。

1
2
3
$ vagrant -v

Vagrant 1.5.1

・Vagrant上に仮想マシンを追加する

任意のディレクトリへ移動し、下記サイトの「CentOS 6.5 x86_64」の仮想マシンテンプレートを指定してVagrant上に仮想マシンを追加する。 所要時間は10分から15分程度。

http://www.vagrantbox.es/

1
$ vagrant box add centos6 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box

なお下記のVagrant環境のための一連の準備により、ユーザホームディレクトリおよび作業用ディレクトリには以下のファイルが作成される。

  • Vagrantインストール時にWindowsのユーザホームディレクトリ(C:\Users<ユーザ名>)に作成されるファイル
    .vagrant.d

  • vagrant環境初期化(vagrant init)時に作業用ディレクトリに作成されるファイル
    Vagrantfile

  • vagrant初回起動時(vagrant up)時に作業用ディレクトリに作成されるファイル
    .vagrant

下記の一連の準備を終えたあと上記ファイルが作成されているか確認すること。

・仮想マシン追加完了後、Vagrant環境の初期化を行う

1
$ vagrant init

・仮想マシンの起動を行う

1
$ vagrant up

上記コマンドを実行し以下の様なエラーが出る場合、これはbox名の解決に失敗しているということなので、Vagrantfileファイルの一部を編集して再度仮想マシンの起動を行うこと。

Bringing machine ‘default’ up with ‘virtualbox’ provider… ==> default: Box ‘base’ could not be found. Attempting to find and install…

Vagrantfileファイル13行目

config.vm.box = “base”

上記の箇所を以下のように編集

config.vm.box = “centos65”

参考サイト:http://www.trapon.jp/log/201307/mac_vagrant_centos.html

仮想マシン起動後、PuTTYやTeraTermなどのSSHクライアントで仮想マシンへアクセス可能である。

Host: 127.0.0.1 Port: 2222 ID: vagrant PW: vagrant

・その他のVagrantコマンド

Vagrantの状況確認を行う

1
$ vagrant status

Vagrant Boxの一覧を表示する

1
$ vagrant box list

Vagrant Boxを削除する

1
$ vagrant box remove <Box名> virtualbox

Vagrantを終了させる

1
2
$ vagrant halt          ……サスペンド   
$ vagrant destroy       ……ターミネート  

Vagrantの準備は以上。


■chef solo の準備

○前提 ゲストOS側にはknife-soloは導入の必要無し

ホストOS:Windows7 chef-solo knife-solo

ゲストOS:CentOS 6.5 64bit chef-solo

また、chef-soloのレシピ群は以下の階層構造で管理される

 レポジトリ(キッチン)>クックブック>レシピ

○ホストOS(Windows)へruby2.0導入

ruby公式サイトより Ruby 2.0.0-p451 (x64) をダウンロードしインストールする。

http://rubyinstaller.org/downloads/

1
$ ruby -v

ruby 2.0.0p451 (2014-02-24) [x64-mingw32]

○ホストOS(Windows)へDevelopment Kit導入

同様にruby公式サイトより DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe (For use with Ruby 2.0 (x64 64bits only))をダウンロードしインストールする。 次にインストール先ディレクトリにて以下のコマンドを実行すること。

1
2
3
4
5
6
7
8
9
10
11
12
$ ruby dk.rb init

[INFO] found RubyInstaller v2.0.0 at C:/Ruby200-x64

Initialization complete! Please review and modify the auto-generated
'config.yml' file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.

$ ruby dk.rb install

[INFO] Updating convenience notice gem override for 'C:/Ruby200-x64'
[INFO] Installing 'C:/Ruby200-x64/lib/ruby/site_ruby/devkit.rb'

○ホストOS(Windows)へknife-solo導入

以下のgemをインストールすることで、chef-soloも同時にインストールできる。

1
$ gem install knife-solo

Windows版には以下のgemも必要となる。

1
2
$ gem install win32-process    
$ gem install windows-pr    

knife-soloのバージョンを表示して正常にインストールできたか確認する。

1
2
3
$ knife -v

Chef: 11.10.4

○リソース同期ツールrsync導入

下記サイトよりrsyncの無料版をダウンロードし、インストールする。

https://www.itefix.no/i2/cwrsync

任意のパスに配置しパスを通しておくこと

○リポジトリ(キッチン)の作成

以下のようにして chef-solo 基本ディレクトリを作成する

1
$ knife solo init <リポジトリ名>

仮にリポジトリ名をchef-repoとすると、下記コマンドにてディレクトリ chef-repo 以下にレシピテンプレートが作成される。

1
$ knife solo init chef-repo

○ゲストOS(Vagrant上のBOXとして起動しているCentOS6.5)へchef-solo導入

次にゲストOSへ chef-solo を導入するため作成したディレクトリ chef-repo に移動し、下記コマンドを実行する。 「2222」はゲストOSが稼働しているBoxのポート番号である。所要時間は30分程度。 この際、.chef/knife.rb が設定ファイルとして出力される

1
2
$ cd chef-repo
$ knife solo prepare -i "C:\Users\<ユーザー名>\.vagrant.d\insecure_private_key" -p 2222 vagrant@127.0.0.1

○クックブックの作成

クックブック名を仮に mybook として下記コマンドを実行する。

1
$ knife cookbook create mybook -o site-cookbooks

○レシピの作成

レシピファイルを編集しApacheのインストールを行ってみる。 レシピファイル(\chef-repo\site-cookbooks\mybook\recipes\default.rb)を以下のように編集

1
2
3
4
5
6
7
package "httpd" do
  action :install
end
 
service "httpd" do
  action :start
end

○実行レシピの指定

JSONファイル \chef-repo\nodes\127.0.0.1.json を編集し、実行レシピを追加する。

1
{"run_list":["mybook"]}

○レシピ実行

1
$ knife solo cook -i "C:\Users\<ユーザー名>\.vagrant.d\insecure_private_key" -p 2222 vagrant@127.0.0.1

chef-solo/knife-soloによるレシピ実行まで、以上


■追補

○仮想マシンのメモリ設定(VirtualBoxの場合)

仮想マシン上に例えば2MByteのメモリ領域を設定する場合、Vagrantfileファイルを編集し、以下を追加すること。

1
2
3
4
  # allocate the memory for the buffer pool
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
  end

○cookしようとしたときなどに以下のワーニングが出力される場合

1
2
3
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

以下のファイルを削除する

<ユーザホームディレクトリ>.ssh\known_hosts

○boxへのメモリの追加

規定値ではメモリが足りたいため、vagrant box(virtulabox 上の仮想マシン)のメモリを追加すること。 以下Vagrantfileへ記述を追加する。

1
2
3
4
  # allocate the memory for the buffer pool
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
  end