chef-soloを用いてWindowsにソフトウェアをインストールしてみよう
前回に引き続き、chef-soloを用いてWindowsマシーンにソフトウェアのインストールをしてみます。
一度きちんとしたレシピを作っておくと、新しいマシーンを手に入れたときに「chefのインストール→その他が全部入る」というフローができてとっても楽ちんですよ!
Windows向けの便利コマンドをインストールする
まだインストールしていない方は前回の記事を参考にしてWindows向けの便利コマンドをインストールしておいてください。
以下のようなコマンドが使えるようになります。
msi形式のソフトウェアをインストールする
まずはmsi形式のインストーラーを用いたインストールを行ってみたいと思います。
opscodeが公開しているcookbookで7-zipがちょうどよいサンプルとなっていますので、こちらを使うことにしましょう。
1. opscodeのcookbooksから7-zipのcookbookをダウンロードして展開する
今回はC:\opscode\chef-repo\cookbooks\7-zipに展開しました。
2. 該当のcookbookを使うように設定ファイルを作ります。
> echo . >> c:\opscode\chef-repo\.chef\7zip.json > notepad.exe c:\opscode\chef-repo\.chef\7zip.json
7zip.json
{ "run_list": ["recipe[windows]"] }
3. proxy越しにインターネットアクセスをする必要がある場合は設定ファイルに記述します
> notepad.exe .chef/solo.rb
solo.rb
http_proxy "http://proxy.example.com:80" https_proxy "http://proxy.example.com:80"
4. chef-soloを実行します
> chef-solo -c .chef/solo.rb -j .chef/7zip.json
エラーが出ていなければインストール成功です。
このサンプルではパスを通すように設定されていますので、7zipのコマンドが使えるようになっているはずです。
試しにコンソールを新しく立ち上げて以下のコマンドを実行してください。
> 7z --help
ここでUsageが表示されたら成功です。
zip形式のソフトウェアをインストールする
つぎにzip形式のソフトウェアをインストールしてみましょう。これにはよいサンプルが無いので、自分でrecipeを書いてみます。
インストールするソフトウェアはVim-Winを使います。
1. cookbookを作る
knifeでcookbookの雛形を作ります。
> knife cookbook create vim ** Creating cookbook vim ** Creating README for cookbook: vim ** Creating metadata for cookbook: vim
2. recipeを作る
recipes\default.rbを編集してレシピを作りましょう。今回は以下のようなフローで動かす必要があります。
- zipファイルをダウンロードして展開する
- 展開したバイナリにパスを通す
- .vimrcの雛形を生成する
それぞれ、以下のクラスを使います。
- windows_zipfile
- windows_path
- template
今回はこんな感じで書きました。
recipes\default.rb
#download and install windows_zipfile node['vim']['home'] do source node['vim']['url'] path node['vim']['home'] action :unzip not_if {::File.exists?("#{node['vim']['version']}\\vim.exe")} end # update path windows_path node['vim']['version'] do action :add end # create .vimrc template "#{ENV['USERPROFILE']}\\.vimrc" do source "vimrc.erb" variables({ :syntax => "syntax on", :fileencodings => "utf-8,cp932", :encoding => "cp932", :backspace => "2", :tabstop => "2", :shiftwidth => "2", :softtabstop => "0" }) action :create end
3. attributeを作る
recipeで参照するパラメーターをattributeに設定します。Vim-Winは32bit版と64bit版があるので、OSによってインストールするバイナリを変更する必要があります。
attributes\default.rb
default['vim']['home'] = "#{ENV['USERPROFILE']}\\bin\\vim" if kernel['machine'] =~ /x86_64/ default['vim']['url'] = "http://vim-win3264.googlecode.com/files/vim73-x64.zip" default['vim']['version'] = "#{ENV['USERPROFILE']}\\bin\\vim\\vim73" else default['vim']['url'] = "http://vim-win3264.googlecode.com/files/vim72-376.zip" default['vim']['version'] = "#{ENV['USERPROFILE']}\\bin\\vim\\vim72" end
4. templateを使う
.vimrcもついでに作成しましょう。.vimrcの設定部分をerbに切り出し、recipeからバインドできるようにしておくと管理が楽かもしれません。今回はこちらから.vimrcの設定をパクらせてもらいました。
templates\default\vimrc.erb
<%= @syntax %> set number set fileencodings=<%= @fileencodings %> set encoding=<%= @encoding %> set termencoding=<%= @encoding %> set backspace=<%= @backspace %> set expandtab set tabstop=<%= @tabstop %> set shiftwidth=<%= @shiftwidth %> set softtabstop=<%= @softtabstop %> set smartindent set incsearch
5. chef-soloでインストール実行*1
> chef-solo -c .chef\solo.rb -j vim.json
うまくいきましたか?自分用のcookbooksを作成してgithubやbitbucketなどに上げておけば、新しい端末にあっという間に開発環境を整えることができます。是非やってみてください!
*1:%USERPROFILE%にフォルダを作るので、管理者としてコンソールを実行してください