50
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Macでchef-soloとBerkshelfの環境構築手順

Berkshelfでcookbookをインストールして、knife solo cook ${node}でリモートで
chef-soloを実行するための環境をMac上で構築する手順です。

前提

rbenvを使う場合

Homebrewのrbenvでruby 2.0.0-p0をインストール済みという前提です。1.9.xでも大丈夫です。

Omnibus Chefインストーラでrubyとchefを一括インストールする場合

rubyがインストールされていない場合は以下のコマンドでrubyとchefをインストールするという手もあります。

curl -L http://www.opscode.com/chef/install.sh | sudo bash

上記のコマンドで/opt/chef/embedded以下にruby 1.9.3-p286がインストールされます。
以下の作業でgemコマンドなどを使うためにPATHを設定しておきます。

export PATH=/opt/chef/embedded/bin:$PATH

chefレポジトリのディレクトリを作成

sudo mkdir /etc/chef
sudo chown `whoami` /etc/chef
cd /etc/chef

rbenvを使っている場合は/etc/chef以下で使うバージョンを指定しておきます。

rbenv local 2.0.0-p0

bundlerでgemをインストール

bundlerをインストールしていない場合はインストールします。

gem install bundler

Gemfileを作ってbundlerでgemをインストールします。

cat <<'EOF' > Gemfile
source 'https://rubygems.org'
gem 'chef'
gem 'knife-solo', :github => 'matschaffer/knife-solo'
gem 'berkshelf'
EOF
bundle --path vendor/bundle

» めんどくさい bundle exec を省略する方法 TECHSCORE BLOGを参考にして、以下のコマンドを実行します。

bundle install --binstubs

PATHに./binを追加するのは気が引けたので、/etc/chefにて./bin/knifeのように実行することにしました。

knifeの設定

./bin/knife configure

最後のPlease enter the path to a chef repository (or leave blank):のみ /etc/chefと入力して他はデフォルト値のままにします。

knife solo cook ${node}での転送先はknife-soloのgit (0.3.x)だとsolo_pathの設定値になりますが、0.2だとfile_cache_pathの設定値になります。

~/.chef/knife.rbにsolo_pathの設定を追加します。

cat <<'EOF' >> ~/.chef/knife.rb
knife[:solo_path] = '/etc/chef'
EOF

chefレポジトリを初期化

一旦/etc/chef/repo/に作って/etc/chef/に移動します。

./bin/knife solo init /etc/chef/repo
mv /etc/chef/repo/* .
rmdir repo

cat <<'EOF' > /etc/chef/solo.rb
file_cache_path           "/var/chef"
data_bag_path             "/etc/chef/data_bags"
encrypted_data_bag_secret "/etc/chef/data_bag_key"
cookbook_path             [ "/etc/chef/site-cookbooks",
                            "/etc/chef/vendor/cookbooks" ]
role_path                 "/etc/chef/roles"
EOF

gitレポジトリを作成して初回コミット

cat <<'EOF' > .gitignore
/bin
/.bundle
/.ruby-version
/vendor
EOF

git init
git add .
git commit -m 'first commit'

以降、適宜区切りの良い所でgitにファイルをaddしてcommitしてください。

Berkshelfでcookbookをインストール

cat <<'EOF' > Berksfile
site :opscode

cookbook 'yum'
cookbook 'nginx'
EOF

bundle exec berks install --path vendor/cookbooks

リモートサーバにchef-soloをセットアップ

BerkshelfのVagrant連携は使わないようにしています。VagrantのVMとリモートサーバで
同じ手順でchef-soloを実行したいからです。

以下のコマンドでリモートサーバにchef-solo環境をセットアップします。${node}の部分はリモートサーバのホスト名を指定します。予め~/.ssh/configでホスト名に対応する設定を追加してrootユーザでログインできるようにしておきます。

./bin/knife solo prepare ${node}

リモートサーバでchef-soloを実行

以下のコマンドでchefレポジトリをリモートサーバに同期し、chef-soloを実行します。

./bin/knife solo cook ${node}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
50
Help us understand the problem. What are the problem?