Chef実践入門を実践してみる その6
Apache,MySQLのインストール
だんだん仕組みが分かってきました。
テキストに則りApache,MySQLのクックブックを作成し、
インストールするレシピを作成して実行。
[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のしたに配置すると良いとのことでした。
そのため、さきほど起動させたapacheのhttpd.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)
- 作者: 吉羽龍太郎,安藤祐介,伊藤直也,菅井祐太朗,並河祐貴
- 出版社/メーカー: 技術評論社
- 発売日: 2014/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
まずは第2章にも記載されていますが、実際にchef検証環境の構築を行います。
VirtualBoxをインストールする
ここは既に自端末にインストール済みだったため割愛。
Vagrantをインストールする
上記ページから対象をインストールします。
私は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以前の所で予想外につまづいてしまいました。
行き詰まったので、今日はここまで。。
はじめましてはじめました。
初めまして。ももと申します。
未経験からエンジニアの世界へ飛び込み、まだまだ「見習い」というワードを頭につけたいくらいのひよっこですが、
ここ最近で学んだことをアウトプットする大切さを実感したため、
ちょっとずつブログを書いていこうと思いました。
どうぞよろしくお願いいたします。