Develop with pleasure!

福岡でCloudとかBlockchainとか。

chef-soloのセットアップ

ChefはOPSCODEが公開しているサーバの構成管理ツール。構成のrecipeをRubyベースのDSLで記述できるのが特徴。

基本的には、構成情報の管理サーバChef-Serverに対して、各クライントからリクエストを送り、必要なミドルウェアのインストールや設定を行うみたいだけど、どうもChef-Serverセットアップがちょっと面倒みたいなので、今回はスタンドアロンで動作可能なchef-soloを利用して環境構築してみる。
ちなみに、Chef-Serverは独自に立てなくてもOPSCODEがHosted Chef | OpscodeってサービスをSaaSで提供してるので、それを利用するという手もある。(5ノードまでは無料で使える)

インストール

インストールや使い方については、Installing Chef Client and Chef Solo - Chef - Opscode Open Source Wikiを参考にして進める。インストールする環境毎にそれぞれマニュアルが用意されてる。今回はローカル環境がUbuntuなのでInstalling Chef Client on Ubuntu or Debian - Chef - Opscode Open Source Wikiに従ってセットアップ。

# APTのソースリストにOPSCODEのリポジトリを追加する。
$ echo "deb http://apt.opscode.com/ `lsb_release -cs`-0.10 main" | sudo tee /etc/apt/sources.list.d/opscode.list

# 続いて鍵の登録
$ sudo mkdir -p /etc/apt/trusted.qpg.d
$ gpg --keyserver keys.gnupg.net --recv-keys 83EF826A
$ gpg --export packages@opscode.com | sudo tee /etc/apt/trusted.gpg.d/opscode-keyring.gpg > /dev/null

# パッケージをアップデート
$ sudo apt-get update
$ sudo apt-get install opscode-keyring

# chefのインストール(aptでインストールする場合)
$ sudo apt-get install chef
 インストール中に使用するChef ServerのURLの入力を求められるけど、今回はchef-solo使うので「none」と入力。

chefのインストールが終わるとchef-clientの起動スクリプトが/etc/init.d/chef-clientに、chef-clientの設定ファイルが/etc/chef/client.rbに作成されてる。

※chef自体はaptで入れなくてもrubyのgemでインストールするのも可能。(Rubyのバージョン変わったりした際に毎回gemインストールするのも面倒なので今回はaptで入れた)

chef リポジトリ

続いて、chef リポジトリの雛形を用意する。

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

雛形の各ディレクトリの役割は↓

  • config
    Rakeの設定ファイルを配置。Rakeのssl_certタスクで生成するSSL証明書に関する設定情報や、各タスクで使用するディレクトリのロケーション情報を定義する。
  • cookbooks
    サーバ構築に必要なcookbookをダウンロードもしくは自分で作って配置。
  • data_bags
    サーバの設定値をjson形式のファイルで配置。
  • roles
    chefには似た機能やノードをグルーピングするRoleという仕組みがあり、各ロールの設定情報を.rb or .json形式のファイルで配置。
  • certificates
    rake ssl_cert で生成される証明書を配置。

chef-soloの設定

chef-soloコマンドでは↓のオプションが用意されてる。

  • -c,--config
    chef-soloの設定ファイルのパスを指定(solo.rb)
  • -j,--json-attributes
    nodeの属性を定義するjson attributeのファイルパスを指定
  • -r,--recipe-url
    chefのrecipeのURLを指定

まずchef-soloで使用する設定ファイルであるsolo.rbを作成する。

$ mkdir chef-repo.git/.chef
$ touch chef-repo.git/.chef/solo.rb

solo.rbの中身は↓な感じ。

file_cache_path "/var/chef-solo" # キャッシュファイルのパスを指定
cookbook_path "/var/chef-solo/cookbooks" # cookbookのパスを指定

パスはどこでも良いけど、絶対パスで定義する必要があるのと、cookbook_pathはfile_cache_pathのサブディレクトリにしとく必要があるみたい。cookbook_pathについては、↓みたく複数のパスを指定することも可能。

cookbook_path ["/var/chef-solo/cookbooks", "/var/chef-solo/site-cookbooks"]

また、-jと-rのオプションで指定するjson attributeのパスとrecipeのURLは↓みたくsolo.rb内に定義することも可能。

json_attribs "http://www.example.com/node.json"
recipe_url "http://www.example.com/chef-solo.tar.gz"

以上で基本的なセットアップはDone。