Chef実践入門を実践してみる その6

Apache,MySQLのインストール

だんだん仕組みが分かってきました。
テキストに則りApache,MySQLのクックブックを作成し、
インストールするレシピを作成して実行。

確認のためにvagrant側にsshしてみたところ、

[vagrant@localhost ~]$ ls -la
合計 64
drwx------. 5 vagrant vagrant  4096  3月  5 13:24 2017 .
drwxr-xr-x. 3 root    root     4096 12月  1 15:33 2016 ..
-rw-------. 1 vagrant vagrant   788  3月  5 01:40 2017 .bash_history
-rw-r--r--. 1 vagrant vagrant    18  5月 10 23:17 2016 .bash_logout
-rw-r--r--. 1 vagrant vagrant   176  5月 10 23:17 2016 .bash_profile
-rw-r--r--. 1 vagrant vagrant   124  5月 10 23:17 2016 .bashrc
drwxrw----. 3 vagrant vagrant  4096  2月 27 14:09 2017 .pki
drwx------. 2 vagrant root     4096  2月 26 09:57 2017 .ssh
-rw-r--r--. 1 vagrant vagrant     6 12月  1 15:33 2016 .vbox_version
drwx------. 9 vagrant vagrant  4096  3月  7 12:09 2017 chef-solo
-rw-rw-r--. 1 vagrant vagrant 20507  3月  5 13:24 2017 install.sh

chef-soloのディレクトリが出来ていました。
自動で出来るのでしょうか。。

[vagrant@localhost ~]$ ps auwx | egrep "(httpd|mysql)"
root      4542  0.0  0.3  11048  3348 ?        Ss   12:10   0:00 /usr/sbin/httpd
apache    4544  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4545  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4546  0.0  0.2  11048  2188 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4547  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4548  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4549  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4550  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
apache    4551  0.0  0.2  11048  2160 ?        S    12:10   0:00 /usr/sbin/httpd
root      4749  0.0  0.1   5128  1432 ?        S    12:10   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql     4851  0.0  1.5 125228 16268 ?        Sl   12:10   0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
vagrant   4891  0.0  0.0   5392   800 pts/0    S+   12:15   0:00 egrep (httpd|mysql)

プロセスも動いている様子。
レシピの中で起動する内容まで記載していたので、
インストールだけでなく起動した状態になっていました。

ファイルの配置

confファイル等共通で配布・管理したい設定ファイルは
/template/defaultのしたに配置すると良いとのことでした。
そのため、さきほど起動させたapachehttpd.confを配置し、実行。

    @@ -273,7 +273,7 @@
     # You will have to access it by its address anyway, and this will make
     # redirections work in a sensible way.
     #
    -#ServerName www.example.com:80
    +ServerName webdb:80

追加した設定が変更される内容がログに出ており、正しく配置ができました。

仮想サーバを破棄する

一度破棄して、レシピを再度適用したらどうなるかを確認。

$ vagrant destroy -f
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...

vagrantコマンドを利用して、仮想マシンを破棄。
virtualbox側のGUIを見ていましたが、割と即座に消えました。
再度 vagrantを実行し、仮想マシンを立ち上げ、ログインし確認したところ
まっさらな状態になっていました。

chefのインストールも未実施の状態まで戻ったため、
一気にインストール、chefの実行まで行うbootstrapコマンドを実行しました。

$ knife solo bootstrap webdb

するとchefのインストールから始まり、先ほど設定した際と同様のログが流れ、
再度接続しプロセス確認しましたが、
dstat,Apache,MySQLが正しくインストールされた状態まで戻すことができました。

vagrant+chefの組み合わせが素晴らしい。。。
開発環境等はすごく使える仕組みだなと思いました。

Chef実践入門を実践してみる その5

ようやくknife-soloもインストール出来たので、
ローカル側にリポジトリを作成します。

リポジトリの作成

vagrantファイル 用にworkフォルダを作成していたので、
移動して、以下のコマンドを打ちます。

$ knife solo init .

インストールが走り、終了後該当ディレクトリを確認しました。

