CentOS6.4 で Ruby1.9.3, RubyGems をインストールしてある環境で、chef-solo を使って ntpd をインストールしてみました。
ここでは、chef, knife-solo をインストールするところからスクリプトに含めています。
#! /bin/sh ruby=ruby-1.9.3-p392 rubygems=rubygems-2.0.3 /usr/local/ruby/${ruby}/bin/gem install chef knife-solo mkdir -p $HOME/chef-solo/cookbooks cat > $HOME/chef-solo/solo.rb <<EOF file_cache_path "/tmp/chef-solo" cookbook_path "/root/chef-solo/cookbooks" EOF cat > $HOME/chef-solo/chef.json <<EOF { "run_list": [ "recipe[ntp]" ] } EOF /usr/local/ruby/${ruby}/bin/knife cookbook create ntp -o $HOME/chef-solo/cookbooks cat > $HOME/chef-solo/cookbooks/ntp/recipes/default.rb <<EOF # Cookbook Name:: ntp # Recipe:: default package "ntp" do action :install end service "ntpd" do supports :status => true, :restart => true action [ :enable, :start ] end template "/etc/ntp.conf" do source "ntp.conf" group "root" owner "root" mode "400" notifies :restart, "service[ntpd]" end EOF cat > $HOME/chef-solo/cookbooks/ntp/templates/default/ntp.conf <<EOF driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server -4 ntp.nict.jp iburst server -4 ntp.nict.jp iburst server -4 ntp.nict.jp iburst includefile /etc/ntp/crypto/pw keys /etc/ntp/keys EOF /usr/local/ruby/${ruby}/bin/chef-solo -c $HOME/chef-solo/solo.rb -j $HOME/chef-solo/chef.json
最後の行で、chef-soloを実行してレシピを適用しています。
ちなみに、作成したディレクトリ構成は下記のようになります。
/root/chef-solo/ |-- chef.json |-- cookbooks | `-- ntp | |-- CHANGELOG.md | |-- README.md | |-- attributes | |-- definitions | |-- files | | `-- default | |-- libraries | |-- metadata.rb | |-- providers | |-- recipes | | `-- default.rb | |-- resources | `-- templates | `-- default | `-- ntp.conf `-- solo.rb
$HOME/chef-solo/cookbooks にレシピを追加していって、$HOME/chef-solo/chef.json に実行するレシピを記載して、「chef-solo -c ./solo.rb -j ./chef.json」を実行すると、同じ環境がどこでも用意できるということになります。