teketeke_55の日記

技術メモとか

fedora 16 へchefをinstall その1

[fedora][chef]

rubyのサーバ構成管理ツールのchefを試してみた。

構成は

[server+workstation] fedora16
[client] sientfic linux 6.1

とする。
今回はインストールと疎通確認まで。
ほとんど公式サイトのコピペなので詳細はそちらを参照してください。
http://wiki.opscode.com/display/chef/Installing+Chef+Server

serverのインストール

fedora16では公式で用意したbootstrapなどのパッケージが対応しきれていないため、
yumやgemを使用してインストールをする。

依存関係のインストール

yumで以下のパッケージをインストール
ruby ruby-devel ruby-ri ruby-rdoc ruby-shadow gcc gcc-c++ automake autoconf make curl dmidecode zlib libxml
gemで以下のパッケージをインストール
libxml-ruby merb-assets merb-core merb-helpers merb-param-protection merb-slices thin merb-haml haml coderay

gecodeのインストール

fedora16ではパッケージが無いのでfedora14からrpmをひろってくる

http://rpm.aegisco.com/aegisco/fc/14/x86_64/
gecode-3.5.0-1.fc14.x86_64.rpm
gecode-devel-3.5.0-1.fc14.x86_64.rpm 

CouchDB のインストール

今回はfedora10用のマニュアルを参照してインストールした
http://wiki.apache.org/couchdb/Installing_on_Fedora10
※ドキュメントをWEBで公開するように設計されたデータベースらしい

http://www.atmarkit.co.jp/fdb/rensai/09_couchdb/01/couchdb01.html

  # yum install icu libicu-devel js js-devel libcurl-devel
  # wget http://www.apache.org/dist/incubator/couchdb/0.8.1-incubating/apache-couchdb-0.8.1-incubating.tar.gz
  # tar -xzvf apache-couchdb-0.8.1-incubating.tar.gz 
  # cd apache-couchdb-0.8.1-incubating
  # ./configure  --with-erlang=/usr/lib64/erlang/usr/include/
  # make && make install

  # adduser -r -d /usr/local/var/lib/couchdb couchdb
  # chown -R couchdb /usr/local/var/lib/couchdb
  # chown -R couchdb /usr/local/var/log/couchdb
  # /usr/local/bin/
  # sudo -u couchdb ./couchdb
  # /usr/local/etc/rc.d/couchdb start

起動したらブラウザからアクセスして確認

http://localhost:5984/_utils/index.html
下記の様に表示されるはず。

f:id:teketeke_55:20111209173731p:image


見えない場合はファイヤーウォールやSELINUXの設定を確認しよう

rabbitmqのインストール

wget http://www.rabbitmq.com/releases/rabbitmq-server/v2.7.0/rabbitmq-server-2.7.0-1.noarch.rpm
rpm -ivh rabbitmq-server-2.7.0-1.noarch.rpm 
rabbitmqctl add_vhost /chef
rabbitmqctl add_user chef testing
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
/etc/init.d/rabbitmq-server start

参照 http://www.rabbitmq.com/

chef serverのインストール

gem install chef-server chef-server-api chef-server chef-solr chef-server-webui
server.rb(コンフィグファイル)設定
vim /etc/chef/server.rb
log_level          :info
log_location       STDOUT
chef_server_url    "http://localhost:4000"
file_cache_path    "/var/cache/chef"
sandbox_path       "/var/cache/chef/sandboxes"
checksum_path      "/var/lib/chef/cookbook_index"
node_path          "/var/lib/chef/node"
cookbook_tarball_path  "/var/lib/chef/cookbook-tarballs"

validation_client_name "chef-validator"
validation_key         "/etc/chef/validation.pem"
client_key             "/etc/chef/client.pem"

supportdir = "/var/lib/chef"
solr_jetty_path File.join(supportdir, "solr", "jetty")
solr_data_path  File.join(supportdir, "solr", "data")
solr_home_path  File.join(supportdir, "solr", "home")
solr_heap_size  "256M"

