- 更新日: 2014年7月6日
- Vagrant & Chef
Chef超入門、Chef-soloでVagrant上の仮想マシンのCentOSにGitをインストールするとこまで
以前から興味のあった Chef に先日ようやく手を出しました。入門してみた感想を先に言うと、Vagrant も Chef(Chef-solo)もそれほど難しくないので、Ruby/Rails が書けてサーバー設定の知識のある人なら、入門程度であれば1日で十分学習できます。それに比べると Rails は本当に学習コスト高いわけですが…
なお、今回の作業では Vagrant を使った仮想マシン環境は構築済みとします。Vagrant と VirturalBox のセッティングまでは、とても簡単です。以下ページの続きとして作業を行いました。
MacにVagrantとVirtualBoxをインストール | EasyRamble
最初に何となくで良いので Chef 独特の用語をおさえとく
Chef の世界を理解する上では、最初 Cookbook(クックブック)や Recipe(レシピ)、Provisioning(プロビジョニング)など独特の言葉の概念を理解するのが難しいと感じました。以下のページの説明が分かりやすいです。
サーバー設定ツール「Chef」の概要と基礎的な使い方 – さくらのナレッジ
分からない部分は読み飛ばしても、使ってるうちに分かってくるので心配無用。かいつまんで重要語句を説明しますと…
Provisioning(プロビジョニング): サーバーの構築や管理を自動で行うことを指す用語。
Cookbook(クックブック): プロビジョニングに必要なファイルを一塊にしたもの。この中に Recipe が含まれます。
Recipe(レシピ): 特定のパッケージ・サービスをインストールするための手順を Ruby コードで表したもの。
また、Cookbook は色々なパッケージ・サービスに対応したものが、既にコミュニティで配布されています。
例えば、今回例として使う Git の Cookbook は以下のURLにあります。
git の Cookbook → https://github.com/jssjr/git
その Recipe のコード → https://github.com/jssjr/git/tree/master/recipes
また、Chef というツールには、Chefサーバー/クライアントとChef-soloの二通りの使い方があります。今回は入門編なので、利用が簡単な Chef-solo を使いました。
では以上を踏まえて本題へ。
Chef と Berkshelf の gem をインストール
Vagrantfile を作成したディレクトリで作業を行います。
1 2 3 |
$ cd ~/Vagrant/CentOS64 |
現時点では、ディレクトリは以下の内容。
1 2 3 4 5 6 7 |
$ tree -a -L 2 . ├── .vagrant │ └── machines └── Vagrantfile |
このディレクトリで、bundle init で Gemfile を作成し、chef と berkshelf の gem をインストールします。vendor/bundle 以下に bundle install。
1 2 3 4 5 6 7 8 9 |
$ bundle init $ vi Gemfile source "https://rubygems.org" gem "chef" gem "berkshelf" $ bundle install --path vendor/bundle |
Berkshelf は Cookbook を管理するツールです。Ruby, Rails での gem 管理ツールである Bundler に相当します。
Berksfile 作成
Berkshelf インストールで berks コマンドが使えるようになるので、berks init で Berksfile を作成します。Berksfile はインストールする Cookbook を指定するファイルです。Berksfile は、Bundler における Gemfile に相当します。
1 2 3 4 |
$ bundle exec berks init The resource at '/Users/username/Vagrant/CentOS64/metadata.rb' does not appear to be a valid cookbook. Does it have a metadata.rb? |
なんかエラー出ました。正常に動作する場合は、Gemfile と Vagrantfile の上書きを尋ねられるので n (no) でスキップして進めるらしい。
解決策がわからないので、手動でも良いらしいので、とりあえず手動で Berksfile を作成。git をインストールする cookbook を指定します。
1 2 3 4 5 6 |
$ vi Berksfile source 'https://api.berkshelf.com' cookbook 'git' |
ちなみに Berksfile は、Berkshelf のバージョン2 と 3 で書き方が違うとのこと。site :opscode と行頭に書いてある情報が多かったけど、Berkshelf3 では、Gemfile 同様 source を使うそうです。
Berkshelf: 2.x to 3.0 Upgrade Guide
Cookbook をインストール
続いて berks vendor コマンドで、Git の Cookbook をインストールします。Bundler での bundle install に相当。
1 2 3 |
$ bundle exec berks vendor vendor/cookbooks |
berks vendor [PATH] という書式になります。
この時点で、こんな感じのディレクトリ内容になりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ tree -a -L 2 . ├── .bundle │ └── config ├── .vagrant │ └── machines ├── Berksfile ├── Berksfile.lock ├── Gemfile ├── Gemfile.lock ├── Vagrantfile └── vendor ├── bundle └── cookbooks |
その他の berks コマンドについては…
1 2 3 |
$ bundle exec berks help |
で確認できる。
インストール済みの全ての Cookbook を確認。(dependencies を含む)
1 2 3 4 5 6 7 8 9 10 11 12 |
$ bundle exec berks list Cookbooks installed by your Berksfile: * build-essential (2.0.4) * chef_handler (1.1.6) * dmg (2.2.0) * git (4.0.2) * runit (1.5.10) * windows (1.31.0) * yum (3.2.2) * yum-epel (0.3.6) |
git がちゃんと含まれています。
chef_solo の設定を行いプロビジョニング
Git 用の Chef のレシピを VM に適用させるために、Vagrantfile に chef_solo ディレクティブを追加します。
Vagrantfile
1 2 3 4 5 6 7 8 9 10 |
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # ... config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "./vendor/cookbooks" chef.add_recipe "git" end # ... end |
設定が終了したら、vagrant reload してプロビジョニングを実行。
1 2 3 4 |
$ vagrant reload $ vagrant provision |
これで vagrant 上の仮想マシンの CentOS に git がインストールされました。仮想マシンにログインして、確認します。
1 2 3 4 5 |
$ vagrant ssh [vagrant@localhost ~]$ git --version git version 1.7.1 |
以上で Chef-solo超入門は終わりです。いかがでしょうか?私は思わず Chef すごい!と唸ってしまいました。サーバー構成が全てコードで管理できることになります。
必要なクックブックを用意 → サーバーへプロビジョニングという流れになるので、これはサーバー構築・管理が楽しくなりそうです。次は、独自にカスタマイズした Recipe や Cookbook の作成にトライです。
- – 参考リンク –
- まちクエスト運営ブログ VagrantとChefSoloを使って、まちクエストの開発環境構築を自動化
- Vagrant – naoyaのはてなダイアリー
- タイトルとか決めてないけどこのままでもいいかもしんない: Berkshelf version3+Knife soloでnginx環境をVagrantに作ってみた話
- knife-solo で vagrant 上の Cent OS に、nginx をインストールする – Qiita
- Berkshelfベースにvagrant, chef(knife-solo)環境を簡単に構築する方法 – Qiita
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
Leave Your Message!