$ ls -la
total 24
drwxr-xr-x  13 momo  staff   442  3  5 22:19 .
drwxr-xr-x+ 32 momo  staff  1088  3  5 22:18 ..
drwxr-xr-x   3 momo  staff   102  3  5 22:19 .chef
-rw-r--r--   1 momo  staff    12  3  5 22:19 .gitignore
drwxr-xr-x   3 momo  staff   102  2 26 18:56 .vagrant
-rw-r--r--   1 momo  staff    35  3  5 22:19 Berksfile
-rw-r--r--   1 momo  staff  3022  2 26 18:56 Vagrantfile
drwxr-xr-x   3 momo  staff   102  3  5 22:19 cookbooks
drwxr-xr-x   3 momo  staff   102  3  5 22:19 data_bags
drwxr-xr-x   3 momo  staff   102  3  5 22:19 environments
drwxr-xr-x   3 momo  staff   102  3  5 22:19 nodes
drwxr-xr-x   3 momo  staff   102  3  5 22:19 roles
drwxr-xr-x   3 momo  staff   102  3  5 22:19 site-cookbooks

作成されました。

knife-soloを使用して、
以前作成していた仮想サーバ(webdb)へ、chef-soloのインストールを実施してみます。
(実際は既にインストール済みのため、上書きされます)

$ knife solo bootstrap webdb
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20507  100 20507    0     0  21942      0 --:--:-- --:--:-- --:--:-- 64895
el 6 i386
Getting information for chef stable 12.19.36 for el...
downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=12.19.36&p=el&pv=6&m=i386
〜中略〜
[2017-03-05T13:24:48+00:00] INFO: Report handlers complete
Chef Client finished, 0/0 resources updated in 02 seconds

インストールされました。

クックブックの作成

自分のローカルにcookbookを作成します。
自作のcookbookは先ほど確認したsite-cookbooks配下に配置するのが慣習とのことなので、
慣習に則りdstatというcookbookを作成してみます。

$ knife cookbook create dstat -o site-cookbooks
$ ls -la site-cookbooks/
total 0
drwxr-xr-x   4 momo  staff  136  3  5 22:30 .
drwxr-xr-x  12 momo  staff  408  3  5 22:24 ..
-rw-r--r--   1 momo  staff    0  3  5 22:19 .gitkeep
drwxr-xr-x  13 momo  staff  442  3  5 22:30 dstat

dstatというcookbookが作成されたことが分かります。

レシピの作成

先ほど作成したcookbook/dstat配下に、デフォルトのレシピがあるため、
更新してみます。

$ vi site-cookbooks/dstat/recipes/default.rb
#
# Cookbook Name:: dstat
# Recipe:: default
#
# Copyright 2017, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
package "dstat" do
 action :install
end

パッケージのdstatをインストールするレシピを作成しました。

ノードの作成

chefで管理するサーバのことを「ノード」と呼ぶとのこと。
ノードの状態を設定するファイルがあるため、
その設定ファイルに先ほど作成したレシピを実行する記述を記載します

$ vi nodes/webdb.json
{
  "run_list": [
	"recipe[dstat]"
  ],
  "automatic": {
    "ipaddress": "webdb"
  }
}

run-listはそのノードに適用されるべきレシピを記載します。

実行してみる。

$ knife solo cook webdb
Running Chef on webdb...
Checking Chef version...
〜中略〜
Chef Client finished, 0/1 resources updated in 03 seconds

正しく実行されました。
今回はスムーズ。。。

今日はここまで。

Chef実践入門を実践してみる その4

knife-soloをローカルOSに入れる

今までテキストに沿って「gem install hogehoge」というように使用していましたが、
そもそもgemって何?となったので、調べました。

rubyのモジュール等をネット経由でインストールする仕組みで、
ruby本体に付属して入っているとのこと。なるほど。

ということで、ローカル側で以下のコマンドを実行してみました。

$ gem install knife-solo

またエラーになりました。。。

ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: knife-solo requires net-ssh (< 4.0, >= 2.7); chef requires net-ssh (< 5.0, >= 2.9); specinfra requires net-ssh (< 5.0, >= 2.7); net-scp requires net-ssh (>= 2.6.5); net-sftp requires net-ssh (>= 2.6.5); net-ssh-multi requires net-ssh (>= 2.6.5); net-ssh-gateway requires net-ssh (>= 4.0.0)

