ぶっ壊れてもいい環境が欲しかったのでやってみた。
#手順
初期構築の場合
- chefのリポジトリを作る(knife solo init)
- recipeを作る(knife cookbook create)
- 公開recipeを登録する(berks install && berks vendor)
- Vagrantの初期設定を行う(vagrant init)
- Vagrantを起動する(vagrant up)
#環境構築
- gemはインストール済みとする。
- Vagrantのインストーラをダウンロードして実行
-
http://www.vagrantup.com/downloads.html
-VirtualBoxのインストーラをダウンロードして実行 - https://www.virtualbox.org/wiki/Downloads
# berkshelfのインストール
gem install berkshelf
# knife-soloのインストール
gem install knife-solo
# vagrant pluginのインストール(vagrant-omnibusとsahara)
vagrant plugin install vagrant-omnibus sahara
saharaは無くても問題ないが、VMのスナップショットを作れるのであったほうが便利。
#chefのリポジトリを作成する
mkdir vagrant_work
cd vagrant_work
#recipeを作る
knife cookbook create [レシピ名]
レシピは以下を設定すればだいたいおk。
- recipe/default.rb
- attributes/defaut.rb
#公開recipeを登録する
まずはBerksfileを編集する
vim chef-repo/Berksfile
Berksfileには、recipeを探索先としてopscodeを記述。
cookbook 'レシピ名'と書くと、opscodeが公開しているレシピを引用することになるみたい。
path指定だと、ローカルにあるrecipeを登録できる。
opscode以外のgitも登録できるみたいで、cookbook 'レシピ名', git: 'git://リポジトリパス'と書けばいけるみたい(未確認)
site :opscode
cookbook 'yum-epel'
cookbook 'build-essential'
cookbook "python", path: "site-cookbooks/python"
berks installを実行すると、Berkshelf.lockに依存関係も含めてrecipeが登録される。
また、Berksfileで指定したrecipeは~/.berkshelf/cookbooks/に配置される。
他の記事を見るとberks install --path PATH
になっているが、berks install --path
はberks vendor
に変わったようなのでこちらを使う。berks vendor
は--berksfile=PATH
でパスも指定できる。パスを指定しない場合は、カレントのberks-cookbooksが作成されて出力される。なお、出力先は環境変数BERKSHELF_PATHでも変更できるらしい(未確認)。
berks install
berks vendor
#Vagrantの初期設定を行う
まずはVagrantの初期設定を行う
cd ~/vagrant_work
vagrant init
vagrant initを実行すると、Vagrantfileが作成される。
VMを作成する時は、Vagrantfileの内容に添って実行されるので、これを編集する必要がある。
VM作成時に実行するrecipeもここで指定するので要注意。
vim Vagrantfile
いろいろ弄るんだが、以下のポイントをおさえればいい。
- box名(config.vm.box)
- vmの元となるboxのURL(config.vm.box_url)
- vmのnetwork(config.vm.network)
- vmの名前、CPU数、メモリ(config.vm.provider)
- chefで実行するrecipe(config.vm.provision)
意外とVMのCPU数とメモリが重要で、デフォルトだとCPU数=1、メモリ400MBなのでscipyがインストール中にタイムアウトとかしたりする。多めの方がいい。
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "CentOS6.4_minimal"
config.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20131103.box"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.name = "stats_vm"
vb.cpus = 2
vb.memory = 4096
end
config.vm.provision :chef_solo do |chef|
chef.run_list = [
"base",
"python"
]
end
end
#Vagrantを起動する
vagrant upでVMの作成が始まる
cd ~/vagrant_work
vagrant up
VMが無事できたら、vagrant sshでVMにログインできる。抜ける時はexit
vagrant ssh
exit
#saharaの使い方
vagrantのpluginでsaharaをインストールしておくと、簡単にスナップショットを取れるので結構便利。
スナップショットを取る時は、vagrant haltでVMをシャットダウンしている方が早く終わるみたい。
# スナップショットを作成する
vagrant sandbox on
# 現在の状態でスナップショットを更新する
vagrant sandbox commit
# 直前のスナップショットに戻す
vagrant sandbox rollback