오늘 바람좀 쐬고 오느라, 어제 했던 Chef-Solo정리를 이제서야... 졸리긴 한데, 그리 좋지 않은 기억력에 요즘은 건망증까지...(ㅡ.ㅡ);;, 아무튼, 설치 과정만이라도 까먹기 전에 얼른 메모 해둬야 겠다.


설치 테스트에 사용한 OS는 CentOS 5.4 x86_64이며, VMware ESXi 상의 VM을 하나 만들어서 진행했다. 



요구사항

- Chef 설치시 hostname은 반드시 FQDN이어야 한다. hostname -f 결과가 에러가 발생하면 안됨. FQDN 명심!
- ruby >= 1.8.6 (이라고 되어 있으나, 설치 해본 결과로는 1.8.7은 되야 문제가 없었다)

- rubygems >= 1.3.6 (역시, 1.3.7은 되야 문제가 없었다)
- 권한 문제에 신경쓰기 싫어 root 계정으로 진행했다. 


RPM ruby 제거 및 관련 의존성 패키지 설치

# yum -y groupremove "Ruby"
# yum -y install zlib*
# yum -y install openssl*


ruby 설치

# cd /usr/local/src

# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz

# tar zxvf  ruby-1.8.7.tar.gz

# cd ruby-1.8.7

# ./configure

# make

# make install


# ruby --version

ruby 1.8.7 (2008-05-31 patchlevel 0) [x86_64-linux] 


rubygems 설치


# cd /usr/local/src

# wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz

# tar zxvf rubygems-1.3.7.tgz 

# cd rubygems-1.3.7

# ruby setup.rb

RubyGems 1.3.7 installed


=== 1.3.7 / 2010-05-13


NOTE:


http://rubygems.org is now the default source for downloading gems.


You may have sources set via ~/.gemrc, so you should replace

http://gems.rubyforge.org with http://rubygems.org


http://gems.rubyforge.org will continue to work for the forseeable future.


New features:


* `gem` commands

  * `gem install` and `gem fetch` now report alternate platforms when a

    matching one couldn't be found.

  * `gem contents` --prefix is now the default as specified in --help.  Bug

    #27211 by Mamoru Tasaka.

  * `gem fetch` can fetch of old versions again.  Bug #27960 by Eric Hankins.

  * `gem query` and friends output now lists platforms.  Bug #27856 by Greg

    Hazel.

  * `gem server` now allows specification of multiple gem dirs for

    documentation.  Bug #27573 by Yuki Sonoda.

  * `gem unpack` can unpack gems again.  Bug #27872 by Timothy Jones.

  * `gem unpack` now unpacks remote gems.

  * --user-install is no longer the default.  If you really liked it, see

    Gem::ConfigFile to learn how to set it by default.  (This change was made

    in 1.3.6)

* RubyGems now has platform support for IronRuby.  Patch #27951 by Will Green.


Bug fixes:


* Require rubygems/custom_require if --disable-gem was set.  Bug #27700 by

  Roger Pack.

* RubyGems now protects against exceptions being raised by plugins.

* rubygems/builder now requires user_interaction.  Ruby Bug #1040 by Phillip

  Toland.

* Gem::Dependency support #version_requirements= with a warning.  Fix for old

  Rails versions.  Bug #27868 by Wei Jen Lu.

* Gem::PackageTask depends on the package dir like the other rake package

  tasks so dependencies can be hooked up correctly.



------------------------------------------------------------------------------


RubyGems installed the following executables:

/usr/local/bin/gem 


gem 환경 변수 확인

# gem env

RubyGems Environment:

  - RUBYGEMS VERSION: 1.3.7

  - RUBY VERSION: 1.8.7 (2008-05-31 patchlevel 0) [x86_64-linux]

  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8

  - RUBY EXECUTABLE: /usr/local/bin/ruby

  - EXECUTABLE DIRECTORY: /usr/local/bin

  - RUBYGEMS PLATFORMS:

    - ruby

    - x86_64-linux

  - GEM PATHS:

     - /usr/local/lib/ruby/gems/1.8

     - /root/.gem/ruby/1.8

  - GEM CONFIGURATION:

     - :update_sources => true

     - :verbose => true

     - :benchmark => false

     - :backtrace => false

     - :bulk_threshold => 1000

  - REMOTE SOURCES:

     - http://rubygems.org/