依存するnet-sshが入っていない・・・?
というわけでnet-sshをインストールしてみます。
「< 4.0, >= 2.7」との表記からバージョンを確認し、満たす中での最新バージョンを指定してインストール

$ sudo gem install net-ssh --version "=3.2.0"

そして再挑戦。

ERROR:  While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: net-ssh-gateway requires net-ssh (>= 4.0.0)

・・・
最初にした時も出てた!
これを満たす条件なんて無いよう。。。

$ sudo gem install net-ssh-gateway

とりあえずnet-ssh-gateway指定でインストールしてみる

コマンドラインデペロッパーツールが無いから、というような記事も見つけたので、
インストール実施。

そして再チャレンジ

$ sudo gem install knife-solo
Password:
Building native extensions.  This could take a while...
Successfully installed libyajl2-1.2.0
Fetching: ffi-yajl-2.3.0.gem (100%)
ERROR:  Error installing knife-solo:
	ffi-yajl requires Ruby version >= 2.1.

今度はRubyのバージョンを上げろと言われる。。。。道のりは遠い。。

$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]

確かに一致していない様子。
異なるバージョンを入れると切り替えが面倒という記事を読みつつ、
chef-soloのインストール指定バージョンを下げても求められることは変わらないためrubyのバージョンを上げることにする。

この記事を参考にしました。
qiita.com

HOMEBREWのインストール最中、
使用せずに以前入れていたpythonのPATHやらなんやらが邪魔をしてくるので、
すぐに使用しないため、pythonを削除

そしてついに上記記事を参考にし、ようやく2.2.3のrubyをインストールしました。
(どんどん本筋から離れていく。。。)

$ sudo gem install knife-solo

ついに成功・・・・・!
長かったです。。。

今はもう使用されていないchef-soloという機能ですが、
勉強のために入れてみようと思い、数時間。
大変でした。

そしてテキストに則り、berkshelfもインストール

$ sudo gem install berkshelf

スムーズに終わるって素晴らしい。

今日はここまで。

Chef実践入門を実践してみる その3

3日目にしてついにchef soloをインストールします。

Chef Soloをインストールする

本によるとオムニバスインストーラーという1クリックでインストール可能な仕組みがあります。
この仕組みを使用すると、Chefで必要な Rubyもインストールされるということで、
オムニバスインストーラーを使用してみました。

curl -L https://www.opscode.com/chef/install.sh | sudo bash

ものの数秒でインストール完了。

[vagrant@localhost ~]$ chef-solo -v
Chef: 12.19.36

正しくインストールされていることを確認できました。

Cookbookを作成する

早速クックブックを作成してみます。

[vagrant@localhost var]$ sudo knife cookbook create hello -o /var/chef/cookbooks

上記コマンドにてhelloという名前のクックブックを作成します。
すると以下の形でcookbookに必要となるデフォルトディレクトリやファイルが自動的に作成されます。

[vagrant@localhost var]$ ls -la chef/cookbooks/hello/
合計 52
drwxr-xr-x. 10 root root 4096  2月 27 14:25 2017 .
drwxr-xr-x.  3 root root 4096  2月 27 14:25 2017 ..
-rw-r--r--.  1 root root  430  2月 27 14:25 2017 CHANGELOG.md
-rw-r--r--.  1 root root 1448  2月 27 14:25 2017 README.md
drwxr-xr-x.  2 root root 4096  2月 27 14:25 2017 attributes
drwxr-xr-x.  2 root root 4096  2月 27 14:25 2017 definitions
drwxr-xr-x.  3 root root 4096  2月 27 14:25 2017 files
drwxr-xr-x.  2 root root 4096  2月 27 14:25 2017 libraries
-rw-r--r--.  1 root root  274  2月 27 14:25 2017 metadata.rb
drwxr-xr-x.  2 root root 4096  2月 27 14:25 2017 providers
drwxr-xr-x.  2 root root 4096  2月 27 14:25 2017 recipes
drwxr-xr-x.  2 root root 4096  2月 27 14:25 2017 resources
drwxr-xr-x.  3 root root 4096  2月 27 14:25 2017 templates

おおお。出来てますね。。。
雛形が上記にも出てきているrecipes配下にdefault.rbとして作成されていますので、
それを用いて幾つか試してみます。

ちなみにテンプレはこんな形でした。

