Win7 + Cygwin + Vagrant + Cent OS 6.4で「入門 Chef Solo」 #6

研究室から貸与されているLet's note CF-SX2を使っている。開発にはLinuxを使いたいけどWindows環境を捨てるわけにも行かないのでVirtualBoxUbuntuを立ててずっと使っていたが、Ubuntuに飽きて最近色々試していた。VM立てて環境構築したりするのに、VagrantやChef等の管理ツールするのが便利そうなので、「入門 Chef Solo」を買って進めてる。

環境のせいか何度かハマった。#6がknife-solo導入までのまとめなので、そこを補足する感じでメモ。
(#5まではやってる前提)

環境

Cygwinが32bitなのは前に64bitでRubyが上手く動かない感じだったから。
あとrbenvでruby入れようとしたら色々おかしい感じで無理そうなのでapt-cygでインストールして使う。
transcode-open/apt-cyg · GitHub
rcmdnk/apt-cyg · GitHub

gem updateしようとすると

-bash: /usr/local/bin/gem: No such file or directory

とか言われて怒られる。alias作るなり、/usr/bin/gemにリンク張ったりするといいと思う。

#6を勧める

Chef Solo 実行の手前までやる。
gitは適宜やって下さい

mkdir vm
cd vm
vagrant init
vagrant ssh-config --host melody >> ~/.ssh/config
vagrant up
knife solo init chef-repo
cd chef-repo
knife solo prepare melody
knife cookbook create nginx -o site-cookbooks
vi site-cookbooks/nginx/recipes/default.rb
vi site-cookbooks/nginx/templates/default/nginx.conf.erb
vi nodes/melody.json

default.rb

package "nginx" do
  action :install
#  option '--enablerepo=epel'
end

service "nginx" do
  supports :status => true, :restart => true, :reload => true
  action [ :enable, :start ]
end

template "nginx.conf" do
  path "/etc/nginx/nginx.conf"
  source "nginx.conf.erb"
  owner "root"
  group "root"
  mode 0644
  notifies :reload, 'service[nginx]'
end

nginx.conf.erb (worker_process ではなく worker_processes なので注意)

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
  worker_connections 1024;
}

http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  server {
    listen <%= node['nginx']['port'] %>;
    server_name localhost;
    location / {
      root /usr/share/nginx/html;
      index index.html index.htm;
    }
  }
}

melody.json("yum::epel"については後述)

{
    "nginx": {
        "port" : 80
    },
    "run_list":[
        "yum::epel",
        "nginx"
    ]
}

Opscode Community 登録

本では#6の次の#7でOpscode Communityが紹介されるが、CentOSでnginxインストールしたりするにはパッケージマネージャのリポジトリにEPELを追加する必要があって、それに関して先にOpscode Communityに登録しておく。

ここで
Sign in – Chef
、ユーザ登録したら秘密鍵が表示される。
表示された鍵をコピー →「~/.chef/amagitakayosi.pem」に保存
→「$ chmod 600 ~/.chef/amagitakayosi.pem」 → ↑のファイルのcygwinパスを「~/chef/kknife.rb」に追加。例↓

  client_key '/cygdrive/c/Users/amagitakayosi/.chef/amagitakayosi.pem'

EPEL登録

$ knife cookbook site vendor yum

melody.jsonに"yum::epel"を追加したのは、Chef Solo実行時にEPELを読み込むため。

Chef Solo 実行

knife solo cook melody

できるはず

参考

Chefに入門(3) 〜Webサーバ立ち上げ〜 - Qiita [キータ] Ruby - chef-solo導入メモ - Qiita centosにchefでnginxを入れようとするとこける | iii ThreeTreesLight