OPScode 소스 추가

# gem sources -a http://gems.opscode.com
http://gems.opscode.com added to sources


# gem env

RubyGems Environment:

  - RUBYGEMS VERSION: 1.3.7

  - RUBY VERSION: 1.8.7 (2008-05-31 patchlevel 0) [x86_64-linux]

  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8

  - RUBY EXECUTABLE: /usr/local/bin/ruby

  - EXECUTABLE DIRECTORY: /usr/local/bin

  - RUBYGEMS PLATFORMS:

    - ruby

    - x86_64-linux

  - GEM PATHS:

     - /usr/local/lib/ruby/gems/1.8

     - /root/.gem/ruby/1.8

  - GEM CONFIGURATION:

     - :update_sources => true

     - :verbose => true

     - :benchmark => false

     - :backtrace => false

     - :bulk_threshold => 1000

     - :sources => ["http://rubygems.org/", "http://gems.opscode.com"]

  - REMOTE SOURCES:

     - http://rubygems.org/

     - http://gems.opscode.com 

(뒤에 나올 cookbook 소스가 OPScode를 통해 이용되어 관련성이 있는 것으로 보임. 아직 자세한 연관성은 미파악상태라 좀더 알아봐야 겠다.)

chef 설치

# gem install chef

Building native extensions.  This could take a while...

Successfully installed mixlib-config-1.1.2

Successfully installed mixlib-cli-1.2.0

Successfully installed mixlib-log-1.3.0

Successfully installed mixlib-authentication-1.1.4

Successfully installed json-1.4.6

Successfully installed extlib-0.9.15

Successfully installed systemu-1.2.0

Successfully installed ohai-0.5.8

Successfully installed mime-types-1.16

Successfully installed rest-client-1.6.1

Successfully installed bunny-0.6.0

Successfully installed abstract-1.0.0

Successfully installed erubis-2.6.6

Successfully installed moneta-0.6.0

Successfully installed highline-1.6.1

Successfully installed uuidtools-2.1.2

Successfully installed chef-0.9.14

17 gems installed

Installing ri documentation for mixlib-config-1.1.2...

Installing ri documentation for mixlib-cli-1.2.0...

Unrecognized directive 'short' in README.rdoc

Unrecognized directive 'long' in README.rdoc

Unrecognized directive 'description' in README.rdoc

Unrecognized directive 'default' in README.rdoc

Unrecognized directive 'required' in README.rdoc

Unrecognized directive 'on' in README.rdoc

Unrecognized directive 'boolean' in README.rdoc

Unrecognized directive 'show_options' in README.rdoc

Unrecognized directive 'exit' in README.rdoc

Unrecognized directive 'proc' in README.rdoc

Installing ri documentation for mixlib-log-1.3.0...

Installing ri documentation for mixlib-authentication-1.1.4...

Installing ri documentation for json-1.4.6...

Installing ri documentation for extlib-0.9.15...

Installing ri documentation for systemu-1.2.0...

Installing ri documentation for ohai-0.5.8...

Installing ri documentation for mime-types-1.16...

Installing ri documentation for rest-client-1.6.1...

Installing ri documentation for bunny-0.6.0...

Installing ri documentation for abstract-1.0.0...

Installing ri documentation for erubis-2.6.6...

Installing ri documentation for moneta-0.6.0...

Installing ri documentation for highline-1.6.1...

Installing ri documentation for uuidtools-2.1.2...

Installing ri documentation for chef-0.9.14...

Installing RDoc documentation for mixlib-config-1.1.2...

Installing RDoc documentation for mixlib-cli-1.2.0...

Unrecognized directive 'short' in README.rdoc

Unrecognized directive 'long' in README.rdoc

Unrecognized directive 'description' in README.rdoc

Unrecognized directive 'default' in README.rdoc

Unrecognized directive 'required' in README.rdoc

Unrecognized directive 'on' in README.rdoc

Unrecognized directive 'boolean' in README.rdoc

Unrecognized directive 'show_options' in README.rdoc

Unrecognized directive 'exit' in README.rdoc

Unrecognized directive 'proc' in README.rdoc

Installing RDoc documentation for mixlib-log-1.3.0...

