chef-soloでローカルのサーバにインストールしてみる

CentOSにRuby2.1.1をインストールする
の続き

chef-soloでローカルのサーバにインストールしてみる。
今回はphpをインストールしてみる。

Chefのインストール

gemでchefをインストールする。

$ sudo gem install chef

その後、knifeの設定を行う。
すべてデフォルトのままでOKみたい。

$ knife configure

knifeの設定が終わると、下記のようなファイルが作られる。

$ cat ~/.chef/knife.rb
log_level                :info
log_location             STDOUT
node_name                'ユーザー名v'
client_key               '/home/ユーザー名/.chef/dev.pem'
validation_client_name   'chef-validator'
validation_key           '/etc/chef-server/chef-validator.pem'
chef_server_url          'https://localhost:443'
syntax_check_cache_path  '/home/ユーザー名/.chef/syntax_check_cache'

あと、ディレクトリ構成の確認用にtreeコマンドを入れておく。
(今回の確認用に入れるだけで、Chefを使うために必要というわけではありません)

$ sudo yum install tree

今回は、knife-soloを使う場合と使わない場合の2通りを試すので、
ここで一旦VirtualBoxのスナップショットをとっておく。


knife-soloを使わないでインストール

knife-soloを使わない場合、gitが必要になるので、gitを入れておく。

$ sudo yum install git

gitを使って、chefのリポジトリの雛形みたいなのをダウンロードする。

$ git clone git://github.com/opscode/chef-repo.git

ディレクトリ構成は下記のようになっている。

$ tree chef-repo/
ohef-repo/
├── LICENSE
├── README.md
├── Rakefile
├── certificates
│   └── README.md
├── chefignore
├── config
│   └── rake.rb
├── cookbooks
│   └── README.md
├── data_bags
│   └── README.md
├── environments
│   └── README.md
└── roles
    └── README.md

リポジトリに移動。

$ cd chef-repo/

cookbookを作成する。

$ knife cookbook create php -o cookbooks

作成したcookbookのディレクトリ構成は下記のようになっている。

$ tree cookbooks/
cookbooks/
├── README.md
└── php
    ├── CHANGELOG.md
    ├── README.md
    ├── attributes
    ├── definitions
    ├── files
    │   └── default
    ├── libraries
    ├── metadata.rb
    ├── providers
    ├── recipes
    │   └── default.rb
    ├── resources
    └── templates
        └── default

PHPをインストールするためにレシピを書く。

$ vi cookbooks/php/recipes/default.rb
package "php" do
  action :install
end

どのレシピを実行するか指定する。

$ vi localhost.json
{
  "run_list" : [
    "recipe[php]"
  ]
}

テンポラリのディレクトリとcookbooksのパスを指定する。

$ vi solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/home/ユーザー名/chef-repo/cookbooks"]

chef-soloを実行。

$ sudo chef-solo -c solo.rb -j ./localhost.json

PHPが入った。

$ php -v
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

knife-soloを使ってインストール

とっておいたスナップショットに環境を戻す。

knife-soloを使うので、インストールする。

$ sudo gem install knife-solo

knife-soloでchefのリポジトリを作成する。

$ knife solo init chef-repo

ディレクトリ構成は下記のようになっている。

$ tree chef-repo/
chef-repo/
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks

リポジトリに移動。

$ cd chef-repo/

cookbookを作成する。
knife-soloを使わない場合と違い、site-cookbooksに作るのが一般的みたい。

$ knife cookbook create php -o site-cookbooks

作成したcookbookのディレクトリ構成は下記のようになっている。

$ tree site-cookbooks/
site-cookbooks/
└── php
    ├── CHANGELOG.md
    ├── README.md
    ├── attributes
    ├── definitions
    ├── files
    │   └── default
    ├── libraries
    ├── metadata.rb
    ├── providers
    ├── recipes
    │   └── default.rb
    ├── resources
    └── templates
        └── default

PHPをインストールするためにレシピを書く。

$ vi site-cookbooks/php/recipes/default.rb
package "php" do
  action :install
end

どのレシピを実行するか指定する。
knife-soloを使わない場合と違い、jsonファイルはnodesディレクトリに置くみたい。

$ vi nodes/localhost.json
{
  "run_list" : [
    "recipe[php]"
  ]
}

knife soloで実施する。
この時、10回くらいパスワード入力を求められるが頑張る。

$ knife solo cook localhost

PHPが入った。

$ php -v
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies