Ansible 基礎知識
【Ansibleの基本動作】
Ansibleは、処理の支持を出すコントロールノードから、処理の対象となるターゲットノードに
SSH経由でタスクを行う。ターゲットノード側での設定は不要。
コントロールノードにAnsibleをインストールし、インベントリ(Inventory)とプレイブック(Playbook)
の2つのファイルを用意するだけで動作し、コマンドの引数に2つのファイルを指定することで、
当該処理を実行する。
■Ansible実行コマンドの書式
ansible-playbook -i <インベントリ> <プレイブック>
■使用例
ansible-playbook -i inbentory.ini playbook.yml
* インベントリとは .... ?
ターゲットノードをリストして記載するファイル
* プレイブックとは .... ?
ターゲットノード側で実行した処理の流れを記載するファイル
【Ansibleの実行処理】
1. インベントリの名からホストパターンに合うターゲットノードをリストアップ
2. コントロールノードでプレイブック(各モジュール)をPythonの実行コードに変換
3. コントロールノードからターゲットノードにSSH接続を確立し、
Pythonの実行コードをターゲットノードにsftpで送信
4. ターゲットノード側で、Pythonの実行コードを実行し、処理結果をコントロールノードに返却
5. コントロールノード、ターゲットノードにある、Python実行コードを削除
Chef knif-solo Samba環境構築
chefでSamba環境を自動構築する方法を記載。
VagrantのProvisioner(プロビジョナー)を活用して環境構築を行う。
※本編は、以下のLAMP環境構築が済んでいることが前提となる。
1. Sambaユーザー用のパスワードを生成
* パスワードはshadow passwordの形式で設定する必要がある。
[openssl passwd -1 パスワード] の形式で入力する。
openssl passwd -1 smb_user
2. Sambaのクックブックを作成
* knife-soloを使ってSambaのクックブックを作成する。
chef generate cookbook site-cookbooks/samba
3. Sambaのレシピを作成
* site-cookbooks/samba/recipes/default.rbに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
package "samba" do
action :install
end
service "smb" do
action [ :enable, :start ]
supports :status => true, :restart => true, :reload => true
end
# Sambaユーザーの作成
user "smb_user" do
comment "smb_user"
home "/home/smb_user"
shell "/bin/bash"
password "シャドウパスワード"
manage_home true
action [:create, :manage]
end
# Sambaサーバーアクセス用ユーザに設定
# pdbedit は -t を指定すると標準入力からパスワードを読み込む
# パスワードは改行区切りで2回出力する
execute 'pdbedit_script' do
command 'echo -e "smb_user\nsmb_user" | pdbedit -a -t -u smb_user'
end
# ApacheのDocumentRootのユーザー権限をSambaユーザーでアクセスできるように、
# nobodyユーザーに変更しておく(※DocumentRootはセキュリティのため、適宜変更のこと!)
execute 'change_authority' do
command 'chown -R nobody:nobody /var/www/html'
end
template "smb.conf" do
path "/etc/samba/smb.conf"
owner "root"
group "root"
mode 0644
notifies :restart, 'service[smb]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
4. Sambaのテンプレートを作成
* templatesディレクトを作成する
mkdir -p site-cookbooks/samba/templates/default
* site-cookbooks/samba/templates/default/smb.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
[global]
# Linux側日本語文字コード
unix charset = UTF-8
# Windows側日本語文字コード
dos charset = CP932
# Linux側日本語文字コード
display charset = UTF-8
workgroup = WORKGROUP
# ログイン時 ユーザー名 & パスワード の認証が必要
security = user
# 内部からのアクセスのみ許可
hosts allow = 192.168. 127.
# (プリンタ共有無効化)※Sambaでプリンタを共有しない場合
load printers = no
# (プリンタ共有無効化)※Sambaでプリンタを共有しない場合
disable spoolss = yes
[public]
comment = Public Stuff
path = /var/www/html
public = no
writable = yes
only guest = yes
ーーーーーーーーーーーーーーーーーーーーーーーーー
5. Berksfileにsambaを追記
* Berksfileに以下一文を追加しておく。
cookbook "samba", path: "./site-cookbooks/samba"
6. プロビジョニングを再実行
berks vendor ./cookbooks
7. Vagrantfileにsambaを追記
* sambaクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.15"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php72]
recipe[mysql]
recipe[package]
recipe[samba]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
8. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
Chef knif-solo LAMP環境構築
開発時にアプリケーションを実行する環境を自動構築する方法を記載。
開発環境の構築を自動化しておけば、いつでも開発環境を作ったり壊したりでき、
例えばチームに新しい開発メンバーが加わったときにも簡単に開発環境を用意し、
開発を始めることが可能となる。
ここでは、CentOS7.2・Apache・PHP・Ruby・MySQLを軸にLAMP環境を構築。
1. Chef Solo インストール
* Chef社が提供しているオムニバスインスト―ラーを使ってChefをインストール
curl -L https://www.opscode.com/chef/install.sh | sudo bash
* インストールが完了したらchef-soloコマンドが実行できるか確認
(バージョンが表示されたらOK)
chef-solo -v
2. Bundlerを導入&実行
* クックブックの管理のためBerksfileを利用する。
Berksfileとは、第三者が公開しているクックブック(コミュニティクックブック)を
Rubyの依存性管理ツールであるBundlerのように管理するための設定ファイルのこと。
Berksfileはgemという形式で配布されており、Rubyにはgem管理のために
Bundlerというツールがあり、Gemfileに書かれたgemの依存関係を解決してくれる。
* Bundlerのインストール
gem install bundler
3. knife-soloでリポジトリを作成
* 新たに作業用ディレクトリを作成し、そちらに移動する。
この作業用ディレクトリの中にあるファイルのみで環境の構築は完結する。
また、既存のディレクトリで作業する場合には、BerksfileによってVagrantfileをはじめ
いくつかのファイルが上書かれてしまうので、事前にバックアップを取っておく。
作業ディレクトリ内に独立した環境を構築するために、Bundler用のGemfileを作成する。
mkdir /var/chef_knife_solo
cd /var/chef_knife_solo
knife solo init .
* 以下の内容を記述したGemfileを作成。(vim /var/chef_knife_solo/Gemfile)
ーーーーーーーーーーーーーーーーーーーーーーーーー
source 'https://rubygems.org'
gem 'chef'
gem 'knife-solo'
gem 'berkshelf', "2.0.16"
ーーーーーーーーーーーーーーーーーーーーーーーーー
* bundleコマンドを実行
yum install libxml2-devel libxslt-devel
bundle install
※これで必要なライブラリのインストールが完了する。
4. Apacheのクックブックを作成
* knife-soloを使ってApacheのクックブックを作成する。
chef generate cookbook site-cookbooks/apache
ーーーーーーーーーーーーーーーーーーーーーーーーー
include_recipe "yum-epel"
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
supports :status => true, :restart => true, :reload => true
end
directory "/var/www/html/local.develop.co.jp/htdocs" do
owner "apache"
group "apache"
recursive true
mode 0755
action :create
end
template "security.conf" do
path "/etc/httpd/conf.d/security.conf"
owner "root"
group "root"
mode 0644
end
template "local.develop.co.jp.conf" do
path "/etc/httpd/conf.d/local.develop.co.jp.conf"
owner "root"
group "root"
mode 0644
notifies :restart, 'service[httpd]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
5. Apacheのレシピを作成
* site-cookbooks/apache/recipes/default.rbに以下内容を記述。
6. Apacheのセキュリティ用テンプレートを作成
* templatesディレクトを作成する
mkdir -p site-cookbooks/apache/templates/default
* site-cookbooks/apache/templates/default/security.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# バージョン情報の隠蔽
ServerTokens Prod
Header unset X-Powered-By
ServerSignature off
# httpoxy 対策
RequestHeader unset Proxy
# クリックジャッキング対策
Header always append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# XST対策
TraceEnable Off
# DoS 攻撃対策
LimitRequestBody 10485760
LimitRequestFields 20
# slowloris 対策
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
<Directory /var/www/html>
# .htaccess の有効化
AllowOverride All
# ファイル一覧出力の禁止
Options -Indexes
</Directory>
<Directory "/var/www/cgi-bin">
<IfVersion > 2.4>
Require all denied
</IfVersion>
</Directory>
ーーーーーーーーーーーーーーーーーーーーーーーーー
7. Apacheの開発環境用テンプレートを作成
* site-cookbooks/apache/templates/default/local.develop.co.jp.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
<VirtualHost *:80>
ServerName local.develop.co.jp
DocumentRoot "/var/www/html/local.develop.co.jp/htdocs"
DirectoryIndex index.php index.html
ErrorLog "/var/log/httpd/local.develop.co.jp-error.log"
CustomLog "/var/log/httpd/local.develop.co.jp-access.log" common
<Directory "/var/www/html/local.develop.co.jp/htdocs">
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
ーーーーーーーーーーーーーーーーーーーーーーーーー
8. Berksfileを編集
* クックブックの依存関係を定義する。Berksfileに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
site :opscode
cookbook "yum-epel"
cookbook "apache", path: "./site-cookbooks/apache"
ーーーーーーーーーーーーーーーーーーーーーーーーー
9. berks installコマンドを実行
* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks
10. vagrant init コマンドを実行
* vagrant init コマンドを実行し、Vagrantfileを作成する。
vagrant init
11. Vagrantfileを編集
* Vagrantfileにホスト名の設定、box設定、IPアドレスの設定から
Apacheをインストールするプロビジョニングの設定を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.15"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
12. vagrant-omnibusプラグインをインストール
* BentoのboxにはChef SoloおよびChef Clientが含まれていないため、
仮想サーバ起動時に自動インストールされるようにvagrant-omnibusという
Vagrantのプラグンをインストールしておく。
vagrant plugin install vagrant-omnibus
13. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
※ブラウザでhttp://192.168.33.15にアクセスし疎通確認をすること。
14. PHPをインストール
* PHPの導入に伴い、PHP-FPMのインストールを行う。
Apacheと同様にknifeコマンドを使ってクックブックのひな形を作成する。
chef generate cookbook site-cookbooks/php-env
15. PHPのレシピを作成
* site-cookbooks/php-env/recipes/default.rbに以下内容を記述。
PHP5.5から標準バンドルされたPHPの動作を高速化するためのキャッシュモジュールである
OPcacheが一緒にインストールされるように設定しておく。
ーーーーーーーーーーーーーーーーーーーーーーーーー
%w{php-fpm php-pecl-zendopcache}.each do |pkg|
package pkg do
action :install
notifies :restart, "service[php-fpm]"
end
end
service "php-fpm" do
action [:enable, :start]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
16. PHP7.2をインストールするレシピを作成
* yumの標準リポジトリではPHP7.2は提供されていないため、
外部リポジトリであるRemiからイントールするようにレシピを作成する。
* yumにremiリポジトリを追加して、PHP7.2をインストールするレシピを作成し、
php-envクックブックのrecipesフォルダphp72.rbに追加する。
* site-cookbooks/php-env/recipes/php72.rbに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
yum_repository 'remi' do
description 'Les RPM de Remi - Repository'
baseurl 'http://rpms.famillecollet.com/enterprise/7/remi/x86_64/'
gpgkey 'http://rpms.famillecollet.com/RPM-GPG-KEY-remi'
fastestmirror_enabled true
action :create
end
yum_repository 'remi-php72' do
description 'Les RPM de remi de PHP 7.2 pour Enterprise Linux 7'
baseurl 'http://rpms.famillecollet.com/enterprise/7/php72/$basearch/'
gpgkey 'http://rpms.famillecollet.com/RPM-GPG-KEY-remi'
fastestmirror_enabled true
action :create
end
# 関連パッケージのインストール
%w{
php
php-fpm
php-opcache
php-devel
php-mbstring
php-mcrypt
php-mysqlnd
php-phpunit-PHPUnit
php-pecl-xdebug
}.each do |pkg|
package pkg do
action :install
options "--enablerepo=remi"
end
end
# PHPサンプルページ
template "phpinfo.php" do
path "/var/www/html/local.develop.co.jp/htdocs/phpinfo.php"
owner "apache"
group "apache"
mode 0644
notifies :restart, 'service[httpd]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
17. PHP7.2のテンプレートを作成
* templatesディレクトを作成する
mkdir -p site-cookbooks/php-env/templates/default
* site-cookbooks/php-env/templates/default/phpinfo.php.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
<?php phpinfo(); ?>
ーーーーーーーーーーーーーーーーーーーーーーーーー
18. Berksfileにphp-envを追記
* 最後に、Berksfileに以下一文を追記しておく。
cookbook "php-env", path: "./site-cookbooks/php-env"
19. プロビジョニングを再実行
berks vendor ./cookbooks
20. Vagrantfileにphp-envを追記
* php-envクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.15"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php72]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
21. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
22. hostsの設定
* ローカルPCの C:\Windows\System32\drivers\etc\hosts に以下を追記。
192.168.33.12 local.develop.co.jp
23. phpinfoを表示する
* ブラウザでhttp://local.develop.co.jp/phpinfo.phpにアクセス。
PHP7.2の情報が表示されることを確認。
24. MySQLをインストール
* オープンソースのRDBMSのMySQLを扱うクックブックを作成する。
chef generate cookbook site-cookbooks/mysql
25. MySQLのレシピを作成
site-cookbooks/mysql/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー
remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm" do
source 'http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm'
action :create
end
rpm_package 'mysql-community-release' do
source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm"
action :install
end
package "mysql-server" do
action :install
end
template "my.conf" do
path "/etc/my.conf"
owner "root"
group "root"
mode 0644
end
service "mysqld" do
action [ :enable, :start ]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
26. MySQLのテンプレートを作成
* templatesディレクトを作成する
mkdir -p site-cookbooks/mysql/templates/default
* site-cookbooks/mysql/templates/default/my.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#log=/var/log/mysql.log
#default-character-set=utf8
character-set-server=utf8
skip-character-set-client-handshake
innodb_file_per_table
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_log_files_in_group=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
ーーーーーーーーーーーーーーーーーーーーーーーーー
27. Berksfileにmysqlを追記
* Berksfileに以下一文を追加しておく。
cookbook "mysql", path: "./site-cookbooks/mysql"
28. プロビジョニングを再実行
berks vendor ./cookbooks
29. VagrantfileにMySQLを追記
* mysqlクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.15"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php72]
recipe[mysql]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
30. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
31. その他のパッケージをインストール
* その他、必要なパッケージをインストールするクックブックを作成する。
chef generate cookbook site-cookbooks/package
32. その他のパッケージのレシピを作成
site-cookbooks/package/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー
%w{
fping
iksemel
net-snmp-libs
curl
unixODBC
OpenIPMI-libs
libssh2
vim
mlocate
}.each do |pkg|
package pkg do
action :install
end
end
file "/etc/localtime" do
content IO.read("/usr/share/zoneinfo/Japan")
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
33. Berksfileにpacを追記
* Berksfileに以下一文を追加しておく。
cookbook "package", path: "./site-cookbooks/package"
34. プロビジョニングを再実行
berks vendor ./cookbooks
35. Vagrantfileにpackageを追記
* packageクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.15"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php72]
recipe[mysql]
recipe[package]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
36. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
Chef knife-solo 環境構築
knife-soloとは・・・・?
knife-soloとは、ChefをChef Solo環境で利用するためにユーリティリティツールで、
knife-soloを使うと、手元で作ったクックブックをリモートのサーバに転送して
chef-soloコマンドを実行するといった一連の作業を自動化できる。
knife-soloはRubyGemsとして公開されており、gemでインストール可能。
そのため、はじめにrubyとgemのインストールを行う。
1. Rubyのインストールに必要なライブラリをインストール
* コンパイルコマンドを含めzip解凍などに必要なライブラリをインストールする。
yum install gcc zip unzip zlib zlib-devel openssl openssl-devel
2. Rubyをインストール
* gemがyumで入手できる ruby のバージョンに対応していないので、
公式サイトから最新版を入手してソースからコンパイル&インストールを行う。
* ruby の公式ページに行って最新版をダウンロード。
https://www.ruby-lang.org/ja/downloads/
* この時点では、2.5.0が最新版(安定版)なのでこちらを使う。
mkdir works
cd works
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz --no-check-certificate
tar zxvf ruby-2.5.0.tar.gz
cd ruby-2.5.0
./configure
make; make install
* Rubyがインストールされたことを確認
ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
3. Rubyにzlibとopensslを組み込む
* rubyをソースからインストールしてchefをインストールしようとすると
zlibやopenssl まわりのエラーが出てしまうので、
rubyのソースディレクトリから zlib のライブラリを作っておく。
cd ext/zlib
ruby extconf.rb
make; make install
* つぎに同じくソースディレクトリからopensslのライブラリをつくる。
同様の流れでmakeを行うと以下のエラーが出てしまう。
「No rule to make target `/thread_native.h」
元々のMakefileにtop_srcdirの記述が足りないことが原因のため、
以下コマンドを実行することでopensslのライブラリをつくる。
cd ext/openssl
ruby extconf.rb
sed -i -e "1i top_srcdir = $(cd ../.. && pwd)" Makefile
make; make install
※sed の 「$(cd ../.. && pwd)」という部分は、
rubyのソースディレクトリを指定しておけばOK。
4. chefdkインストール
* chefdkインストール(chefコマンドを使えるようにしておく)
wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.7.0-1.el6.x86_64.rpm
rpm -ivh chefdk-0.7.0-1.el6.x86_64.rpm
5. knife-solo/Berkshelfをインストール
* knife-soloをインストール
gem install knife-solo
* knife-soloは、他のgemのインストール有無によってデフォルトのオプションが変化するため、クックブックの依存関係を管理するBerkshelfをインストールしておく。
gem install berkshelf
6. knife-soloでリポジトリを作成
knife-soloでChefリポジトリの新規作成を行うことができるか確認しておく。
mkdir chef-repo
cd chef-repo
knife solo init .
※Chefに必要な各種ファイルとディレクトが展開されたらOK
Chef Soloローカル開発環境の自動構築 ~Samba環境構築編~
chefでSamba環境を自動構築する方法を記載。
VagrantのProvisioner(プロビジョナー)を活用して環境構築を行う。
※本編は、以下のLAMP環境構築が済んでいることが前提となる。
1. Sambaユーザー用のパスワードを生成
* パスワードはshadow passwordの形式で設定する必要がある。
[openssl passwd -1 パスワード] の形式で入力する。
openssl passwd -1 smb_user
2. Sambaのクックブックを作成
* knife-soloを使ってSambaのクックブックを作成する。
bundle exec knife cookbook create samba -o ./site-cookbooks
3. Sambaのレシピを作成
* site-cookbooks/samba/recipes/default.rbに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
package "samba" do
action :install
end
service "smb" do
action [ :enable, :start ]
supports :status => true, :restart => true, :reload => true
end
# Sambaユーザーの作成
user "smb_user" do
comment "smb_user"
home "/home/smb_user"
shell "/bin/bash"
password "シャドウパスワード"
supports :manage_home => true
action [:create, :manage]
end
# Sambaサーバーアクセス用ユーザに設定
# pdbedit は -t を指定すると標準入力からパスワードを読み込む
# パスワードは改行区切りで2回出力する
execute 'pdbedit_script' do
command 'echo -e "smb_user\nsmb_user" | pdbedit -a -t -u smb_user'
end
# ApacheのDocumentRootのユーザー権限をSambaユーザーでアクセスできるように、
# nobodyユーザーに変更しておく(※DocumentRootはセキュリティのため、適宜変更のこと!)
execute 'change_authority' do
command 'chown -R nobody:nobody /var/www/html'
end
template "smb.conf" do
path "/etc/samba/smb.conf"
owner "root"
group "root"
mode 0644
notifies :restart, 'service[smb]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
4. Sambaのテンプレートを作成
* site-cookbooks/samba/templates/default/smb.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
[global]
# Linux側日本語文字コード
unix charset = UTF-8
# Windows側日本語文字コード
dos charset = CP932
# Linux側日本語文字コード
display charset = UTF-8
workgroup = WORKGROUP
# ログイン時 ユーザー名 & パスワード の認証が必要
security = user
# 内部からのアクセスのみ許可
hosts allow = 192.168. 127.
# (プリンタ共有無効化)※Sambaでプリンタを共有しない場合
load printers = no
# (プリンタ共有無効化)※Sambaでプリンタを共有しない場合
disable spoolss = yes
[public]
comment = Public Stuff
path = /var/www/html
public = no
writable = yes
only guest = yes
ーーーーーーーーーーーーーーーーーーーーーーーーー
5. Berksfileにsambaを追記
* Berksfileに以下一文を追加しておく。
cookbook "samba", path: "./site-cookbooks/samba"
6. プロビジョニングを再実行
bundle exec berks install --path ./cookbooks
* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks
7. Vagrantfileにsambaを追記
* sambaクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.12"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.json = {
nginx: {
env: ["php"]
},
php70: {
timezone: "Asia/Tokyo"
}
}
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php70]
recipe[mysql]
recipe[package]
recipe[samba]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
8. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
Chef Soloローカル開発環境の自動構築 ~LAMP環境構築編~
開発時にアプリケーションを実行する環境を自動構築する方法を記載。
開発環境の構築を自動化しておけば、いつでも開発環境を作ったり壊したりでき、
例えばチームに新しい開発メンバーが加わったときにも簡単に開発環境を用意し、
開発を始めることが可能となる。
ここでは、CentOS7.2・Apache・PHP・Ruby・MySQLを軸にLAMP環境を構築。
合わせて、ログ管理ツールのFluentdもインストール&構築しておく。
0. Bundlerを導入&実行
* クックブックの管理のためBerksfileを利用する。
Berksfileとは、第三者が公開しているクックブック(コミュニティクックブック)を
Rubyの依存性管理ツールであるBundlerのように管理するための設定ファイルのこと。
Berksfileはgemという形式で配布されており、Rubyにはgem管理のために
Bundlerというツールがあり、Gemfileに書かれたgemの依存関係を解決してくれる。
* Bundlerのインストール
gem install bundler
1. knife-soloでリポジトリを作成
* 新たに作業用ディレクトリを作成し、そちらに移動する。
この作業用ディレクトリの中にあるファイルのみで環境の構築は完結する。
また、既存のディレクトリで作業する場合には、BerksfileによってVagrantfileをはじめ
いくつかのファイルが上書かれてしまうので、事前にバックアップを取っておく。
作業ディレクトリ内に独立した環境を構築するために、Bundler用のGemfileを作成する。
mkdir /var/chef_knife_solo
cm /var/chef_knife_solo
knife solo init .
* 以下の内容を記述したGemfileを作成。(vim /var/chef_knife_solo/Gemfile)
ーーーーーーーーーーーーーーーーーーーーーーーーー
source 'https://rubygems.org'
gem 'chef'
gem 'knife-solo'
gem 'berkshelf', "2.0.16"
ーーーーーーーーーーーーーーーーーーーーーーーーー
* bundleコマンドを実行
yum install libxml2-devel libxslt-devel
bundle install
※これで必要なライブラリのインストールが完了する。
2. Apacheのクックブックを作成
* knife-soloを使ってApacheのクックブックを作成する。
bundle exec knife cookbook create apache -o ./site-cookbooks
3. Apacheのレシピを作成
* site-cookbooks/apache/recipes/default.rbに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
include_recipe "yum-epel"
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
supports :status => true, :restart => true, :reload => true
end
directory "/var/www/html/local.develop.co.jp/htdocs" do
owner "apache"
group "apache"
recursive true
mode 0755
action :create
end
template "security.conf" do
path "/etc/httpd/conf.d/security.conf"
owner "root"
group "root"
mode 0644
end
template "local.develop.co.jp.conf" do
path "/etc/httpd/conf.d/local.develop.co.jp.conf"
owner "root"
group "root"
mode 0644
notifies :restart, 'service[httpd]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
4-1. Apacheのセキュリティ用テンプレートを作成
* site-cookbooks/apache/templates/default/security.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# バージョン情報の隠蔽
ServerTokens Prod
Header unset X-Powered-By
ServerSignature off
# httpoxy 対策
RequestHeader unset Proxy
# クリックジャッキング対策
Header always append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# XST対策
TraceEnable Off
# DoS 攻撃対策
LimitRequestBody 10485760
LimitRequestFields 20
# slowloris 対策
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
<Directory /var/www/html>
# .htaccess の有効化
AllowOverride All
# ファイル一覧出力の禁止
Options -Indexes
</Directory>
<Directory "/var/www/cgi-bin">
<IfVersion > 2.4>
Require all denied
</IfVersion>
</Directory>
ーーーーーーーーーーーーーーーーーーーーーーーーー
4-2. Apacheの開発環境用テンプレートを作成
* site-cookbooks/apache/templates/default/local.develop.co.jp.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
<VirtualHost *:80>
ServerName local.develop.co.jp
DocumentRoot "/var/www/html/local.develop.co.jp/htdocs"
DirectoryIndex index.php index.html
ErrorLog "/var/log/httpd/local.develop.co.jp-error.log"
CustomLog "/var/log/httpd/local.develop.co.jp-access.log" common
<Directory "/var/www/html/local.develop.co.jp/htdocs">
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
ーーーーーーーーーーーーーーーーーーーーーーーーー
5. Berksfileを編集
* クックブックの依存関係を定義する。Berksfileに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
site :opscode
cookbook "yum-epel"
cookbook "apache", path: "./site-cookbooks/apache"
ーーーーーーーーーーーーーーーーーーーーーーーーー
6. berks installコマンドを実行
* この時点でクックブックの依存関係定義が完了したので、
berks install を実行しておく。
bundle exec berks install --path ./cookbooks
* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks
7. vagrant init コマンドを実行
* vagrant init コマンドを実行し、Vagrantfileを作成する。
vagrant init
8. Vagrantfileを編集
* Vagrantfileにホスト名の設定、box設定、IPアドレスの設定から
Apacheをインストールするプロビジョニングの設定を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.12"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
9. vagrant-omnibusプラグインをインストール
* BentoのboxにはChef SoloおよびChef Clientが含まれていないため、
仮想サーバ起動時に自動インストールされるようにvagrant-omnibusという
Vagrantのプラグンをインストールしておく。
vagrant plugin install vagrant-omnibus
10. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
※ブラウザでhttp://192.168.33.12にアクセスし疎通確認をすること。
11. PHPをインストール
* PHPの導入に伴い、PHP-FPMのインストールを行う。
Apacheと同様にknifeコマンドを使ってクックブックのひな形を作成する。
bundle exec knife cookbook create php-env -o ./site-cookbooks
12. PHPのレシピを作成
* site-cookbooks/php-env/recipes/default.rbに以下内容を記述。
PHP5.5から標準バンドルされたPHPの動作を高速化するためのキャッシュモジュールである
OPcacheが一緒にインストールされるように設定しておく。
ーーーーーーーーーーーーーーーーーーーーーーーーー
%w{php-fpm php-pecl-zendopcache}.each do |pkg|
package pkg do
action :install
notifies :restart, "service[php-fpm]"
end
end
service "php-fpm" do
action [:enable, :start]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
13. PHP7.0をインストールするレシピを作成
* yumの標準リポジトリではPHP7.0は提供されていないため、
外部リポジトリであるRemiからイントールするようにレシピを作成する。
* yumにremiリポジトリを追加して、PHP7.0をインストールするレシピを作成し、
php-envクックブックのrecipesフォルダphp70.rbに追加する。
* site-cookbooks/php-env/recipes/php70.rbに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
yum_repository 'remi' do
description 'Les RPM de Remi - Repository'
baseurl 'http://rpms.famillecollet.com/enterprise/7/remi/x86_64/'
gpgkey 'http://rpms.famillecollet.com/RPM-GPG-KEY-remi'
fastestmirror_enabled true
action :create
end
yum_repository 'remi-php70' do
description 'Les RPM de remi de PHP 7.0 pour Enterprise Linux 7'
baseurl 'http://rpms.famillecollet.com/enterprise/7/php70/$basearch/'
gpgkey 'http://rpms.famillecollet.com/RPM-GPG-KEY-remi'
fastestmirror_enabled true
action :create
end
# 関連パッケージのインストール
%w{
php
php-fpm
php-opcache
php-devel
php-mbstring
php-mcrypt
php-mysqlnd
php-phpunit-PHPUnit
php-pecl-xdebug
}.each do |pkg|
package pkg do
action :install
options "--enablerepo=remi"
end
end
# php.ini設定
template "php.ini" do
path "/etc/php.ini"
owner "root"
group "root"
mode 0644
end
# PHPサンプルページ
template "phpinfo.php" do
path "/var/www/html/local.develop.co.jp/htdocs/phpinfo.php"
owner "apache"
group "apache"
mode 0644
notifies :restart, 'service[httpd]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
14. PHP7.0のテンプレートを作成
* site-cookbooks/php-env/templates/default/phpinfo.php.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
<?php phpinfo(); ?>
ーーーーーーーーーーーーーーーーーーーーーーーーー
15. Berksfileにphp-envを追記
* 最後に、Berksfileに以下一文を追記しておく。
cookbook "php-env", path: "./site-cookbooks/php-env"
16. プロビジョニングを再実行
bundle exec berks install --path ./cookbooks
* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks
17. Vagrantfileにphp-envを追記
* php-envクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.12"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.json = {
nginx: {
env: ["php"]
},
php70: {
timezone: "Asia/Tokyo"
}
}
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php70]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
18. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
19. hostsの設定
* ローカルPCの C:\Windows\System32\drivers\etc\hosts に以下を追記。
192.168.33.12 local.develop.co.jp
20. phpinfoを表示する
* ブラウザでhttp://local.develop.co.jp/phpinfo.phpにアクセス。
PHP7.0の情報が表示されることを確認。
21. MySQLをインストール
* オープンソースのRDBMSのMySQLを扱うクックブックを作成する。
bundle exec knife cookbook create mysql -o ./site-cookbooks
22. MySQLのレシピを作成
site-cookbooks/mysql/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー
remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm" do
source 'http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm'
action :create
end
rpm_package 'mysql-community-release' do
source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm"
action :install
end
package "mysql-server" do
action :install
end
template "my.conf" do
path "/etc/my.conf"
owner "root"
group "root"
mode 0644
end
service "mysqld" do
action [ :enable, :start ]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
23. MySQLのテンプレートを作成
* site-cookbooks/mysql/templates/default/my.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#log=/var/log/mysql.log
#default-character-set=utf8
character-set-server=utf8
skip-character-set-client-handshake
innodb_file_per_table
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_log_files_in_group=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
ーーーーーーーーーーーーーーーーーーーーーーーーー
24. Berksfileにmysqlを追記
* Berksfileに以下一文を追加しておく。
cookbook "mysql", path: "./site-cookbooks/mysql"
25. プロビジョニングを再実行
bundle exec berks install --path ./cookbooks
* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks
26. VagrantfileにMySQLを追記
* mysqlクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.12"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.json = {
nginx: {
env: ["php"]
},
php70: {
timezone: "Asia/Tokyo"
}
}
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php70]
recipe[mysql]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
27. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
28. その他のパッケージをインストール
* その他、必要なパッケージをインストールするクックブックを作成する。
bundle exec knife cookbook create package -o ./site-cookbooks
29. その他のパッケージのレシピを作成
site-cookbooks/package/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー
%w{
fping
iksemel
net-snmp-libs
curl
unixODBC
OpenIPMI-libs
libssh2
vim
mlocate
}.each do |pkg|
package pkg do
action :install
end
end
file "/etc/localtime" do
content IO.read("/usr/share/zoneinfo/Japan")
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
30. Berksfileにpacを追記
* Berksfileに以下一文を追加しておく。
cookbook "package", path: "./site-cookbooks/package"
31. プロビジョニングを再実行
bundle exec berks install --path ./cookbooks
* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks
32. Vagrantfileにpackageを追記
* packageクックブックを実行するようにVagrantfileを編集する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# IPアドレスの設定
config.vm.network :private_network, ip: "192.168.33.12"
# vagrant-omnibusの有効化
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.json = {
nginx: {
env: ["php"]
},
php70: {
timezone: "Asia/Tokyo"
}
}
chef.run_list = %w[
recipe[yum-epel]
recipe[apache]
recipe[php-env::php70]
recipe[mysql]
recipe[package]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
33. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision
Chef Soloローカル開発環境の自動構築 ~Vagrantから直接クックブックを適用~
Vagrantには、起動時または任意のタイミングでクックブックを適用する機能が予め用意されており、この機能のことをVagrantではProvisioner(プロビジョナー)と呼ぶ。
Chef SoloまたはChef Client以外に、Puppetやシェルスクリプトなどにも対応。
1. Vagrantfileへの記述
* VagrantのプロビジョニングにChef Soloを使うには、
Vagrantfileにconfig.vm.provisionの箇所のコードを追記する。
ーーーーーーーーーーーーーーーーーーーーーーーーー
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-centos-7.2"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
# Chef Clientの最新版を利用可能にする
config.omnibus.chef_version = :latest
config.vm.provision :chef_solo do |chef|
# ①クックブックの配置場所を指定
chef.cookbooks_path = "./cookbooks"
# ②Attributeの定義
chef.json = {
nginx: {
env: "ruby"
},
fluentd: {
installer: "rpm"
},
mysql: {
server_root_password: 'rootpass'
}
}
# ③適用するクックブックの定義
chef.run_list = %w[
recipe[yum-epel]
recipe[httpd]
recipe[mysql]
recipe[fluentd]
]
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
※①…クックブックの配置場所をVagrantfileと同じディレクトリにあるcookbooksディレクトを指定
②…クックブックの適用の際に利用するAttributeを定義
③…適用するクックブックを定義
2. Chef Clinet/Chef Soloを自動インストール
* Bentoのboxには、Chef ClinetやChef Soloが含まれていない。
そのため、これらを自動インストールしてくれるvagrant-omnibusプラグインを利用。
このプラグインを使うと、仮想サーバの起動時にChef Clinetがインストールされているかを確認したうえで、インストールされていない場合は、インターネット経由でインストーラーをダウンロードし自動で仮想サーバにインストールしてくれる。
vagrant plugin install vagrant-omnibus
※この機能を有効にするには、Vagrantfileに以下を指定しておく。
config.omnibus.chef_version = :latest