Installing RDoc documentation for mixlib-authentication-1.1.4...

Installing RDoc documentation for json-1.4.6...

Installing RDoc documentation for extlib-0.9.15...

Installing RDoc documentation for systemu-1.2.0...

Installing RDoc documentation for ohai-0.5.8...

Installing RDoc documentation for mime-types-1.16...

Installing RDoc documentation for rest-client-1.6.1...

Installing RDoc documentation for bunny-0.6.0...

Installing RDoc documentation for abstract-1.0.0...

Installing RDoc documentation for erubis-2.6.6...

Installing RDoc documentation for moneta-0.6.0...

Installing RDoc documentation for highline-1.6.1...

Installing RDoc documentation for uuidtools-2.1.2...

Installing RDoc documentation for chef-0.9.14... 


cookboot 설치

(git가 필요해 EPEL을 통해 git를 설치 해준다.)

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

# yum -y install git

# mkdir /root/chef

# cd /root/chef

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

Cloning into chef-repo...

remote: Counting objects: 173, done.

remote: Compressing objects: 100% (106/106), done.

remote: Total 173 (delta 62), reused 138 (delta 40)

Receiving objects: 100% (173/173), 27.25 KiB, done.

Resolving deltas: 100% (62/62), done.


# ls -al

total 16

drwxr-xr-x   3 root root 4096 Mar 27 03:19 .

drwxr-x---  20 root root 4096 Mar 27 03:16 ..

drwxr-xr-x 130 root root 4096 Mar 27 03:19 chef-repo

# ls -al chef-repo
total 44

drwxr-xr-x 8 root root 4096 Mar 27 03:35 .

drwxr-xr-x 3 root root 4096 Mar 27 03:35 ..

drwxr-xr-x 2 root root 4096 Mar 27 03:35 certificates

drwxr-xr-x 2 root root 4096 Mar 27 03:35 config

drwxr-xr-x 2 root root 4096 Mar 27 03:35 cookbooks

drwxr-xr-x 2 root root 4096 Mar 27 03:35 data_bags

drwxr-xr-x 8 root root 4096 Mar 27 03:35 .git

-rw-r--r-- 1 root root   18 Mar 27 03:35 .gitignore

-rw-r--r-- 1 root root 2171 Mar 27 03:35 Rakefile

-rw-r--r-- 1 root root 3521 Mar 27 03:35 README.md

drwxr-xr-x 2 root root 4096 Mar 27 03:35 roles

# ls -al chef-repo/cookbooks

total 12

drwxr-xr-x 2 root root 4096 Mar 27 03:35 .

drwxr-xr-x 8 root root 4096 Mar 27 03:35 ..

-rw-r--r-- 1 root root 2930 Mar 27 03:35 README.md 

# cd chef-repo

# rm -rf cookbooks

# git clone git://github.com/opscode/cookbooks.git

# ls -al cookbooks/

total 552

drwxr-xr-x 130 root root  4096 Mar 27 03:44 .

drwxr-xr-x   8 root root  4096 Mar 27 03:44 ..

drwxr-xr-x   5 root root  4096 Mar 27 03:44 activemq

drwxr-xr-x   3 root root  4096 Mar 27 03:44 ant

drwxr-xr-x   7 root root  4096 Mar 27 03:44 apache2

drwxr-xr-x   4 root root  4096 Mar 27 03:44 apparmor

drwxr-xr-x   5 root root  4096 Mar 27 03:44 application

drwxr-xr-x   6 root root  4096 Mar 27 03:44 apt

drwxr-xr-x   6 root root  4096 Mar 27 03:44 aws

drwxr-xr-x   6 root root  4096 Mar 27 03:44 bluepill

drwxr-xr-x   3 root root  4096 Mar 27 03:44 boost

drwxr-xr-x   3 root root  4096 Mar 27 03:44 build-essential

drwxr-xr-x   4 root root  4096 Mar 27 03:44 capistrano

drwxr-xr-x   5 root root  4096 Mar 27 03:44 chef

drwxr-xr-x   5 root root  4096 Mar 27 03:44 chef-client

drwxr-xr-x   7 root root  4096 Mar 27 03:44 cloudkick

-rw-r--r--   1 root root   408 Mar 27 03:44 CONTRIBUTING

