Chef Vagrant

Windows7 64bitでChefとKnife-soloを実行

投稿日:2014/06/05 更新日:

MacであればVagrantとChefの環境は比較的簡単に構築できます。
ですが会社だと政治的な理由?からどうしてもMacを利用できない。けどVagrantとChefを使いたいということがあるのではないかと思います。
私もChef実践入門を購入して現在4章の途中ですが、あっという間にVagrantとChefに落ちちゃいまして会社でも使いたい、と言ってみたい。
ですが現在Windowsでの開発がメインとなっておりいきなりMacに移行するのはさすがに難しいのでとりあえずWindowsでやってみて社内の人に便利さを感じてもらって数の暴力で、みたいなことを考えました。
WindowsでVagrantとChefをインストールしてknifeコマンドでサクッとプロビジョニングできるぜーとと思ったら、挫折の繰り返しでした。
いろいろなサイトを参考にさせていただいてようやく動作するようになりましたので、備忘録として残したいと思います。

参考にさせていただいたサイト

今回、自分の知識だけではここまで環境構築することができませんでした。
以下のサイトを参考にさせていただきました。
Windows に Vagrant + knife-solo環境を作る手順 2014年4月版
Windows の MinGW 環境で vagrant ssh するには

インストールに使用したバージョン及びファイル名

・chef-client-11.12.4-1.windows
・mingw-get-setup
・vagrant_1.6.3
・VirtualBox-4.3.12-93733-Win
※VirtualBoxのインストールは記事では触れていませんが、全てデフォルトで最速インストールしています。

1.Vagrantのインストール

公式サイトからVagrantをダウンロードしてインストールします。
インストールパスはデフォルトを使用しました。
インストールしたパスは以下になります。

C:\HashiCorp

2.Chefのインストール

公式サイトからChefをダウンロードしてインストールします。
インストールパスはデフォルトを使用しました。

C:\opscode

3.MinGWのインストール

公式サイトからmingw-get-setup.exeをダウンロードしてインストール。
インストールパスはデフォルトを使用しました。

C:\MinGW

4.mysys-opensshとmsys-rsyncのインストール

次に、mysys-opensshとmsys-rsyncをインストールします。
参考サイトにも記載がありますが、該当パッケージをインストールすると依存するパッケージも自動的にインストールされます。
C:\MinGW\mingw-get.exeすると以下の様な画面になりますので、mysys-opensshとmsys-rsyncをインストールします。
MinGW_cap

環境変数のPATHに以下を追加します。

C:\MinGW\bin;C:\MinGW\msys\1.0\bin

テキストエディタでC:\MinGW\msys\1.0\etc\fstabを開いて以下を追加します。

c: /cygdrive/c

自分が試した感じだとfstabというファイルが存在しなかったので同じ階層にfstab.sampleというファイルがあると思いますので、これをfstabにリネームして使いました。
参考サイトの「MinGW/MSYS から ssh と rsync をインストール」の項目も参考にしてください。

5.knife-soloのインストール

参考にさせていただいたサイトとはインストール方法が異なりますがこの記事を書いている2014年6月5日現在は以下の方法でインストールを行えました。

gem install knife-solo
gem install berkshelf

結構時間がかかります。

6.今までの動作確認

ここまでである程度は動作するようになっています。

・仮想イメージを取得
今回はCentOS6.5を使いました。Bentoプロジェクトからopscode-centos-6.5を追加します。

vagrant box add opscode-centos-6.5 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box

・Vagrantを使って仮想サーバーを起動
適当にフォルダを作成します。
フォルダ内で

vagrant init opscode-centos-6.5

IPアドレスを設定します。
フォルダ内にVagrantfileというファイルがあるのでテキストエディタなどで開きます。
ファイル内に以下の行がコメントアウトされていると思いますので、コメントアウトを外します。

config.vm.network "private_network", ip: "192.168.33.10"

これで、ホストからは192.168.33.10で接続することができます。

先ほど追加したCentOS6.5を使った環境が出来上がりますので、起動します。

vagrant up

多分、起動すると思います。puttyなどで
192.168.33.10
で接続しvagrantユーザーでログインできます。パスワードもvagrantです。

7.SSHの設定

後ほどknife-soloを実行しやすくするためにSSHの設定を行います。
まずsshの設定フォルダを作成します。
Windowsのユーザーホームフォルダに.sshというフォルダを作成します。
以下のコマンドで作成できます。

