knife-soloでLinux環境構築

http://d.hatena.ne.jp/naoya/20130204/1359971408
http://d.hatena.ne.jp/naoya/20130205/1360062070

に影響されてchef-solo, knife-soloを使ったLinux環境構築を試す.
自分用のzshemacsの設定ファイルなんかはgithubにdotfilesを置いて,持って来るだけには
なっているが,新しいVMやサーバを立ち上げたときに毎回yum installしたりするのが面倒だと
思っていた.この解決にもちょうど良さそうだ.

試した環境

VirtualBOXVMを使って実環境はホストのWindows機のみ.
・ホストOS Windows 7
・作業環境:Fedora 18 (VirtualBOX VM)
 普通に手動でインストールしたもの
 事前準備として ~/.ssh/config を使って対象マシンに名前を付けたり鍵を設定しておくと楽.
・セットアップ対象:CentOS 6.3 (VirtualBOX VM)
 WindowsVagrantを使って用意したもの

chef, knife-soloのインストール

まずは作業環境にchefとknife-soloをインストールする.
普通に実行するとknife-soloのインストールでエラーが起こった.

$ gem install chef
$ gem install knife-solo
ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: knife-solo requires net-ssh (~> 2.2.2)

net-sshのバージョンでchefとコンフリクトしている模様.
仕方ないのでknife-soloのpre版を入れる.

$ gem install knife-solo --pre

これで問題なくインストールは完了.
なおインストールされたのはchef (11.2.0), knife-solo (0.2.0.pre1).

最初にchefの設定をするが今回はsoloしか使わないのでデフォルトでOK.

$ knife configure

~/.chef に http://community.opscode.com/ で登録後に取得できるpemファイルを配置しておく.
このときに~/.chef/knife.rb とpemファイルの名前が違っていれば修正しておく.

chefのレシピ作成

次にchefリポジトリを作成

$ knife solo init chef-repo
$ git init
$ git add .
$ git commit -m 'first commit'

yumのEPELを有効にする.
site vendorで入れると勝手にコミットまでしてくれる.

$ knife cookbook site vendor yum -o site-cookbooks

次にインストールしたいパッケージを管理するレシピを追加.

$ knife cookbook create base_packages -o site-cookbooks
$ emacs site-cookbooks/base_packages/recipes/default.rb
%w{zsh mosh tmux emacs-nox}.each do |pkg|
  package pkg do
    action :install
  end
end

knife solo prepareで対象マシンの下準備をする.
nodes/<マシン名>.json というファイルができているので,実行するレシピを書いておく.

$ knife solo prepare vagrant@<マシン名 or IP>
$ emacs nodes/<マシン名>.json
{
    "recipes":[
        "yum::epel",
        "base_packages"
    ]
}

これで準備完了.knife solo cookを実行する.

$ knife solo cook <マシン名>

これで対象マシン上でEPELリポジトリが有効になり,レシピに書いておいたzsh moshなどのパッケージがインストールされる.
これは便利!