drwxr-xr-x   6 root root  4096 Mar 27 03:44 couchdb

drwxr-xr-x   3 root root  4096 Mar 27 03:44 cron

drwxr-xr-x   7 root root  4096 Mar 27 03:44 daemontools

drwxr-xr-x   4 root root  4096 Mar 27 03:44 database

drwxr-xr-x   4 root root  4096 Mar 27 03:44 django

drwxr-xr-x   7 root root  4096 Mar 27 03:44 djbdns

drwxr-xr-x   6 root root  4096 Mar 27 03:44 dmg

drwxr-xr-x   3 root root  4096 Mar 27 03:44 drbd

drwxr-xr-x   6 root root  4096 Mar 27 03:44 dynect

drwxr-xr-x   5 root root  4096 Mar 27 03:44 dynomite

drwxr-xr-x   4 root root  4096 Mar 27 03:44 ec2

drwxr-xr-x   3 root root  4096 Mar 27 03:44 emacs

drwxr-xr-x   4 root root  4096 Mar 27 03:44 erlang

drwxr-xr-x   4 root root  4096 Mar 27 03:44 fail2ban

drwxr-xr-x   6 root root  4096 Mar 27 03:44 gems

drwxr-xr-x   4 root root  4096 Mar 27 03:44 git

drwxr-xr-x   8 root root  4096 Mar 27 03:44 .git

-rw-r--r--   1 root root    38 Mar 27 03:44 .gitignore

drwxr-xr-x   5 root root  4096 Mar 27 03:44 glassfish

drwxr-xr-x   4 root root  4096 Mar 27 03:44 gnu_parallel

drwxr-xr-x   5 root root  4096 Mar 27 03:44 god

drwxr-xr-x   7 root root  4096 Mar 27 03:44 gunicorn

drwxr-xr-x   4 root root  4096 Mar 27 03:44 hadoop

drwxr-xr-x   5 root root  4096 Mar 27 03:44 haproxy

drwxr-xr-x   3 root root  4096 Mar 27 03:44 heartbeat

drwxr-xr-x   3 root root  4096 Mar 27 03:44 imagemagick

drwxr-xr-x   4 root root  4096 Mar 27 03:44 instiki

drwxr-xr-x   6 root root  4096 Mar 27 03:44 iptables

drwxr-xr-x   5 root root  4096 Mar 27 03:44 java

drwxr-xr-x   3 root root  4096 Mar 27 03:44 java_sun

drwxr-xr-x   5 root root  4096 Mar 27 03:44 jetty

drwxr-xr-x   6 root root  4096 Mar 27 03:44 jira

drwxr-xr-x   5 root root  4096 Mar 27 03:44 jpackage

drwxr-xr-x   4 root root  4096 Mar 27 03:44 keepalived

drwxr-xr-x   5 root root  4096 Mar 27 03:44 kickstart

-rw-r--r--   1 root root 10850 Mar 27 03:44 LICENSE

drwxr-xr-x   5 root root  4096 Mar 27 03:44 logrotate

drwxr-xr-x   3 root root  4096 Mar 27 03:44 logwatch

drwxr-xr-x   3 root root  4096 Mar 27 03:44 lvm

drwxr-xr-x   3 root root  4096 Mar 27 03:44 man

drwxr-xr-x   5 root root  4096 Mar 27 03:44 maradns

drwxr-xr-x   3 root root  4096 Mar 27 03:44 maven

drwxr-xr-x   6 root root  4096 Mar 27 03:44 memcached

drwxr-xr-x   3 root root  4096 Mar 27 03:44 mercurial

drwxr-xr-x   7 root root  4096 Mar 27 03:44 munin

drwxr-xr-x   8 root root  4096 Mar 27 03:44 mysql

drwxr-xr-x   8 root root  4096 Mar 27 03:44 nagios

drwxr-xr-x   3 root root  4096 Mar 27 03:44 nanite

drwxr-xr-x   7 root root  4096 Mar 27 03:44 nginx

-rw-r--r--   1 root root   999 Mar 27 03:44 NOTICE

drwxr-xr-x   3 root root  4096 Mar 27 03:44 nscd

drwxr-xr-x   5 root root  4096 Mar 27 03:44 ntp

