LoginSignup
15
15

More than 5 years have passed since last update.

Vagrant + chef-solo + berkshelfで分析環境を構築する

Posted at

ぶっ壊れてもいい環境が欲しかったのでやってみた。

手順

初期構築の場合
1. chefのリポジトリを作る(knife solo init)
2. recipeを作る(knife cookbook create)
3. 公開recipeを登録する(berks install && berks vendor)
4. Vagrantの初期設定を行う(vagrant init)
5. Vagrantを起動する(vagrant up)

環境構築

# 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://リポジトリパス'と書けばいけるみたい(未確認)

Berksfile
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 --pathberks 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がインストール中にタイムアウトとかしたりする。多めの方がいい。

Vagrantfile
# -*- 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
15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15