solr_url        "http://localhost:8983"

umask 0022

signing_ca_cert    "/etc/chef/certificates/cert.pem"
signing_ca_key     "/etc/chef/certificates/key.pem"
signing_ca_user    "chef"
signing_ca_group   "chef"~                           
 
umask 0022

Mixlib::Log::Formatter.show_time = false
起動
/etc/init.d/chef-exander start
/etc/init.d/chef-solor start
/etc/init.d/chef-server start
chef-server-webui -p 4040 -e production

webuiだけ起動スクリプトが無かったのでそのまま起動している

確認

以下のプロセスが動いているか確認する

Name Listen Port Example Program Name in ps (Erlang programs truncated)
Chef Server 4000 merb : chef-server (api) : worker (port 4000)
Chef Server WebUI 4040 merb : chef-server-webui : worker (port 4040)
CouchDB 5984 beam.smp -Bd -K true ? -root /usr/local/lib/erlang -progname erl ? -noshell -noinput -couch_ini /usr/local/etc/couchdb/default.ini /usr/local/etc/couchdb/local.ini -s couch
RabbitMQ 5672 {{beam.smp -W w -K true -A30 ? -root /usr/local/lib/erlang -progname erl ? -noshell -noinput -s rabbit -sname
rabbit -rabbit tcp_listeners [{"0.0.0.0", 5672}]}}
Chef Solr 8983 /usr/bin/java -Xmx250M -Xms250M -Dsolr.data.dir=/opscode/chef/features/data/solr/data -Dsolr.solr.home=/opscode/chef/features/data/solr/home -jar /opscode/chef/features/data/solr/jetty/start.jar
Chef Expander none ruby ./chef-solr/bin/chef-expander -c /etc/chef/solr.rb -l debug

webuiの確認
http://fedora16:4000

初期パスは画面右側に書いてある
recipiの確認やclientの追加などいろいろできるみたい。

f:id:teketeke_55:20111209173729j:image

Knifeコマンド用クライアントの作成

Knifeはコマンドラインでchefサーバの設定ができる便利ツール
後で出てくるchef-clientのユーザーとは別なので気を付けよう。

mkdir -p ~/.chef
sudo cp /etc/chef/validation.pem /etc/chef/webui.pem ~/.chef
sudo chown -R $USER ~/.chef

knife client の初期設定

fedora16# knife configure -i
Where should I put the config file? [~/.chef/knife.rb] 
Please enter the chef server URL: [http://localhost:4000] http://fedora16:4000
Please enter a clientname for the new client: [username]
Please enter the existing admin clientname: [chef-webui] 
Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem] .chef/webui.pem
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] .chef/validation.pem
Please enter the path to a chef repository (or leave blank): 
WARN: Creating initial API user...
INFO: Created (or updated) client[username]
WARN: Configuration file written to /home/client/.chef/knife.rb
確認

作成したクライアントがいるか確認

# knife client list
 chef-webui
 chef-validator
 username
# knife cookbook list

この時点ではcookbookが無いのでエラーが出なければOK

外部接続用kinfe clientの作成

外部からknifeコマンドを実行できるユーザーを作成する

fedora16 # knife client create  -n -a -f /tmp/my-username.pem
INFO: Created (or updated) client[my-username]

確認

knife client show my-username
admin:      true
chef_type:  client
json_class: Chef::ApiClient
name:       "my-username"
public_key: "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAvZQlkA3EzaC+qtsZnSZG6ildyCVXvnQqShOm4\ (...) \n-----END RSA PUBLIC KEY-----\n"
作成された鍵を接続用サーバに配置する。
chef-client# mkdir ~/.chef
chef-client# scp chef-client:/tmp/my-username.pem ~/.chef/my-username.pem

クライアントからknifeコマンドを実行