drwxr-xr-x   5 root root  4096 Mar 27 03:44 ohai

drwxr-xr-x   5 root root  4096 Mar 27 03:44 one-shot

drwxr-xr-x   6 root root  4096 Mar 27 03:44 openldap

drwxr-xr-x   4 root root  4096 Mar 27 03:44 openssh

drwxr-xr-x   4 root root  4096 Mar 27 03:44 openssl

drwxr-xr-x   5 root root  4096 Mar 27 03:44 openvpn

drwxr-xr-x   5 root root  4096 Mar 27 03:44 ossec

drwxr-xr-x   5 root root  4096 Mar 27 03:44 packages

drwxr-xr-x   5 root root  4096 Mar 27 03:44 pacman

drwxr-xr-x   5 root root  4096 Mar 27 03:44 passenger_apache2

drwxr-xr-x   5 root root  4096 Mar 27 03:44 passenger_enterprise

drwxr-xr-x   7 root root  4096 Mar 27 03:44 pdns

drwxr-xr-x   5 root root  4096 Mar 27 03:44 perl

drwxr-xr-x   7 root root  4096 Mar 27 03:44 php

drwxr-xr-x   5 root root  4096 Mar 27 03:44 postfix

drwxr-xr-x   5 root root  4096 Mar 27 03:44 postgresql

drwxr-xr-x   5 root root  4096 Mar 27 03:44 pxe_dust

drwxr-xr-x   6 root root  4096 Mar 27 03:44 python

drwxr-xr-x   5 root root  4096 Mar 27 03:44 quick_start

drwxr-xr-x   5 root root  4096 Mar 27 03:44 rabbitmq

drwxr-xr-x   3 root root  4096 Mar 27 03:44 rabbitmq_chef

drwxr-xr-x   6 root root  4096 Mar 27 03:44 radiant

drwxr-xr-x   5 root root  4096 Mar 27 03:44 rails

drwxr-xr-x   4 root root  4096 Mar 27 03:44 rails_enterprise

-rw-r--r--   1 root root  1227 Mar 27 03:44 Rakefile

-rw-r--r--   1 root root   659 Mar 27 03:44 README

drwxr-xr-x   5 root root  4096 Mar 27 03:44 redmine

drwxr-xr-x   4 root root  4096 Mar 27 03:44 reprepro

drwxr-xr-x   5 root root  4096 Mar 27 03:44 resolver

drwxr-xr-x   8 root root  4096 Mar 27 03:44 riak

drwxr-xr-x   3 root root  4096 Mar 27 03:44 rsync

drwxr-xr-x   6 root root  4096 Mar 27 03:44 rsyslog

drwxr-xr-x   4 root root  4096 Mar 27 03:44 ruby

drwxr-xr-x   5 root root  4096 Mar 27 03:44 ruby_enterprise

drwxr-xr-x   3 root root  4096 Mar 27 03:44 rubygems

drwxr-xr-x   7 root root  4096 Mar 27 03:44 runit

drwxr-xr-x   3 root root  4096 Mar 27 03:44 rush

drwxr-xr-x   7 root root  4096 Mar 27 03:44 samba

drwxr-xr-x   7 root root  4096 Mar 27 03:44 sbuild

drwxr-xr-x   3 root root  4096 Mar 27 03:44 screen

drwxr-xr-x   5 root root  4096 Mar 27 03:44 snort

drwxr-xr-x   7 root root  4096 Mar 27 03:44 solr

drwxr-xr-x   3 root root  4096 Mar 27 03:44 sqlite

drwxr-xr-x   4 root root  4096 Mar 27 03:44 ssh_known_hosts

drwxr-xr-x   4 root root  4096 Mar 27 03:44 stompserver

drwxr-xr-x   5 root root  4096 Mar 27 03:44 subversion

drwxr-xr-x   5 root root  4096 Mar 27 03:44 sudo

drwxr-xr-x   4 root root  4096 Mar 27 03:44 teamspeak

drwxr-xr-x   5 root root  4096 Mar 27 03:44 teamspeak3

drwxr-xr-x   3 root root  4096 Mar 27 03:44 thrift

drwxr-xr-x   3 root root  4096 Mar 27 03:44 tmux

drwxr-xr-x   5 root root  4096 Mar 27 03:44 tomcat

