ようへいの日々精進XP

よかろうもん

CentOS の ruby バージョンアップにちゃんと向き合って、最終的に chef-solo が使えるようになるまでの一部始終

要件

  • chef-solo と knife を使いたい
  • 新規に chef をインストールすることは出来る
  • 既に稼働中の環境に Chef というシチュエーションもあるはず
  • なので CentOS 5.x な環境に Chef-solo をインストールするぞ

環境

いきなり問題点

  • ruby のバージョンが古い
  • 当然 gem install chef --no-ri --no-rdoc なんてしたら abort
  • ruby のバージョンアップをしなければ...
  • でも、面倒そう...

ruby のバージョンアップをしよう

下準備

checkinstall を使って rpm からインストールしようという算段なので、それに必要なパッケージをインストール
sudo yum install rpm-build
sudo yum install gcc
sudo yum install git
checkinstall のインストール
cd /tmp/
git clone http://checkinstall.izto.org/checkinstall.git
cd checkinstall/
make
sudo make install
sudo checkinstall
sudo cd /usr/src/redhat/RPMS/x86_64/ 
sudo rpm -Uvh --test checkinstall-20121125-1.x86_64.rpm 
sudo rpm -Uvh  checkinstall-20121125-1.x86_64.rpm 

ruby のバージョンアップ

最新版の ruby の取得(1.8 系の最新版を使用)
cd /tmp/
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p371.tar.gz
tar zxvf ruby-1.8.7-p371.tar.gz 
最新版の ruby のインストール
 ruby-1.8.7-p371 
./configure --prefix=/usr
sudo make
sudo checkinstall --fstrans=no
sudo rpm --test -Uvh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p371-1.x86_64.rpm
sudo rpm -Uvh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p371-1.x86_64.rpm
最新版の ruby の確認
ruby -v
ruby 1.8.7 (2012-10-12 patchlevel 371) [x86_64-linux]

chef のインストールとレシピのテスト

rubygems のインストール

cd /tmp
wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
tar zxvf rubygems-1.3.7.tgz
cd rubygems-1.3.7
ruby setup.rb

rake のインストール

gem install rake --no-ri --no-rdoc

chef のインストール

gem install chef --no-ri --no-rdoc

やっと chef-solo...

chef-solo をいじるユーザーを作る

groupadd -g 1000 services
useradd -g services -u 1001 chefsolo
chmod 755 /home/chefsolo

chef リポジトリ雛形を GitHub から拝借

cd ~
git clone git://github.com/opscode/chef-repo.git
cd chef-repo
mkdir .chef
mkdir ~/tmp

chef-solo 実行時の cookbook 等を設定する

vim .chef/solo.rb

以下のように記載する。

file_cache_path "/home/chefsolo/tmp/chef-solo"
cookbook_path "/home/chefsolo/chef-repo/cookbooks"

JSON で適用するレシピを設定する

vim .chef/chef.json

以下のように記載する。

{
  "run_list": [ "recipe[packages_install]" ]
}

cookbook を作る

su - chefsolo
cd ~/chef-repo
rake new_cookbook COOKBOOK=packages_install

適当にレシピを書く

$ vim cookbooks/packages_install/recipes/default.rb

とりあえず tmux と zsh あたりをインストールしてみる。

%w{tmux zsh}.each do |package_name|
  package package_name do
    action :install
  end
end

chef-solo を実行

sudo chef-solo -c /home/chefsolo/chef-repo/.chef/solo.rb -j /home/chefsolo/chef-repo/.chef/chef.json

こんな感じでパッケージがインストールされる。

Starting Chef Client, version 11.4.0
Compiling Cookbooks...
Converging 2 resources
Recipe: packages_install::default
  * package[tmux] action install
    - install version 1.6-1.el5.rf of package tmux

  * package[zsh] action install
    - install version 4.2.6-6.el5 of package zsh

Chef Client finished, 2 resources updated

まとめ

インストール手順

  1. 既存の ruby をアンインストール
  2. 最新の ruby をインストール
  3. 最新の rubygems をインストール
  4. rake をインストール
  5. chef をインストール

一言

  • yum でのインストールは基本ムリ
  • OS を新規にインストールした後だったら、それほど難しくないのかな...
  • ruby 1.9.3 をインストールして gem install しようとしたら Load Error というエラーが出まくった
    • 原因不明...
  • CentOS 5.x の ruby って何でバージョン古いんだろ...Ubuntu なら 1.9 とか選べるようだけど
  • また、今日も chef を弄るてところまで出来んかったよおっ母さん