Pythonのcookbookをchefで作成してみました

Pythonのcookbookをchefで作成してみました最近Chefを始めていろいろ調べるのが楽しいのですが、Pythonのcookbookが見つからなかったので書いてみました(成功したので)。
疲れてたので適当ですが。。(cookbookはちょっとずつ良くしてゆけば良いと思います。1歩でも先に進むのが正しいということで)。そういう環境を用意してくれたvagrantには本当に感謝です。

さて、始めます。

knife-soloの環境が整っていることが前提です。あと、CentOS6.4で実行してます。Pythonの勉強を始めたくて、python3が欲しかったんだけど、CentOSはデフォで2.6.6だったし、yum update python3とかでもできなかったので調べました

1. cookbookを作成します

chefリポジトリのルートで下記のコマンドを実行します。

knife cookbook create python -o site-cookbooks/

2. 最新版のpythonをdlしてくる。

保存先は/site-cookbooks/python/files/default/の下。
Releases を見る。現時点では3.3.3が最新だったので下記のように書いた。

cd python/files/default  
wget http://www.python.org/ftp/python/3.3.3/Python-3.3.3.tar.bz2

3. レシピを書く

/site-cookbooks/python/recipes/default.rbに記述

%w(openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel).each do |pkg|
  yum_package pkg do
    action :install
  end 
end

cookbook_file "/tmp/Python-3.3.3.tar.bz2" do
  source "Python-3.3.3.tar.bz2"
  mode 0644
end
 
bash "install python" do
  cwd "/tmp"
  code <<-EOH
    tar -xjf /tmp/Python-3.3.3.tar.bz2
    cd /tmp/Python-3.3.3
    ./configure
    make
    make install
  EOH
end

4. nodeを編集

hostname.jsonのrun_listに追加する。

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

既に他のがリストにあったら、配列に追加。

  • コード中のの部分を投稿しようとすると、どうしても消えてしまう(なぜ??)ので、[と]は全角にしてあります。コピペできません。コピペされる方は[]を半角にしてください。

5. さて、動くか!

knife solo cook *hostname*

...

うお!一発成功!

参考にしたページ

書き書き後記。。

参考の2番目にあるサイトを見て、見よう見まねで作成してみましたが、なんとかうまく言ったようです。いろいろわかってないこともありますが、とにかく、わからない部分がわかってよかった。

  • phpは/usr/localに指定してるけど、pythonはインストール先指定しなかったらどうやら/usr/local/libにインストールされた。これがデフォらしいけど、/usr/localにしたほうが良いのかな、、とか
  • yumとかベースを作る部分はyumのみのcookbook作ったりしたほうが良いのかな(調べてたらそういう人もいた)とか、、
  • shellはきっと既にあっても上書きで実行されるから、参考2番目のサイトを参考にnot_ifとかやったほうがいいんだろうな。。とか。

いやー、でも楽しかった(成功したから言える)。

一応、chefは単に環境を作るという意味だけではなく、それやりながら自分でも色々学びたいと思って使ってる。なので、できるだけ配布されてるcookbookをそのまま利用するのではなく、自分でグチャグチャでも書いてみようと思ってる。今日はちょうどよい参考資料も見つかって、なんか良かった。

cookbook楽しいなー。commit して寝よ。

*)当方python, chef初心者です。おかしな記述があったら教えていただけると助かります。

Pocket
LINEで送る

You may also like...