mkdir .ssh

フォルダ内で以下のコマンドを実行します。

vagrant ssh-config --host centos >> tmpconfig.txt

同じフォルダ内にtmpconfig.txtが書き出されると思いますのでメモ帳で開くとSSHのホスト設定が書かれています。
このファイルを

HostName = 192.168.33.10
port = 22

に修正して、先ほど作成した.sshフォルダにコピーします。
※すでに~/.ssh/configが存在する場合は末尾に追記します。

8.仮想サーバーにChef Soloのインストール

仮想サーバー(ゲストOS)にChef Soloのインストールを行います。

knife solo bootstrap centos

9.knife-soloを実行

いよいよ問題のknife-soloを動作させます。
とりあえずChefリポジトリを作成します。
先ほど作成したフォルダ内(Vagrantfileが存在するフォルダ)で以下のコマンドを実行します。

knife solo init .

自動的にフォルダやファイルが作成されます。

・動作確認用にApacheのクックブックを作成します。

knife cookbook create apache -o site-cookbooks

Apacheをインストールするレシピを書きます。
./site-cookbook/apache/recipes/default.rb

package "httpd" do
	action :install
end

・nodeのrun_listに追加
Vagrantfileと同じ階層にnodes/centos.jsonというファイルがあると思いますので、以下のように変更します。

{"run_list":["recipe[apache]"]}

・knife-soloの実行
いよいよ実行する準備が整いましたので、knife-soloを実行します。
(事前にvagrant upで仮想サーバーを起動させておいてください。)

knife solo cook centos

putty等で仮想サーバーにログインして、Apacheがインストールされたか確認します。

rpm -q httpd

正常にインストールが完了しているとインストールされたApacheのパッケージ名が表示されます。

結びに

MacでChefとVagrantをインストールしてknife-soloを実行するのはそれほど時間がかからなかったのですが、Windowsだと若干敷居の高いものになってしまいました。
もしかしたらVagrantのプラグイン関係で動かないものもあるかもしれませんが、それでもknife-soloが実行できるようになったのは非常に大きいと思います。
参考させていただいたサイトに本当に感謝です。
また、余談ですがコマンドプロンプトでも操作可能ですが非常に操作しにくいので、Console2などを使って作業をすると少しイライラはしなくなります。
自分は記事を書くためにあえてコマンドプロンプトで作業しましたが、なかなかにしんどかったです。

うまくいかない場合

・knife-solo実行時にrsyncでエラーが出てうまく実行できない
MinGWでmysys-opensshとmysys-rsyncが選択されているか確認。opensslのように少し間違ってしまうパッケージがあるのでよう確認。
また、作業ドライブをCドライブ以外のディレクトリ、たとえばDドライブなどにした場合はfstabに以下のように記載が必要。

# C:\MinGW\msys\1.0\etc\fstab内の記載例
c: /cygdrive/c
# ↓Dドライブ用の設定
d: /cygdrive/d

-Chef, Vagrant

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ChefでTomcatをバイナリインストールする(とりあえず動いた編)

先日の記事に引き続き、ChefでTomcatをバイナリインストールする練習です。 取り急ぎ、先日の記事でなんとなくのレシピの骨子になるようなものを書きました。 今回は、具体的にレシピを書いて行ってとり …

ChefでOracle Javaをバイナリインストール

コミュニティークックブックにJavaのクックブックがあるのですが、今回はこれを使わずに独自でOracle Javaをインストールするレシピを書いてみました。 なんというか、大人の事情でJavaのインス …

no image

MacでVagrantを使ってみる boxの準備から起動

いよいよVagrantを使ってみます。 Vagrantとはなにかということを調べてみました。 結論からいうと、仮想マシンを簡単に立ち上げるツールということではないかと思いました。 今までの流れ 1)O …

no image

MacでVagrantを使ってみる Vagrantのインストール

前回に引き続き、Vagrantのインストール編。 と言っても、ダウンロードしてダブルクリックするだけです・・・。 こちらからダウンロード よくわからないので、現時点の最新版をダウンロードしてみました。 …

AnsibleでWordPress環境を構築する

AnsibleでWordPressの動作環境を構築するplaybookを書きました。 Ansibleが2.0系になってからしっかりとつかっていなかったのと、今使っているVPSで稼働しているOSがCen …