drwxr-xr-x   8 root root  4096 Mar 27 03:44 tomcat6

drwxr-xr-x   5 root root  4096 Mar 27 03:44 trac

drwxr-xr-x   8 root root  4096 Mar 27 03:44 transmission

drwxr-xr-x   5 root root  4096 Mar 27 03:44 ubuntu

drwxr-xr-x   4 root root  4096 Mar 27 03:44 ucspi-tcp

drwxr-xr-x   5 root root  4096 Mar 27 03:44 unicorn

drwxr-xr-x   4 root root  4096 Mar 27 03:44 users

drwxr-xr-x   5 root root  4096 Mar 27 03:44 varnish

drwxr-xr-x   4 root root  4096 Mar 27 03:44 vim

drwxr-xr-x   5 root root  4096 Mar 27 03:44 wordpress

drwxr-xr-x   3 root root  4096 Mar 27 03:44 xfs

drwxr-xr-x   3 root root  4096 Mar 27 03:44 xml

drwxr-xr-x   8 root root  4096 Mar 27 03:44 zenoss

drwxr-xr-x   3 root root  4096 Mar 27 03:44 zlib

drwxr-xr-x   3 root root  4096 Mar 27 03:44 zsh

 


chef-solo 설정 파일 작성

# cat /root/chef/solo.rb
cookbook_path "/root/chef/chef-repo/cookbooks"

(단순하다. 좀전에 git로 받아둔 cookbook의 경로를 등록해두면 된다. 단, 절대경로여야 함)


이제 Chef-Solo설치는 완료다.(빠진게 있었던가 ㅡㅡ?? 아무튼.... 잘안되면 지적질 댓글을....)
그럼, cookbook에 있는 테스트용 Recipe를 하나 시연 해보고 내용도 간략히 살펴보자.


실행할 Recipe는 "quick_start"라는 것으로, Chef를 통해 실행하게 되면, 실행된 노드의 /tmp디렉토리에 "If a tree falls in the forest..."라는 TEXT내용을 가진 deep_thought.txt 파일을 생성시킨다. 해보자. 진짜 되는지...

json 파일을 만든다. 이파일은 Chef를 통해, 수행할 작업(Recipe)을 정의 하는것 같다.

# cat /root/chef/node.json

