MacBook Air の環境構築を chef-solo を使ってやってみる。
- ref. clmemo@aka: chef-solo を Ruby-2.0.0 で試す —— 例: Objective-C コンパイル環境の用意
- Macでchef-soloとBerkshelfの環境構築手順 #OSX #chef-solo #Berkshelf - Qiita
ruby-2.0.0 のインストールまで
ターミナル・アプリを起動して ruby の存在を確認。ruby-1.8.7 がインストールされていることを確かめた。最初の状態では Xcode も X も git もインストールされていない。以下のパッケージをまずインストールした:
- Google Chrome
- Xcode 4.6
- Command Line Tools (OS X Mountain Lion) for Xcode
- see also. clmemo@aka: Mountain Lion に開発環境を入れてみた
Google Chrome は愛用のブラウザーなので、いの一番にインストール。昔は Xcode をインストールすると X やらコマンド・ラインで使える gcc が入ったものだけど、Mountain Lion では X は別アプリ、コマンド・ライン用のコマンドも Command Line Tools に分離されている。
Command Line Tools をインストールすると git-1.7.12.4 もインストールされる。昔は MacPorts を使って git をインストールしていたので、この配慮はありがたい。
ruby のバージョンが古いので、rbenv 経由で 2.0.0p0 をインストールする (ruby-1.8.7 でも大丈夫という気もするけど念のため)。
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
.profile を作成。
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
ruby-build をインストール:
$ git clone git://github.com/sstephenson/ruby-build.git $ cd ruby-build $ sudo ./install.sh
ruby-2.0.0-p0 をコンパイル & インストール:
$ rbenv install 2.0.0-p0 $ rbenv global 2.0.0-p0 $ rbenv rehash
最後に bundler gem をインストールしておく:
$ gem install bundler $ rbenv rehash
chef-solo の準備
ruby-2.0.0 のための準備
ruby-2.0.0 では、chef-solo コマンド実行時に gemfiles/format
がないというエラーが出る。その対策を先にしておく。ruby 1.9 を使っている人はスキップされたし。
$ mkdir prog $ cd prog $ bundle gem rubygems-format-dummy $ cd rubygems-format-dummy $ touch lib/rubygems/format.rb $ git add lib/rubygems/format.rb $ git commit -m 'initial commit' $ emacs -nw -q rubygems-format-dummy.gemspec (TODO とあるところを適当に書き換える) $ rake build
chef-solo のインストール
まず /etc/chef
を作り chef-solo を /etc/chef
以下にインストールする。
$ sudo mkdir /etc/chef $ sudo chgrp staff /etc/chef $ sudo chmod 775 /etc/chef $ cd /etc/chef $ rbenv local 2.0.0-p0 $ cat <<'EOF' > Gemfile source 'https://rubygems.org' gem 'chef' gem 'rubygems-format-dummy', :path => '/Users/you/prog/rubygems-format-dummy' EOF $ bundle install --path vendor/bundle $ rbenv rehash $ bundle exec chef-solo -v Chef: 11.4.0
設定ファイル
まず knife configure コマンドの実行。デフォールトから変えた点のみ記載。
$ bundle exec knife configure -i Where should I put the config file? [Users/you/.chef/knife.rb] /etc/chef/.chef/knife.rb Please enter the path to a chef repository (or leave blank): /var/chef-solo
続いて solo.rb と node.json の作成。ここでは、レシピを screen にしておく。
$ cd /etc/chef $ cat <<'EOF' > solo.rb file_cache_path "/var/chef-solo" cookbook_path ["/var/chef-solo/cookbooks"] $ cat <<'EOF' > node.json { "run_list": [ "recipe[screen]" ] } EOF
cookbook を置く場所も用意しておく。sudo するのも面倒なので一般ユーザーも cookbook を書けるようにしちゃった。
$ cd /var $ sudo mkdir chef-solo $ sudo chgrp staff chef-solo $ sudo chmod 775 chef-solo
せっかくなので git で管理してみる。
$ cd chef-solo $ touch .gitignore $ git init $ git add .gitignore $ git commit -m 'initial commit'
Recipe を書く
screen の設定ファイル .screenrc をインストールする recipe を書いてみる。というのも、Mac での install ってどうなってるのか分からなかったので (^^;)。
まずは screen のための cookbook を作る。
$ cd /etc/chef $ bundle exec knife cookbook create screen
template を作成する。/var/chef-solo/cookbooks/screen/templates/default/.screenrc.erb
に普段使っている .screenrc の内容をコピペ (see also. clmemo@aka: GNU Screen の設定 (.screenrc) をさらしてみる)
escape ^Tt
markkeys h=^B:l=^F:$=^E:^U=^Z:^D=^V
続いてテンプレートをインストールする recipe を作成する。レシピの置き場所は /var/chef-solo/cookbooks/screen/recipes/default.rb
。中身は次の通り:
users = node['screen']['users']
users.each do |user|
template "Users/#{user}/.screenrc" do
owner user
group "staff"
mode 0664
end
end
Mac のホーム・ディレクトリーに .screenrc をインストールしようと試みている。
ユーザー名は /var/chef-solo/cookbooks/screen/attributes/default.rb
に書く。ここではダミーとして guest とした。
default['screen']['users'] = [ 'guest' ]
以上で recipe の作成は終了。
chef-solo の実行
recipe が出来たので、chef-solo を実行する。
$ cd /etc/chef $ bundle exec chef-solo -j node.json
と、これでは guest ユーザーに .screenrc がインストールされる。recipe の中にユーザーを書かなかったのは、自分の Mac にいるユーザー・アカウントを知られたくなかったのと、環境ごとにユーザー名が徴妙に変わったりするため。ユーザー・アカウントの違いは node.json の中で吸収する。ユーザー foo と bar がいる場合の node.json。
{
"screen": {
"users": [ "foo", "bar" ]
},
"run_list": [
"recipe[screen]"
]
}
改めて chef-solo を実行。
$ bundle exec chef-solo -j node.json
今回はユーザー権限でも実行できるけど、ほとんどの場合はルート権限が必要と思う。その場合は、次の様にコマンドを打つ。
$ sudo env PATH=$PATH bundle exec chef-solo -j node.json
node.json でユーザー名を指定しないのなら、recipe を直接指定するのもあり。
$ sudo env PATH=$PATH bundle exec chef-solo -o screen
Mac での chef-solo 事始めは、これでおしまい。
あとがき
Mac で install を実行する場合、MacPorts とか Homebrew を使うのかな? どうやって使うのかな? Linux と同じ様な書き方でいいのかな? それは Linux の recipe と共存できるのかな?
今回、ユーザー・アカウントを recipe の中に含めたくなかったから node.json を使った。このやり方は chef 本流の書き方なのかしらん。もっとスマートなやり方がある様な気がする。
/var/chef-solo を git で管理してみたものの... 他人の cookbook を github から clone する時に git 管理下に git 管理下のリポジトリーを置くことになる。それは、なんか奇麗じゃない。
chef-solo に触ったばかりでまだまだ分からないことだらけ。本エントリーを読んで、多少なりとも Mac 使いが chef-solo を身近に感じとってもらえるなら嬉しい。
No comments:
Post a Comment