Help us understand the problem. What is going on with this article?

Vagrant + knife-solo を proxy 環境下で構築

More than 5 years have passed since last update.

こんにちは。

今回は、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を編集する。

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

もう一手間。knife-soloがVMにアクセスする際には、パスワード無くアクセス出来る必要があるらしいので、.ssh/configを作成しておく。
/Users/貴方のユーザ/.ssh以下に、configというファイルを作成。

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違い?
とにかくやってみる。

/etc/profile
...
export http_proxy=http://SERVERNAME:PORT/
export https_proxy=http://SERVERNAME:PORT/
/etc/wgetrc
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をインストールするとする。
その場合、以下の様に記述し保存。

default.rb
package "apache2" do
  action :install
end

service "apache2" do
  action [ :enable, :start ]
end

次に、これをVagrantで読み込む様に指示をする。
そのためには、vagrantfileを編集する必要がある。
以下の部分をコメント除去・修正する。

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を定義しているのだが、こっちの定義は何のためにあるんだろう。。。まだまだ分からないことだらけだ。。。 )

192.168.33.10.json
{"run_list":[" recipe [ piyo ]"]}

これで準備完了。
vagrant upでVMを起動する。
起動時にRecipeが実行される様が見て取れると思う。
エラー無く起動すれば、調理完了。

料理の味見

さて、折角出来た料理なので、試しに味わってみる。
ブラウザで、以下にアクセス。

http://192.168.33.10/

It works !が出れば、apacheが動いている証拠。

これででひと通りの流れが完了した。
お疲れ様でした。

感想

Cookbooksが一度出来てしまえば後は完全オートでやってくれるのかと期待していたのですが、proxyがあるとそうも行かないようです。
knife-solo部分なので、別のchefフロントエンドを使用するとか、ちょっとknifeのソース弄ってみるとか、もう少しあがいてみようかと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away