読者です 読者をやめる 読者になる 読者になる

オープンソースこねこね

Webプログラミングなどについてあれこれ。

chef-soloをCapistranoから実行する

chef

Chefistrano

https://github.com/kohkimakimoto/chefistrano

Capistanoとchef-soloを組み合わせたツールを作ってみました。ざっくりインストール手順と使い方など。

RubyをRVMでインストール

SSL証明書を更新

# cd /etc/pki/tls/certs
# cp -p ca-bundle.crt ca-bundle.crt.bak
# curl http://curl.haxx.se/ca/cacert.pem -o ca-bundle.crt

rvmをインストール

# bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

rvmグループにrvmを使うユーザ(root)を追加

# vim /etc/group
-----------------------
rvm:x:500:root    
-----------------------
# source /etc/profile.d/rvm.sh

Rubyのインストール

依存パッケージを調査

# rvm requirements

上記コマンドでRubyインストールに必要なパッケージが表示されるのでyumで入れる

# yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

Rubyをインストールする

# rvm install 1.9.2
※1.9.3はchefがエラーになるので1.9.2を使用

デフォルトで使用するRubyを1.9.2に設定

# rvm use 1.9.2 --default
# ruby -v

Capistranoのインストール

# gem install capistrano
# gem install capistrano_colors
# cap -V

Chefのインストール

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

管理用ユーザの設定

鍵認証、ノンパスで管理対象サーバにSSHログインできるようにしておく。sudoできるようにしておく。この説明ではchefistranoというユーザを作って設定しておきます。

# visudo
chefistrano ALL=(ALL)       NOPASSWD: ALL
# Defaults    requiretty  # コメントアウトする

chefistranoをダウンロード

https://github.com/kohkimakimoto/chefistrano

を適当なディレクトリにダウンロードする。

chefのcookbookやroleを用意する

chefistrano/chef-repo

がchefのリポジトリディレクトリになるのでcookbookやroleの定義などをこの配下に作ります。詳細はchefの公式サイトなどを参考に。

config.rbを修正する

chefistrano/config.rbがメインの設定ファイルなのでこの中を適宜修正してください。

ポイントは:chef_run_listsというcapistranoの変数。ここでCapistranoのroleとChefのrun_listを関連付けます。例えば

set :chef_run_lists, {
  :dev         => ['role[dev]']
}
server '127.0.0.1', :dev

のように定義すると127.0.0.1のローカルサーバでchef-soloのrole[dev]を実行できるようなります。

コマンドを実行

前述のconfig.rbの設定からchefというネームスペースでCapistranoのタスクを動的生成してます。chefistranoのディレクトリで

# cap chef:dev

のようにコマンドを実行。Capistranoのrole単位でchefの実行ができます。

内部動作について

Chefの定義情報があるchef-repoディレクトリをchapistranoで管理対象サーバ上にrsyncしてからchef-soloを実行するようになっています。ここに記述したのはざっくりした解説なので、実際に使うかたはあわせてChefとCapistranoのドキュメントを読むなどお願いします。

※すごく参考にさせていただいた記事。ほとんどこれと同じことをしています。

http://higelog.brassworks.jp/?p=1487