Compiling Cookbooks...
#
# Cookbook Name:: hello
# Recipe:: default
#
# Copyright 2017, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#


テンプレの変更が終了したらいよいよ実行。

[vagrant@localhost var]$ sudo chef-solo -o hello


記載した通りのレシピが実行されました。
今日はここまで。

Chef実践入門を実践してみる その2

前回Vagrantインストールがちっともうまくいかなかったため、
いろいろ検索して四苦八苦しましたが、
結局今回やりたい論点はそこではない、ということで
アンインストールして、別の記事を参考にインストールしなおしました。

再インストールしてみたものの

64bitOSで再トライし、セッションのtimeout時間を直してみても
どうしてもprivate keyの交換の後でうまくいかず。

virtualbox側のエラーを確認してみたところ、
拡張機能が不足しているエラーが出ていたため、バージョンを上げ、追加してみました。




上手くいかない。。。

GUIで立ち上がるようにしてもダメだったため、
再度32bitOSでトライしてみたところ・・・・・
成功!

原因

・Virtual box側のバージョンが古く、外部からの接続系の拡張機能が無効になっていたこと。
・仮想化支援機構を有効化できないPCだったが、64bitOSで実行しようとしていたこと。

おそらくこの2点だったのだなと思いました。

MacBook-Air:work2 momo$ vagrant ssh
[vagrant@localhost ~]$
[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS release 6.8 (Final)

上手くいきました。。。。
思わぬところで足を取られましたが、
これでようやく本筋へ。。!

Chef実践入門を実践してみる その1

普段の業務ではインフラ担当として、主にMWレイヤーを担当しています。

今まではApache/Tomcatとwebを中心に担当していましたが、

今回Chefを触ることになったので、こちらの本を早速購入してきました。

 

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

 

  

まずは第2章にも記載されていますが、実際にchef検証環境の構築を行います。

 

VirtualBoxをインストールする

ここは既に自端末にインストール済みだったため割愛。

 

Vagrantをインストールする

www.vagrantup.com

上記ページから対象をインストールします。

私はMacBookAirを使用しているため、Mac版をダウンロードしインストール

特に何かを指定することなく、インストーラーに沿ってインストールをしました。

 

ターミナルで以下を入力したところ、バージョンが返って来たため、インストールは正しく完了したことが分かります。

 

$ vagrant -v

 Vagrant 1.9.1

 

(テキストではバージョン1.5.1をインストールしているようでしたが、今回は1.9.1でした)

 

さらっとインストールしたものの、vagrantって何者・・?(そもそもなんて読むの・・・?)といったレベルだったので、少し調べてみました。

----------------

vagrant

ベイグラント、と呼ぶそう。

dockerは一度研修で受講したことがあったため、似たようなものなのかなと思いましたが、vagrantは自身が仮想に関する機能を兼ね備えている訳ではなく、仮想イメージを基に仮想環境を実現できる基盤へ、仮想マシンを立ち上げる情報を提供し作り上げる、といったイメージなのかなと思いました。*1

 

仮想イメージの取得

Vagrantをインストールし終えたら仮想イメージを取得します。

本の中でも記載のあったBentoからとりあえず仮想イメージを取得しました。

 

$vagrant box add opscode-centos-6.8-32bit https://atlas.hashicorp.com/bento/boxes/centos-6.8-i386/versions/2.3.1/providers/virtualbox.box

 

仮想サーバの起動

$vagrant init opscode-centos-6.8-32bit

$vagrant up

---

早速うまくいかなくなりました。。。。

-------- 

Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.

 -------- 

 

ううううまくいかない。。。。

64bitだとうまく動かないや、バージョンが古いのでは?という記事も見つけ、32bitで試し直してみたり、バージョンを上げてみたりしたものの同様のエラーが出続ける。。。

 

chef以前の所で予想外につまづいてしまいました。

行き詰まったので、今日はここまで。。

はじめましてはじめました。

初めまして。ももと申します。

未経験からエンジニアの世界へ飛び込み、まだまだ「見習い」というワードを頭につけたいくらいのひよっこですが、

ここ最近で学んだことをアウトプットする大切さを実感したため、

ちょっとずつブログを書いていこうと思いました。

 

どうぞよろしくお願いいたします。