knife-soloでLinux環境構築
http://d.hatena.ne.jp/naoya/20130204/1359971408
http://d.hatena.ne.jp/naoya/20130205/1360062070
に影響されてchef-solo, knife-soloを使ったLinux環境構築を試す.
自分用のzshやemacsの設定ファイルなんかはgithubにdotfilesを置いて,持って来るだけには
なっているが,新しいVMやサーバを立ち上げたときに毎回yum installしたりするのが面倒だと
思っていた.この解決にもちょうど良さそうだ.
試した環境
VirtualBOXのVMを使って実環境はホストのWindows機のみ.
・ホストOS Windows 7
・作業環境:Fedora 18 (VirtualBOX VM)
普通に手動でインストールしたもの
事前準備として ~/.ssh/config を使って対象マシンに名前を付けたり鍵を設定しておくと楽.
・セットアップ対象:CentOS 6.3 (VirtualBOX VM)
Windows版Vagrantを使って用意したもの
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などのパッケージがインストールされる.
これは便利!