chef-client # knife configure
No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb] 
Please enter the chef server URL: [http://localhost:4000] http://fedora16:4000

画面の指示したがって進むと以下の様に表示される

Please enter the path to a chef repository (or leave blank): 
*****
 
You must place your client key in:
  /Users/you/.chef/my-username.pem
Before running commands with Knife!
 
*****
 
You must place your validation key in:
   /etc/chef/validation.pem
Before generating instance data with Knife!
*****
Configuration file written to /Users/you/.chef/knife.rb

確認

chef-client # knife client list
  chef-webui
  my-username
  username
  chef-validator

clientのインストール

依存関係の解決

クライアント側にも必要なパッケージが数多くあるのでまずそれをインストール
参照 http://wiki.opscode.com/display/chef/Installing+Chef+Client+and+Chef+Solo

chef-clientのインストール

# gem install chef --no-ri --no-rdoc


client.rbの作成

# mkdir -p /etc/chef
# cd /etc/chef
# knife configure client ./

今回はホストサーバ(fedora16)があるので以下の様に設定する

log_level        :info
log_location     STDOUT
chef_server_url  'http://fedora16:4000
validation_key         "/etc/chef/validation.pem"
validation_client_name 'chef-validator'

hostのvalidation.pemをclientのvalidation_keyで指定した場所にコピーする

# scp /etc/chef/validation.pem username@chrf-client:/etc/chef

client側で以下のコマンドを実行

# chef-client
[Fri, 09 Dec 2011 15:30:31 +0900] INFO: *** Chef 0.10.4 ***
[Fri, 09 Dec 2011 15:30:33 +0900] INFO: Client key /etc/chef/client.pem is not present - registering
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: HTTP Request Returned 404 Not Found: Cannot load node chef-client
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Run List is []
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Run List expands to []
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Starting Chef Run for chef-client
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Loading cookbooks []
[Fri, 09 Dec 2011 15:30:34 +0900] WARN: Node chef-client has an empty run list.
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Chef Run complete in 0.779357 seconds
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Running report handlers
[Fri, 09 Dec 2011 15:30:34 +0900] INFO: Report handlers complete

※エラーが出ている個所は初回接続時にでるものなので気にしない。
validation_keyがあると初回接続時に自動的にclient.keyを生成して登録してくれる。

ホストごとに登録されているので何らかの原因で鍵が変わったりすると衝突が発生しているとのメッセージが出てつなげない。

# chef-client
[Fri, 09 Dec 2011 15:36:34 +0900] INFO: *** Chef 0.10.4 ***
[Fri, 09 Dec 2011 15:36:36 +0900] INFO: Client key /etc/chef/client.pem is not present - registering
[Fri, 09 Dec 2011 15:36:36 +0900] INFO: HTTP Request Returned 409 Conflict: Client already exists
[Fri, 09 Dec 2011 15:36:36 +0900] INFO: HTTP Request Returned 403 Forbidden: You are not allowed to take this action.
[Fri, 09 Dec 2011 15:36:36 +0900] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[Fri, 09 Dec 2011 15:36:36 +0900] FATAL: Net::HTTPServerException: 403 "Forbidden"

その場合はknife client delete hostname で対象の機器をを削除してから再接続してみる。

# knife client list
  SL6
  chef-client

# knife client delete chef-client
Do you really want to delete chef-client? (Y/N) y
Deleted client[chef-client]

clientとホストの時刻が大きくずれていても認証で弾かれるので注意しよう

こちらで作成した鍵を読み込ませるにはclient.rbに以下のように指定する。

client_key         "/etc/chef/client.pem"
その他めも
knife client create my-username -n -a -f /tmp/my-username.pem
ERROR: RuntimeError: Please set EDITOR environment variabl

エディターの環境変数を設定する

# export EDITOR=/usr/bin/vim

再度実行

knife client create my-username -n -a -f /tmp/my-username.pem
Created client[my-username]

今度はうまくいった