Chef Soloローカル開発環境の自動構築  ~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.4.0が最新版(安定版)なのでこちらを使う。
mkdir works
cd works
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.gz --no-check-certificate
tar zxvf ruby-2.4.0.tar.gz
cd ruby-2.4.0

./configure
make; make install

* Rubyがインストールされたことを確認
ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [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. gemをインストール
* rubygem の公式サイトに行って最新版をダウンロード。
https://rubygems.org/pages/download/

* この時点では、2.6.8が最新版(安定版)なのでこちらを使う。
mkdir works
cd works
wget https://rubygems.org/rubygems/rubygems-2.6.8.zip --no-check-certificate
unzip rubygems-2.6.8.zip
cd rubygems-2.6.8 

ruby setup.rb
make; make install

 

5. chefdkインストール
* chefdkインストール
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

 

6. knife-solo/Berkshelfをインストール
* knife-soloをインストール
gem install knife-solo

* knife-soloは、他のgemのインストール有無によってデフォルトのオプションが変化するため、クックブックの依存関係を管理するBerkshelfをインストールしておく。
gem install berkshelf

 

7. knife-soloでリポジトリを作成
knife-soloでChef Soloを利用するにあたって、
まずはChefリポジトリを新規にローカル側に作成する。

「knife solo init . 」コマンドを実行すると
Chefに必要な各種ファイルとディレクトが展開される。
knife solo init . 

※以下のエラーが起きる場合がある
Cannot find subcommand for: 'solo init .'

※原因はgemのknife-soloが二つ存在していること。
   以下コマンドを実行し再度「knife solo init . 」を実行すればよい。
/opt/chef/embedded/bin/gem install knife-solo
gem cleanup knife-solo
knife solo init .

 

8. rsyncをインストール
knifo-soloサーバー側にrsyncをインストールしておく
yum install rsync

9. knife solo bootstrapによるChef Soloのインストールテスト
knife solo bootstrap [ホスト名 or IPアドレス] コマンドを実行し、knife-soloサーバーから他のサーバに対してChef Soloのインストールを実行してみる。
knife solo bootstrap 192.168.33.11 (※192.168.33.11のサーバを別途用意しておく)

 

10. knifeでクックブックを作成
クックブックの作成はknife-soloではなく、先ほどと同じくknifeで作ります。
knifeはChefに付属のツールで、knife-soloはChef Solo用にknifeを拡張するプラグインという関係。
したがって、kunifeがもともともっている機能で事足りるものはknifeで、knife-soloで拡張しないと使えない機能は、knife soloのようにサブコマンとsoloを付けて実行する。
knife cookbook create を実行しクックブックを作成する。
このとき -o でクックブックの出力先をsite-cookbooksディレクトリに指定します。
Chefにおいては自作のクックブックはsite-cookbooksに置くのが慣習になっているのでそれに従うようにする。
* site-cookbooks配下にdstatクックブックを作成

knife cookbook create dstat -o site-cookbooks

 

11. Nodeオブジェクトを設定
nodes/192.168.33.11.jsonを編集してランリストにdstatのレシピを追記する。 
ーーーーーーーーーーーーーーーーーーーーーーーーー
{
  "run_list":[
    "recipe[dstat]"
  ]
}
ーーーーーーーーーーーーーーーーーーーーーーーーー

 

12. dstatをインストールするレシピを作成
site-cookbooks/dstat/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー

package "dstat" do
  action :install
end
ーーーーーーーーーーーーーーーーーーーーーーーーー

 

13. knife-soloでChef Soloを実行
knife-soloを使ってリモートのノード(192.168.33.11)にプロビジョニングを実施。
knife solo cook [ホスト名 or IPアドレス] コマンドで実行する。

また、knife solo cookコマンドの裏側では、rsyncでknife-soloサーバからリモートにクックブックが転送され、
SSH経由でsudo付きでchef-soloコマンドが実装されている。その際、先に作ったNodeオブジェクトからノードの状態が読み込まれている。
knife solo cook 192.168.33.11



 

Chef Soloローカル開発環境の自動構築  ~Chefの用語編~

1. Chef の用語
Chefでは「コードで書いたサーバ設定の手順」をレシピと呼ぶ。
また、ファイルに対するディレクトリ、あるいはクラスに対する名前空間のように、特定のレシピに必要なデータやファイルをまとめたものを「クックブック」と呼ぶ。
そして、クックブック群を含む、Chefの実行に必要な一連のファイルをまとめた入れ物のことを
リポジトリ」または「キッチン」と呼ぶ。
つまりChefでは、
リポジトリ > クックブック > レシピ
という階層でレシピ群が管理されている。

Chef Soloローカル開発環境の自動構築  ~Chef Solo 操作編~

1. Chef Solo インストール
* Chef社が提供しているオムニバスインスト―ラーを使ってChefをインストール
curl -L https://www.opscode.com/chef/install.sh | sudo bash

* インストールが完了したらchef-soloコマンドが実行できるか確認
(バージョンが表示されたらOK)
chef-solo -v 

 

2. knifeコマンドでクックブックを作成
デフォルトでは、Chefのリポジトリは/var/chefディレクトが使われるので、
サンプルではこのディレクトの中にというリポジトリを操作するための
ツールがインストールされ、クックブックはこのknifeコマンドを使って作成する。
knife cookbook create [クックブック名] -o [出力先ディレクトリ]
sudo knife cookbook create hello -o /var/chef/cookbooks

※/var/chef/cookbooksディレクトリ内にhelloというクックブックが作成される。

 

3. Chef Soloをテスト実行
*「Hello, World!」というログ出力を行うレシピを作成する。
クックブックを作成するとrecipesディレクトリの中にdefault.rbという名前で
ひな形ファイルが作成されており、今回はそのファイルに以下一文を追記する。
sudo vim /var/chef/cookbooks/hello/recipes/default.rb 
log "Hello, World!"

*クックブックを作りレシピを用意できたら、chef-soloコマンドをテスト実行する。
 -oオプションでhelloクックブックを使うことを明示的に指定し、実行する。
sudo chef-solo -o hello

 

 4. Chef Soloでパッケージをインストール
* サーバモニタリングツールのdstatをテストインスト―ルする。
sudo knife cookbook create dstat -o /var/chef/cookbooks

* dstatパッケージをインストールする設定を、
  recipesディレクトリの中のdefault.rbに記述。
sudo vim /var/chef/cookbooks/dstat/recipes/default.rb 
ーーーーーーーーーーーーーーーーーーーーーーーーー
package "dstat" do
    action :install
end
ーーーーーーーーーーーーーーーーーーーーーーーーー

chef-soloコマンドを実行し、dstatのインストールを行う。
sudo chef-solo -o hello,dstat

* rpmコマンドでdstatがインストールされたか確認。
rpm -qa dstat

 

Chef Soloローカル開発環境の自動構築  ~仮想サーバ起動編~

Chef Soloとは・・・・?
中規模以上のシステムでの利用を想定したChef Server/Chef Clientモデルが中央集権の
サーバーやデータベースを必要とするのに対して、Chef Soloはサーバもクライアントも必要とせず、コマンドとして実装される。Chefのようにサーバ構成を自動化するツールは一般的に「プロビジョニング(構成)ツール」と呼ばれるが、最近このプロビジョニングツールの世界では、Vagrantを併用するのが定番になっている。

 

1. VirtualBoxとBagrantをインストール
* VirtualBox ダウンロードURL
   http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html
* Vagrant ダウンロードURL
   https://www.vagrantup.com/downloads.html

Vagrant用のOSイメージは「box」と呼ばれ、インターネット上で公開されているものを利用することもできる。インターネット上で公開されているものとしては、Vagrantbox.esというサイト、あるいはChef社によるプロジェクトBentoなどがあり、自作のbox以外を使う場合は、そのboxが安全なのかどうか自身で検証する必要がある。ここでは、Bentoで公開されているCentOSを使用。

CentOSの最新バージョンの有無についてはBentoプロジェクトサイトを参照。
https://github.com/chef/bento

 

2. 仮想サーバを起動させる
Current Baseboxesの箇所のVirtualBoxの一覧の中から「opscode-centos-6.5」のURLをコピーして、vagrant box add [boxの名前(任意の名前)] [boxのURL]コマンド実行しイメージを取得。

vagrant box add opscode-centos6.5 https://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box


3. 仮想サーバを初期化(Vagrantfileを作成)
vagrant init opscode-centos-6.5
vagrant halt ・・・・ 仮想サーバを止めたい場合)
vagrant destroy・・・仮想サーバを破棄したい場合)

 VagrantfileにプライベートネットワークのIPアドレスを追記
