Chef調査

Chef調査開始

chefにはスタンドアロンでも使えるしServer/Clientでも使える。
実際使う時はServer/Clientだけども、まずどんなものかを知るためにスタンドアロンのchef-soloをいじってみることにしました。

で、やり方をググるとさっそくchef-soloで作業環境構築の自動化(ひげろぐ)がヒット。
chef-soloの導入が丁寧に書いてあるので参考にさせていただいた。

既にRuby1.9.2はインストールしてあり(CentOS5.7は1.8.5だったのでSourceを拾ってきてBuildした)、chefもgem installで導入済みだったのでchef-repoのところから始めた。

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

してChefリポジトリを構築。

.chef/solo.rbと.chef/chef.jsonを作ってさっそくchef-soloを実行してみる。

$ sudo chef-solo -c .chef/solo.rb -j .chef/chef.json
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- openssl (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from /usr/local/lib/ruby/1.9.1/net/https.rb:92:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    --(中略)--
    from /usr/local/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef.rb:25:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from /usr/local/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/application/solo.rb:18:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from /usr/local/lib/ruby/gems/1.9.1/gems/chef-0.10.8/bin/chef-solo:23:in `<top (required)>'
    from /usr/local/bin/chef-solo:19:in `load'
    from /usr/local/bin/chef-solo:19:in `<main>'

む。何やらエラーの様子。
rubyバージンなのでよくわからないが、opensslがロードできないと言われてそうだ。

openssl-develが無かった

エラーメッセージでググると
require ‘twitter’のエラー(opensslがロードできない)と言われる(Ruby_log)
を発見。
さっそく、書いてある通りにやってみた。

$ cd /path/to/ruby-src/ext/openssl

$sudo ruby extconf.rb 
=== OpenSSL for Ruby configurator ===
=== Checking for system dependent stuff... ===
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for assert.h... yes
=== Checking for required stuff... ===
checking for openssl/ssl.h... no
=== Checking for required stuff failed. ===
Makefile wasn't created. Fix the errors above.

openssl/ssl.hがないって言われたのでyumでopenssl-develをインストール。

sudo yum install openssl-devel.x86_64
sudo ruby extconf.rb

通ったのでbuild。
make; make install

node_nameでエラー

これでopensslが入ったと思うので、再度chef-soloを実行してみる。

$ sudo /usr/local/bin/chef-solo -c .chef/solo.rb -j .chef/chef.json 
[Fri, 20 Apr 2012 08:48:45 +0900] INFO: *** Chef 0.10.8 ***
[Fri, 20 Apr 2012 08:48:47 +0900] FATAL: Stacktrace dumped to /tmp/chef-solo/chef-stacktrace.out
[Fri, 20 Apr 2012 08:48:47 +0900] FATAL: Chef::Exceptions::CannotDetermineNodeName: Unable to determine node name: configure node_name or configure the system's hostname and fqdn

chef-soloは動いた。でもまたエラー。
調べてみるとnode_nameという値を設定しないといけないみたい。
.chef/solo.rbに追加する。

vi .chef/solo.rb

file_cache_path "/tmp/chef-solo"
cookbook_path "/home/piyo/chef-repo/cookbooks"
node_name "chef-test-01" ←追加

再度実行して、

FATAL: Chef::Exceptions::CookbookNotFound: Cookbook base_packages not found. If you're loading base_packages from another cookbook, make sure you configure the dependency in your metadata

とエラーが出るけど、レシピを書いていないので、これは想定通り。
これで、初期動作の確認は完了です。

cookbookの作成

続けて、書いてある通り
$ rake new_cookbook COOKBOOK=base_packages
を実行してcookbookを作成。
お約束の「knifeを使いなさい」が出ましたのでそっちもやってみました。

$ knife cookbook create COOKBOOK
WARNING: No knife configuration file found
** Creating cookbook COOKBOOK
ERROR: Errno::EACCES: Permission denied - /var/chef

knife configurationが無いと言われてしまった。
参考資料は先に進んでいるがここは勉強なのでknifeの動作環境の整備をしてみる。

knife configure

Where should I put the config file? [~/.chef/knife.rb] /home/piyo/knife-repo/.chef/knife.rb

configurationファイルの場所を指定する。

Please enter the chef server URL: [http://localhost:4000]

よくわからないのでそのままENTER.

Please enter an existing username or clientname for the API: [www] 

よくわからないのでそのままENTER.

Please enter the validation clientname: [chef-validator] 

よくわからないのでそのままENTER.

Please enter the location of the validation key: [/etc/chef/validation.pem] 

よくわからないのでそのままENTER.

Please enter the path to a chef repository (or leave blank): /home/piyo/chef-repo

先ほど構築したリポジトリのディレクトリを指定。

これで動くでしょうか。
先ほどのcookbook作成をもう一回実行してみます。

$ knife cookbook create COOKBOOK -c .chef/knife.rb 
** Creating cookbook COOKBOOK
** Creating README for cookbook: COOKBOOK
** Creating metadata for cookbook: COOKBOOK
$ ls cookbooks
COOKBOOK/  README.md  base_packages/

できた!でも今はいらないので消しときます。

とりあえずここまで。
次はいよいよレシピ作りに取りかかります。
何やらRuby全開の予感がして、手こずりそうです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です