こんにちは。
今回は、Windows7上に Vagrant + knife-solo 環境を構築しようと思います。
今回も、いつも通りproxyが鬼門となりましたので、その全容をお見せ致します。
構築環境
Host : Windows7 Professinal 32bit
Guest : Ubuntu 12.04 LTS
Vagrant 1.2.1
VirtualBox 4.2.12
参考サイト
Ryuzee.com - Vagrantで簡単仮想マシン構築
naoyaのはてなダイアリー - Vagrant
僕の車輪の再発明 - Window 7 でVagrantでCent OS 6.3入れてみた
時の回廊 - Windows 8 に Vagrant と chef-solo をインストールしてみた
メモ的な思考的な - Windows7上で Vagrant + Chef solo + knife-soloを使い、Ubuntu + ubuntu-desktopの環境を構築してみた
記事の新しさと情報の多さを見ると、いかに今Hotな話題なのかが分かりますね。
構築手順
まずはVagrantを使ってVMが立ち上がるまで。
VirtualBoxのインストール
普通に公式から最新を取ってきてインストール
Vagrantのインストール
普通に公式から最新を取ってきてインストール
完了。実にシンプル。
各設定は、/Users/貴方のユーザ/
以下に展開されています。
Boxの追加
VagrantでVMを構築する場合、ゼロからマシンを構築するのではなく、BaseBoxという雛形VMを元に構築していく事になる。
各Linux系OSのインストール~初期セットアップ + 必須アプリインストールが済んだだけのベーシックな環境のBaseBoxがVagrantbox.esというサイトに丸ごと公開されているので、それを頂戴して簡単に始めることが出来る。
( 危険性についての指摘もある。参考:Hack like a rolling stone - vagrant ユーザよ、その VM は安全なのか? )
今回は、Ubuntu12.04 Desktopを立ち上げます。
Vagrantは全ての操作をCommandPromptから行う。
CommandPromptを立ち上げて、以下を打ち込む。
$ vagrant box add '任意の名前' http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-i386-disk1.box
内部ではcurlで取ってきていて、当然proxyで引っかかる。
環境変数に、http_proxy=servername:portを追加する必要がある。
ちなみにダウンロードには結構時間がかかる(20分位)が、これは初めの一回だけである。
改めて取得をし、エラー無く完了したら、以下コマンドを打って先程の名前のBoxがあるかを確認。
$ vagrant box list
これで、新しい雛形が貴方のマシンに用意されます。
VMの作成
今度は、この雛形からVMを作成する。
VM設定を保持するフォルダを作成、移動し、vagrant init
することでセッティングが行われる。
(このフォルダはあくまで設定ファイルのみであり、本体は/Users/貴方のユーザ/VirtualBox VMs
以下に展開される。)
$ cd machines
$ mkdir dev01
$ cd dev01
$ vagrant init
すると、dev01
フォルダ以下にvagrantfileという設定ファイルができる。
VMの設定をここに記述することになりますが、今は取り敢えずDefaultで続ける。
これでもうVMを構築出来ます。非常に簡単ですね。
VMの起動
では、VMを起動。以下のコマンドで立ち上げる。
$ vagrant up
起動の確認のために、$ vagrant ssh
というSSH接続機能も用意されているのですが、これがWindowsでは動きません。
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin, MinGW or Git, all of which
contain an SSH client. Or use the PuTTY SSH client with the following
authentication information shown below:
Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: C:/Users/貴方のユーザ/.vagrant.d/insecure_private_key
言われたとおり、putty等のSSHクライアントで上記環境に接続を行う。
接続出来れば、VMが起動しているということ。素晴らしい。
では、一旦停止。以下のコマンドを打つ。
$ vagrant halt
また、マシンを削除するには$ vagrant destroy
で、また作成するには$ vagrant init
。
これだけでも感動してしまいました。
chef-solo, knife-soloの導入
次に、chef-soloとknife-soloのをインストールしたいので、gemを使いたい。
調度良くvagrantが必要最低限なコマンドを持っているので、それを拝借する。
Windowsの環境変数のPath
に以下を追加して、パスを通す。
C:\Program Files\HashiCorp\Vagrant\embedded\bin
試しにCommandPromptでgem -v
して反応したらOK。
あとは、linuxと思って普通にインストール。
$ gem install chef
$ gem install knife-solo
途中でDocument関係でエンコード変換エラーのようなものが起こるが、Documentなので無視。気になるようであれば、--no-ri --no-rdoc
をつけてinstlalすると出ない。
knife-soloの設定
インストールできたら、knife-soloの設定を行う。
$ knife configure
色々と聞かれるが、全てEnterで進む。
たまに、依存するパッケージが足りないと言われる(こちらの環境ではffi
が無かった)ので、それをgem install XXXX
してから、もう一度configureする。
Vagrantとknife-soloの連携
いよいよVagrantとknife-soloを連携させる。
まずは、先程作成したマシンのフォルダ以下にknife-soloの設定フォルダを作成し、初期化する。
$ cd machines/dev01
$ knife solo init chef-repo
これで、そのフォルダにchef-repoフォルダが出来る。
この中にCookbooks等が入っていく事になる。
次に、Vagrantで作成されるマシンのprivate ipを変更する。
先程vagrant init
したフォルダに出来ているであろうvagrantfileを編集する。
config.vm.network :private_network, ip: "192.168.33.10"
もう一手間。knife-soloがVMにアクセスする際には、パスワード無くアクセス出来る必要があるらしいので、.ssh/configを作成しておく。
/Users/貴方のユーザ/.ssh以下に、configというファイルを作成。
Host 192.168.33.*
Port 22
IdentityFile C:/Users/貴方のユーザ/.vagrant.d/insecure_private_key
試しに、puttyなどで192.168.33.10:22でssh接続してみて、パスワードを聞かれなければOK。
これでようやくVMを起動。
$ vagrant init
knife-soloよりVMにchefをインストールして貰う。
$ cd chef-repo
$ knife solo prepare vagrant@192.168.33.10
うまくいくと思ったのだが、上手くいかない。
どうやら、curlが接続先ホスト名を解決できないと言っている。
毎度おなじみ。proxyです。
似たような環境で構築している人がいたので、参考にしてみる。
mas-lab.blog - Windows + Cygwin + Proxy環境でChefにトライ
この記事では、wgetでエラーが出るとある。version違い?
とにかくやってみる。
...
export http_proxy=http://SERVERNAME:PORT/
export https_proxy=http://SERVERNAME:PORT/
https_proxy = https://SERVERNAME:PORT/
http_proxy = http://SERVERNAME:PORT/
が、上手く行かず。
すったもんだあって、結局/etc/environment
にプロキシを登録して上手くいった。
...
http_proxy="https://SERVERNAME:PORT/"
https_proxy="https://SERVERNAME:PORT/"
何はともあれ、これでVMにchefがセッティングされた。
vagrant halt
で一旦停止。
Cookbooksを用意し、Recipeを書く
では、サーバをどう調理していくかを定義していく。
まずはpiyo
というCookbookを作成する。
$ cd chef-repo
$ knife cookbook create piyo -o cookbooks
chef-repo/cookbooks
以下にpiyo
フォルダが出来ているはず。
その中のrecipes
フォルダ以下にdefault.rbという名前のファイルがある。
これが、chefがどう調理をするかの定義となる。
例えば、apacheをインストールするとする。
その場合、以下の様に記述し保存。
package "apache2" do
action :install
end
service "apache2" do
action [ :enable, :start ]
end
次に、これをVagrantで読み込む様に指示をする。
そのためには、vagrantfileを編集する必要がある。
以下の部分をコメント除去・修正する。
...
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "./chef-repo/cookbooks"
chef.add_recipe "piyo"
end
...
最後に、chef-repo\nodes\192.168.33.10.json
を編集する。
( vagrantfileで読み込むrecipeを定義しているのだが、こっちの定義は何のためにあるんだろう。。。まだまだ分からないことだらけだ。。。 )
{"run_list":[" recipe [ piyo ]"]}
これで準備完了。
vagrant up
でVMを起動する。
起動時にRecipeが実行される様が見て取れると思う。
エラー無く起動すれば、調理完了。
料理の味見
さて、折角出来た料理なので、試しに味わってみる。
ブラウザで、以下にアクセス。
http://192.168.33.10/
It works !
が出れば、apacheが動いている証拠。
これででひと通りの流れが完了した。
お疲れ様でした。
感想
Cookbooksが一度出来てしまえば後は完全オートでやってくれるのかと期待していたのですが、proxyがあるとそうも行かないようです。
knife-solo部分なので、別のchefフロントエンドを使用するとか、ちょっとknifeのソース弄ってみるとか、もう少しあがいてみようかと思います。