{

        "run_list": [ "recipe[quick_start]" ]

(quick_start라는, 지금 수행해보려는 Recpie가 명시되어 있다.)

Recpit 수행

# chef-solo -c /root/chef/solo.rb -j /root/chef/node.json

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: Setting the run_list to ["recipe[quick_start]"] from JSON

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: Starting Chef Run (Version 0.9.14)

[Sun, 27 Mar 2011 03:46:09 +0900] WARN: Missing gem 'mysql'

[Sun, 27 Mar 2011 03:46:09 +0900] WARN: Missing gem 'right_aws'

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: Writing updated content for template[/tmp/deep_thought.txt] to /tmp/deep_thought.txt

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: Chef Run complete in 0.305653 seconds

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: cleaning the checksum cache

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: Running report handlers

[Sun, 27 Mar 2011 03:46:09 +0900] INFO: Report handlers complete 


Recpie 수행 결과 확인

# ls -al /tmp/

total 96

drwxrwxrwt 15 root root 4096 Mar 27 03:46 .

drwxr-xr-x 23 root root 4096 Mar 27 02:27 ..

-rw-------  1 root root   54 Mar 27 03:46 deep_thought.txt

drwx------  3 root root 4096 Mar 27 02:28 gconfd-root

-rw-------  1 root root   66 Mar 27 02:28 .gdmSCQWSV

srw-rw-rw-  1 root root    0 Mar 27 02:28 .gdm_socket

drwxrwxrwt  2 root root 4096 Mar 27 02:28 .ICE-unix

drwx------  2 root root 4096 Mar 27 02:28 keyring-lh8Uxr

srwxr-xr-x  1 root root    0 Mar 27 02:28 mapping-root

drwx------  2 root root 4096 Mar 27 02:28 orbit-root

-rw-------  1 root root 1024 Oct 23  2009 .rnd

-rw-r--r--  1 root root    5 Mar 27 03:28 scim-bridge-0.3.0.lockfile-0@localhost:0.0

srwxr-xr-x  1 root root    0 Mar 27 02:28 scim-bridge-0.3.0.socket-0@localhost:0.0

srw-------  1 root root    0 Mar 27 02:28 scim-helper-manager-socket-root

srw-------  1 root root    0 Mar 27 02:28 scim-panel-socket:0-root

srw-------  1 root root    0 Mar 27 02:28 scim-socket-frontend-root

drwx------  2 root root 4096 Mar 27 02:28 ssh-wCRkwr3275

drwx------  2 root root 4096 Mar 27 02:28 virtual-root.BcUGAR

drwxr-xr-x  2 root root 4096 Oct 23  2009 vmware-config0

drwxr-xr-x  2 root root 4096 Oct 23  2009 vmware-config1

drwxr-xr-x  2 root root 4096 Dec 17  2009 vmware-config2

drwxr-xr-x  2 root root 4096 Jul  9  2010 vmware-config3

drwxrwxrwt  3 root root 4096 Oct 23  2009 VMwareDnD

drwx------  2 root root 4096 Mar 27 02:28 vmware-root

-r--r--r--  1 root root   11 Mar 27 02:28 .X0-lock

drwxrwxrwt  2 root root 4096 Mar 27 02:28 .X11-unix
 

# cat /tmp/deep_thought.txt 

Todays deep thought: If a tree falls in the forest...

=> 정상적으로 수행되었다.



[Recipe 분석]

수행했던 Recipe 디렉토리로 이동

# cd /root/chef/chef-repo/cookbooks/quick_start/

# ls -al

total 28

drwxr-xr-x   5 root root 4096 Mar 27 03:44 .

drwxr-xr-x 130 root root 4096 Mar 27 03:44 ..

drwxr-xr-x   2 root root 4096 Mar 27 03:44 attributes

-rw-r--r--   1 root root 1186 Mar 27 03:44 metadata.json

-rw-r--r--   1 root root  535 Mar 27 03:44 metadata.rb

drwxr-xr-x   2 root root 4096 Mar 27 03:44 recipes

drwxr-xr-x   3 root root 4096 Mar 27 03:44 templates 

(몇개의 파일과 디렉토리들이 있다.)

중요한 것은 recipes이고, 나머지는 이 recipes에 정의된 작업이 수행되는데 필요한 정보를 담고 있다. 
(template, recpites, attributes는 어떤 Recipe든지 default.rb 파일이 가장 기본이며, 먼저 읽혀지는듯 함)

# cat recipes/default.rb

template "/tmp/deep_thought.txt" do

  source "deep_thought.txt.erb"

  variables :deep_thought => node[:deep_thought]

  action :create

end 

# cat attributes/default.rb 

deep_thought "If a tree falls in the forest..."


# cat templates/default/deep_thought.txt.erb 

Todays deep thought: <%= @deep_thought %>

하나의 recipe단위 내에서 수행할 작업들을 template라는 이름으로 정의(하는듯 함...ㅡㅡ;).
여기서는 quick_start라는 Recipe를 수행하였고, 그 Recipe에는 보는 바와 같은 템플릿 하나가 등록되어 있다.
내용을 보면 대충 이해가 되리라 본다. action이 create이니 /tmp/deep_thought.txt를 생성한다는 것 같고, source는 templates/default/deep_thought.txt.erb파일을 가져다가 생성한다~ 뭐 그런... variables는 source파일을 바탕으로 생성하되, source파일 내의 deep_thought변수를  attributes/default.rb에서 정의된 값으로 바꾸어라는 그런... (이해가 안될지도 모른다. 내 설명이 엄청 저질ㅡㅡ;;이라 그런 것이니, 자책마시길...)

대충, 설치부터 간단한 샘플예제 수행까지 정상적이니 마무리 해야 겠다. 물론 더 난이도 높은 Recipe를 수행할때면,러가 뜨거나, Cookbook/Recipe에 대한 허접한 이해도로 인해, 엄청~ 삽질하겠지만, 뭐 첫술에 배부를수는 없지 않나~ 이것부터 차근차근 해두면, 곧 Chef Server/Client로 맘대로 요리(?)할 수 있지 않을까~~

To be Continue~~~~~~~~




 
Posted by 사랑줍는거지
,