config.vm.box = "opscode-centos6.5"
config.vm.network "private_network", ip: "192.168.33.10"

 

4. 仮想サーバを起動
vagrant up

 

Laravel Homestead

Laravel Homestead でLaravel5.3の開発環境の構築を行う
Laravelには簡単にLaravel開発環境を構築できる「Laravel Homestead」と呼ばれる、
公式VagrantBoxが用意されている。今回は、Vagrantを用いてLaravel5.3の開発環境の構築を行う。

 

1. Laravel Homestead のインストールを実行する
Laravel Homesteadの利用には、統合開発環境としてグローバルで環境を共有する方法と、
プロジェクトごとに環境を構築する方法の2種類があり、
それぞれVirtualBoxVagrantのインストール後に実行する。
Windows環境の軸にコマンドを実行している。
次のコマンドでhomesteadをboxに追加する。

(ネットワーク環境によるが、20分ほどかかる)      

Windows環境でgitコマンド使えるようにする必要があるので、
以下サイトよりインストーラーをダウンロードし、exeファイルを実行する。
https://git-scm.com/download/win

vagrant box add laravel/homestead
git clone https://github.com/laravel/homestead.git Homestead

 

2. Homesteadに含まれるinit.shを実行する
clone実行後、Homesteadに含まれるinit.shを実行。
実行後、ホームディレクトリに.homesteadディレクトリが設置され、
設定ファイルのHomestead.yamlが作成される。C:\Vagrant\Homestead\src\stubs\Homestead.yaml
cd ./Homestead

