環境構築の省力化と安定化を図るべくChef の習得を進めています。
今回はGit の最新版(2016/04/10 時点Ver.2.8.1)をインストールするRecipe を作成してみました。
手順の流れ
- Chef solo インストール
- cookbook 作成
- attributes 作成
- recipe 作成
- cookbook 実行
- 結果確認
1. Chef solo インストール
こちらの記事を参照のこと。
2. cookbook 作成
knife コマンドを使ってクックブック名’git’を作成します。
cookbook の作成先は慣例的に⁄var⁄chef⁄cookbooks 下な様です。
# -o オプションの位置はcookbook 名('git')の後に sudo knife cookbook create git -o /var/chef/cookbooks
3. attributes 作成
インストール時の各種設定値はattributes にて別途設定しておくと良い様です。
cd /var/chef/cookbooks/git sudo vi attributes/default.rb
設定ファイルは以下の様に。
default['git']['version'] = '2.8.1' default['git']['source_uri'] = "https://www.kernel.org/pub/software/scm/git/git-#{default['git']['version']}.tar.gz" default['git']['configure'] = './configure --prefix=/usr/local' default['git']['packages'] = %w{gettext gettext-devel zlib-devel openssl-devel libcurl-devel perl-ExtUtils-MakeMaker expat-devel curl-devel gcc}
こちらは内容をもっと練りたいところ。
現状はバージョンを人為で設定せねばなりませんが、できればsource_uri 下で最新版を探索して選ぶ様にしたい。
4. recipe 作成
いよいよrecipe 作成です。
sudo vi recipes/default.rb
recipe は以下の様に。
# # Cookbook Name:: git # Recipe:: default # # Copyright 2015, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # install_dir = '/usr/local/src' version = node['git']['version'] source_uri = node['git']['source_uri'] configure = node['git']['configure'] node['git']['packages'].each do |package_name| package "#{package_name}" do :install end end remote_file "/tmp/git-#{version}.tar.gz" do not_if 'which git' source "#{source_uri}" end bash 'install_git' do not_if 'which git' user 'root' code <<-EOL sudo install -d #{install_dir} sudo tar -zxvf /tmp/git-#{version}.tar.gz -C #{install_dir} cd #{install_dir}/git-#{version} sudo #{configure} && make && make install EOL end bash 'config_git' do user 'root' code <<-EOL git config --global core.editor 'vim -c "set fenc=utf-8"' git config --global color.diff auto git config --global color.status auto git config --global color.branch auto git config --global core.precomposeunicode true git config --global core.quotepath false git config --global alias.b branch git config --global alias.co checkout EOL end
5. cookbook 実行
あとはcookbook を実行するだけです。
cookbooks ディレクトリに移動してから、作成したcookbook 'git'をchef-solo から実行します。
cd /var/chef/cookbooks sudo chef-solo -o git
後は放っておくだけでattributes で指定した'packages' がyum install され、その後'source_uri'で指定したgit 最新版のソースコードがダウンロードされ、.⁄cofigure され、make され、make install され、git config までされちゃいます。
今回は単なるvimマクロみたいな書き方になっていますが、ちゃんと勉強して、もっと洗練されたRecipe とCookbook を書けるようになりたいものです。
6. 結果確認
git のバージョンを確認してみましょう。
git --version git version 2.6.2