Windows7でBerkshelfを使う
Vagrant + Chef-Solo + Berkshelf でCentOSにApacheとPHPを入れるクックブックを作りました。
目次
- 前提
- コマンドプロンプトの文字コードをUTF-8にする
- Chef-DKのインストール
- vagrant-berkshelfのインストール
- 仮想マシンを新規作成する
- 取り寄せるクックブックを選ぶ
- Berkshelf関連の設定ファイルを編集する
- クックブックを取り寄せる
- クックブックを利用する
- Vagrantfileを編集する
- 仮想マシンを作成・起動する
- 問題点
- 感想
1. 前提
下記の環境がすでに用意されているものとします。
過去記事: Windows: XAMPPの代わりにVagrantとChef-soloを使う - すたらブログ
2. コマンドプロンプトの文字コードをUTF-8にする
コマンドプロンプトの文字コードがShift-JISのままでBerkshelfのコマンドのberks install
を実行すると、Encoding::InvalidByteSequenceError
というエラーが発生します。
下記のコマンドを実行すればUTF-8になります。
しかし、日本語が文字化けしてしまいます。
chcp 65001
日本語を正常に表示させる方法は、下記の記事を参照してください。
ただし、この方法でも日本語の入力はできません。
3. Chef-DKのインストール
"Chef Development Kit"にBerkshelfが含まれています。
公式サイトから入手してください。
これでberks
コマンドが使えるようになります。
入手先: https://downloads.chef.io/chef-dk/windows/
Berkshelfの導入にはいろんな方法があるようですが、現時点のBerkshelfの公式サイトではChef-DKでの導入が勧められています。
Berkshelf is now included as part of the Chef-DK. This is fastest, easiest, and the recommended installation method for getting up and running with Berkshelf.
引用: http://berkshelf.com/#getting-started
4. vagrant-berkshelfのインストール
Vagrantのプラグインであるvagrant-berkshelfをインストールします。
# インストール vagrant plugin install vagrant-berkshelf # 確認 vagrant plugin list
参照: http://berkshelf.com/#vagrant-with-berkshelf
5. 仮想マシンを新規作成する
Vagrantfileも存在しないまっさらの状態から始めます。
berks cookbook vm1
これで、フォルダvm1
の中にVagrantfile
やBerksfile
などが作成されました。
6. 取り寄せるクックブックを選ぶ
欲しいクックブックを下記で探します。
今回はhttpd
とphp
を使うことにします。
細かい使い方はクックブックによって異なりますが、クックブックを取り寄せて有効化する方法はどれもだいたい同じです。
7. Berkshelf関連の設定ファイルを編集する
vm1/Berksfile
それぞれのクックブックの手引に従ってBerksfile
に追記します。
source "https://supermarket.chef.io" metadata cookbook 'httpd', '~> 0.2.0' cookbook 'php', '~> 1.5.0'
vm1/metadata.rb
このファイルへの追記を指示しているクックブックはあまり見当たりませんが、必須の設定です。
depends '<クックブック名>'
と記述します。
name 'vm1' maintainer 'YOUR_NAME' maintainer_email 'YOUR_EMAIL' license 'All rights reserved' description 'Installs/Configures vm1' long_description 'Installs/Configures vm1' version '0.1.0' depends 'httpd', '~> 0.2' depends 'php'
8. クックブックを取り寄せる
Berksfile
が存在する階層で下記を実行します。
berks install
取り寄せたクックブックはC:\Users\<ユーザ名>\.berkshelf\cookbooks
に保存されるようです。
9. クックブックを利用する
取り寄せたクックブックを利用して、ApacheとPHPをインストールします。
vm1/recipes/default.rb
include_recipe 'php' # (Berkshelf) httpdをインストール、起動 httpd_service 'default' do action [:create, :start] end
PHPやRubyなどはレシピをインクルードするだけでインストールしてくれますが、Apacheの場合は少々異なるようです。
とはいえ、手引に従って設定すれば問題ないと思います。
10. Vagrantfileを編集する
注意点
config.berkshelf.enabled = true
を記述する。config.berkshelf.berksfile_path
とchef.cookbooks_path
を適切に設定する。- 今回はVagrantfileがクックブックの中に存在しているので、
run_list
でレシピを指定する際に現在位置のフォルダ名をクックブック名として流用するようにしている。
File.basename(Dir::pwd)
でカレントディレクトリのパスからフォルダ名だけを取り出している。
Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = '2' Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = 'centos65-x86_64-20140116' config.vm.network 'private_network', ip: '192.168.33.10' config.omnibus.chef_version = :latest config.berkshelf.enabled = true config.berkshelf.berksfile_path = './Berksfile' config.vm.provision :chef_solo do |chef| chef.cookbooks_path = '../' chef.run_list = "recipe[#{File.basename(Dir::pwd)}::default]" end end
11. 仮想マシンを作成・起動する
vagrant up
12. 問題点
Apacheを操作できない
なぜかApacheの起動にも終了にも失敗します。
そして下記のようなメッセージが。
(98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
調べてみると、一旦80番ポートを使っているプロセスを終了させなくてはならないようです。
私の場合は下記のようにしました。
sudo yum install lsof sudo lsof -i:80 sudo kill -9 <プロセスID> <プロセスID> <プロセスID>
13. 感想
初心者なので勘違いしている部分もあると思いますが、個人の開発環境には必要ないのでは…と感じました。
インストールされるアプリケーションのバージョンは、パッケージ管理システムで入手できるものしか指定できないようなのが残念でした。
細かく設定を記述してソースからインストールすることもできるようですが、それならばBerkshelfを使わずに素のレシピを書いたほうが早いような…。
プラットフォームの差を意識せずに必要な環境を定義できるのは良いと思いますが、私には必要なさそうです (-_-;)