Chef + Vagrant を使ってみる
目的
・ 環境構築自動化
・ お勉強
・ この記事はメモ
ツールについての概要
・chef はLinuxなどのOSにフレームワークや環境を作るためのツール
・vagrant はvirtualbox等の仮想環境の構築を自動化するためのツール
vagrant は chef を使用して仮想環境に自動で環境構築することができる
chef は実機にも設定できるが、vagrantはたぶんできない。
・chefはcookbookというスクリプトの集合を使って、そのスクリプトの通りにソフトウェアをインストールする
・cookbookはいろいろな人が公開している
Welcome - The resource for Chef cookbooks - Chef Supermarket
chef と vagrant が同列に語られることが多いので端的にまとめた
手順
・開発環境の用意
OS: Debian sid
Rubyが必要
最近のスクリプト言語は、ユーザ領域にライブラリを持たないとダメっぽい、以前のやり方をそのまま踏襲
Metasploit Framework - なんとな~くしあわせ?の日記
# apt-get install ruby-dev # su - user $ vim ~/.bashrc // 末尾にexport GEM_HOME=~/extlib/gems を追加 $ source ~/.bashrc
chef-solo のインストール
そこからは以下のサイトを参照して、chef用のrubyでできたツールをガンガン入れる
Chef Soloの正しい始め方 | tsuchikazu blog
しかし、vagrantやchefはOSが保持するパッケージを入れておく。
# apt-get install chef vagrant $ gem i chef --no-ri --no-rdoc $ knife configure # デフォルトの設定で $ gem i knife-solo --no-ri --no-rdoc
ここまででchefを使ってcookbookを作成する手はずはだいたい整った。あと覚えておかなければいけないのは、chefのcookbookの配置場所である。一にも二にも言われるのは、cookbooksがコミュニティで配布されるcookbookの配置場所で、site-cookbooksが、自分で作ったcookbookの配置場所であるということだ。
独自のcookbookの構成
主にここを参考にさせていただきました。
ChefでCookbook, Recipeを独自に作成 | EasyRamble
$ tree . ├── README.md ├── Vagrantfile <-- あとで使うvagrantの設定ファイル ├── cookbooks <-- コミュニティで配布されるcookbookの配置場所 ├── install.sh <-- あとで使う、仮想環境にchefをインストールするシェル └── site-cookbooks <-- 自分で作ったcookbookの配置場所 └── foltia_cookbook <-- 独自のcookbook、ひな形はコマンド実行時にでろでろ出てくるので、自分で作る必要なし ├── CHANGELOG.md ├── README.md ├── metadata.rb └── recipes └── default.rb
構成は以上のような形でいいらしい、作り方としては以下などどうだろうか
・$ git init で場所を作る
・$ mkdir cookbooks , $ mkdir site-cookbooks
・$ knife cookbook create -o site-cookbooks <*****_cookbook>
あとは、knifeやchefを使ってインストールするソフトウェアをうまく設定していく。
独自のVagrantfileの書き方
vagrantはまたchefとは別の仕組みである。chefを使役できる。
vagrant 基本コマンド
基本的な操作は以下がわかりやすかったです
Vagrant basics #Vagrant - Qiita
まあ以下がわかればあとは何とかなる
# カレントディレクトリにVagrantfileのひな形できる $ vagrant init # 設定したVagrantfileにしたがって仮想環境作成 $ vagrant up # 仮想環境シャットダウン $ vagrant halt
Vagrantfileを晒してみる
以下のようになります、まだ何もやっていません
# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "fedora-20" config.vm.box_url = "https://dl.dropboxusercontent.com/u/15733306/vagrant/fedora-20-netinst-2014_01_05-minimal-puppet-guestadditions.box" # Install chef config.vm.provision :shell, :path => "install.sh" # use chef_solo config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"] chef.add_recipe 'foltia_cookbook::default' end end
config.vm.box_url
これにはvagrant用のVMのbox(設定済みの環境)のURLを設定します。これでboxを外から取ってこれます。
ここでさらされているので多分自由に使っていいです。
A list of base boxes for Vagrant - Vagrantbox.es
install.sh ?
これは、仮想環境側にChefをインストールするシェルスクリプトです。もちろん私が作ったのではなく、配布されているものです。以下にあります、Omnibus Installerというらしいです。
https://www.opscode.com/chef/install.sh
config.vm.provision
ここに仮想環境側へのインストール手順を書いていくみたいです。基本はrubyなので、ruby的に考えれば読めるのではないでしょうか。
以下が参考になりました
Vagrant の VM をシェルスクリプトでプロビジョニングする | CUBE SUGAR STORAGE