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
下記の様に表示されるはず。
見えない場合はファイヤーウォールや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
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の追加などいろいろできるみたい。
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]
今度はうまくいった