bash init.sh

 

3. シェルスクリプトを追加
Homestead.yamlと同じ階層にafter.shを設置して、実行したいスクリプトを記述すると、vagrant環境実行時にHomestead環境に反映される。
今回は、PHPやOSのタイムゾーンを日本時間に設定されるように記述しておく。

≪after.shの内容≫
===========================
#!/bin/sh
sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
sudo locale-gen ja_JP.UTF-8
sudo /usr/sbin/update-locale LANG=ja_JP.UTF-8

grep '^date.timezone = Asia/Tokyo' /etc/php5/fpm/php.ini
if [ $? -eq 1 ]; then
sudo cat >> /etc/php5/fpm/php.ini << "EOF"
date.timezone = Asia/Tokyo
mbstring.language = Japanese
EOF
fi
===========================

 

4. vagrant up を実行する
Laravel Homestead環境の構築を実行する
vagrant up

vagrant up実行時に以下のようなエラーメッセージが表示される
=================================
Bringing machine 'homestead-7' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The host path of the shared folder is missing: ~/Code
=================================

C:\Users\plus_ の配下に「Code」ディレクトを作成すれば解決する

※これでLaravel開発環境の構築が完了※

 

 

 

VirtualBox Zabbix3.0 エージェント構築

1. Zabbixエージェントの構築

* Zabbixサーバ
  統合監視するサーバで、Zabbixエージェントから送信されるデータを収集監視する
  IPアドレス ・・・ 192.168.33.12
* Zabbixエージェント(※このサーバーが作業対象)
  Zabbixサーバにサーバ稼働情報を送信する

  IPアドレス ・・・ 192.168.33.10

 

2. Zabbix 3.0 のインストール
Zabbixのリポジトリを追加
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

yum -y install zabbix-agent
yum -y install zabbix-get

 

Zabbix の yumリポジトリyum update でアップデートされないように無効化しておく
vim /etc/yum.repos.d/zabbix.repo

[zabbix]
enabled=1

enabled=0

[zabbix-non-supported]
enabled=1

enabled=0

 

3. zabbix_agentd.conf の編集
# Zabbixサーバからのリモートコマンドを許可
- EnableRemoteCommands=0
+ EnableRemoteCommands=1

# ZabbixサーバのIPアドレスを設定
- Server=127.0.0.1
+ Server=192.168.33.12

# アクティブチェック先。Zabbixサーバを指定しておく
- ServerActive=127.0.0.1
+ ServerActive=192.168.33.12

 

4. Zabbixエージェントの起動と自動起動設定
systemctl start zabbix-agent
systemctl enable zabbix-agent

 

5. Zabbixサーバ 疎通テスト
Zabbixサーバ(192.168.33.12)側で以下のコマンドを実行し、
Zabbixエージェント(192.168.33.10)のバージョンが表示されれば疎通OK
zabbix_get -s 192.168.33.10 -k agent.version
3.0.1
  

VirtualBox Zabbix3.0 インストール構築

2016年2月16日、Zabbix3.0がリリースされました。

今回のバージョンアップでは、WEBインターフェースデザインの一新、通信の暗号化、予測検知機能など、100以上の機能改善が行われました。

5 What's new in Zabbix 3.0.0 | Zabbix Documentation 3.0

 

1. Zabbix 3.0 のインストール
Zabbixのリポジトリを追加
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese
yum -y install zabbix-agent
yum -y install zabbix-get

Zabbix の yumリポジトリyum update でアップデートされないように無効化しておく
vim /etc/yum.repos.d/zabbix.repo

[zabbix]
enabled=1
      ↓
enabled=0

[zabbix-non-supported]
enabled=1
      ↓
enabled=0

 

2. Zabbix3.0 用のDBを構築
mysql -u root -p;
create database zabbix default character set utf8;
grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
flush privileges;
exit;
 

Zabbix3.0 用のDBスキーマとデータをインポート
cd /usr/share/doc/zabbix-server-mysql-3.0.1/
zcat create.sql.gz | mysql -uroot -p zabbix

 

3. Zabbixサーバの設定と起動
vim /etc/zabbix/zabbix_server.conf
# DBPassword=
       ↓
DBPassword=password

 

4. Apacheの設定
vim /etc/httpd/conf.d/zabbix.conf

# php_value date.timezone Europe/Riga

php_value date.timezone Asia/Tokyo


5. Zabbixサーバの起動と自動起動設定
systemctl start zabbix-server
systemctl enable zabbix-server


6. Apacheの再起動
service httpd restart

 

7. Zabbixエージェントの動作確認
zabbix_get -s 127.0.0.1 -k agent.version
3.0.1  ←  バージョンが表示されればOK

 

8. Zabbix 接続テスト & 初期設定
http://******/zabbix/