Chef を使ってCentOS にGit 最新版をインストールする

投稿者: | 2015/11/02

環境構築の省力化と安定化を図るべくChef の習得を進めています。
今回はGit の最新版(2016/04/10 時点Ver.2.8.1)をインストールするRecipe を作成してみました。

手順の流れ

  1. Chef solo インストール
  2. cookbook 作成
  3. attributes 作成
  4. recipe 作成
  5. cookbook 実行
  6. 結果確認

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

参考

Gitをsourceからインストールするchefのレシピ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください