目次
諸事情あってchef+vagrantの勉強をしているので備忘録代わりに色々書く(進行形).
前提としてvirtualBoxが入っていること.
インストール
Vagrant
- Vagrantのインストール
http://vagrantup.com/downloads.html からrpmを落としてきて"rpm -Uvh package"する.
- Pluginのインストール
- ChefをProvisioningするプラグイン(必須)とAWS用のプラグイン,サンドボックス環境を入れる.
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-aws
$ vagrant plugin install sahara
- "vagrant plugin list"で入れたプラグイン一覧を確認できる
$ vagrant plugin list
sahara (0.0.17)
vagrant-aws (0.6.0)
vagrant-omnibus (1.4.1)
vagrant-share (1.1.3, system)
Chef
Chef DKを入れることにより,ChefだけでなくBerkshellなども全部一緒に入る.
- Chefのインストール
https://downloads.getchef.com/chef-dk/ からパッケージを落としてくる.
- 例によって"rpm -Uvh package"で入れる.
- knife-soloのインストール
$ chef gem install knife-solo
使い方 -Vagrant-
Chef初期設定ファイルを生成
"knife solo init {リポジトリ名}"で生成するが,"."を指定することによりカレントディレクトリに展開される.
$ knife solo init .
Vagrant Boxファイルの準備
構築する仮想環境のベースとなる,仮想マシンを準備する.
標準では https://vagrantcloud.com/discover/featured で配布されている.その他にも,
でも配布されている.
標準で配布されているCentOS-6.5を取得するには,以下のようにして取得する.
$ vagrant box add chef/centos-6.5
取得したBoxファイルは次のコマンドで確認できる.
$ vagrant box list
centos7_64 (virtualbox, 0)
chef/centos-6.5 (virtualbox, 1.0.0)
ちなみに,他のページから取得する場合は,
$ vagrant box add http://opscode-vm-bento.s3.amazonaws.com/vagrant/vmware/opscode_centos-6.6_chef-provisionerless.box --name bento-centos66
などとすればよい.
今回はCentOS7を別途取得して用いる.
$ vagrant box add https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box --name centos7_64
Vagrant起動用ファイルの準備
作業位置は先ほど生成した初期設定ファイルのある場所である.下記の場所にいればよい.
$ ls
Berksfile cookbooks environments roles
Berksfile.lock data_bags nodes site-cookbooks
ここで取得したBoxのVagrantfileを生成する.コマンドは"vagrant init <name>"となる.
実行後"Vagrantfile"ファイルが生成されている.
$ vagrant init centos7_64
$ ls
Berksfile Memo cookbooks environments roles
Berksfile.lock Vagrantfile data_bags nodes site-cookbooks
このVagrantfileを編集する.ここで仮想マシンへ割り当てるメモリ量やコア数,ネットワークなんかも一緒に設定する.
1 # -*- mode: ruby -*-
2
3 Vagrant.configure(2) do |config|
4
5 config.vm.box = "centos7_64"
6 config.vm.network "private_network", ip: "192.168.33.10"
7 config.vm.provider :virtualbox do |vb|
8 vb.gui = false
9 vb.customize ["modifyvm", :id,
10 "--memory", "2048",
11 "--cpus", "4"]
12 end
13 end
14
仮想マシン(インスタンス)の起動
上記までの状態で,一応まっさらな状態のインスタンスが起動するはずである.インスタンスの起動は次のコマンドで行う.
$ vagrant up
インスタンスへのSSHログイン
インスタンスへのSSHは次のコマンドを用いる.ユーザは自動でvagrantというユーザが割り当てられる.
$ vagrant ssh
[vagrant@localhost ~]$
[vagrant@localhost ~]$ exit
$
SSHの簡略化
インスタンスへホスト名でSSHアクセスできるように,.ssh/configへ登録する.方法は簡単で,以下のようにするだけである.
ここではホスト名を"test"とした.
$ vagrant ssh-config --host test >> ~/.ssh/config
そのほかインスタンス操作
インスタンスは以下のコマンドで停止,サスペンド,再開,インスタンスの削除が行える.
#停止
$ vagrant halt
#サスペンド
$ vagrant suspend
#再開
$ vagrant resume
#インスタンスの削除
$ vagrant destroy
使い方 -Chef-
ゲストマシンへChefをインストール
knife-soloを用いてゲストマシンへChefをインストールする.コマンドは "knife solo prepare {ホスト名}" となる.
$ knife solo prepare test
クックブックを作る
ここからゲストマシンに入れる各種パッケージなどをセットアップするためのクックブックを作る.各機能ごとに1つずつクックブックを作っていく.
クックブックは自分で書いていくが,既存のクックブックをダウンロードして使用することもできる.
既存のクックブックをダウンロードして使う
Berksfileを用いることで既存のクックブックを取得して使用することができる.ここではselinuxのレシピを取得する.
取得するクックブックはBerksfileを編集して指定する.
source "https://api.berkshelf.com"
cookbook "selinux"
後にもっとレシピをダウンロードしたい場合は,2行目以降へ同じように名称を指定していけばよい.
設定が終わり,クックブックをダウンロードするには"berks vendor {宛先ディレクトリ}"とコマンドを打つ.
$ berks vendor cookbooks
自分でクックブックを作る
クックブックの作成は基本こちらになるだろう.ここでは例としてapacheをセットアップするクックブックを作る.
クックブックを作るコマンドは "knife cookbook create {クックブックの名前} {option} -o {出力先}" となる.自作のクックブックは基本的に"site-cookbooks"ディレクトリへ作っていく.
$ sudo knife cookbook create apache -o site-cookbooks
** Creating cookbook apache
** Creating README for cookbook: apache
** Creating CHANGELOG for cookbook: apache
** Creating metadata for cookbook: apache
レシピを作る
クックブックを作ったら次はレシピを作成する.先程に続いてapacheをインストールするレシピを書いていく. レシピの場所は "site-cookbooks/apache/recipes/default.rb" である.
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
ノードを作る
クックブック,レシピを作っただけではゲストマシン(ノード)へ反映されない.反映させるためにはnodesディレクトリ内にあるjsonファイルを編集して指定する.
{
"run_list": [
"recipe[apache]"
]
}