わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

vagrant + chefをwindowsで使えるようにした

お勉強しやすい環境を整えておきたいので、vagrant + chefを導入してみようと思う。
家で使っているwindows7 64bitでknife soloとかを動かせるようにしてみた。
正確にはcmdからknife soloを使えるようになるまでの設定メモ。
というわけでmacの人にはいらない内容だと思う。

いろいろインストール

まず必要なものをそろえる。

virtual boxのインストール

oracle公式virtual boxダウンロードページから自分のOSにあったvirtual boxのインストーラを落としてくる。
別に今はvmwareでもvagrantが動くのでvmwareの方が好きな人はそっちを落とせばよい。

インストーラの指示に素直に従えば入るので詳細は割愛。

vagrantのインストール

vagrant公式ダウンロードページから自分のOSにあったvagrantのインストーラを落としてくる。
なお、このインストーラがアンインストーラでもあるので、コンパネからでも消せるけど残しておいた方が便利。

これもインストーラの指示に従えば入るので詳細は割愛。

chefのインストール

windowsで動かせるようにバッチファイルとして配布されているものがあるので、それを落としてくる。
opscode公式chefダウンロードページから自分のOSにあったchefのインストーラを落としてくる。
なお、このインストーラがアンインストーラでもあるので、コンパネからでも消せるけど残しておいた方が便利。

インストーラの指示に(ry

これでcmdからchefがたたけるようになる。
あと何気にありがたかったのはwindowsのcmdからunixコマンドがたたけるようになる(lsとかrmとか)。 path\to\chef\embedded\bin下を見ればわかるし、環境変数にもここのパスが通っているはず。
path\to\Vagrant\embedded\binにも入ってるけど、ここのパスはvagrantのインストーラでは通らない。

もしwindowsじゃないなら

$ gem install chef

の方が簡単に入る。

knife soloのインストール

chefのインストーラを使うと一緒にrubyもインストールされる。
2013/8/25現在chefのパッケージからインストールしたときに入るrubyのバージョンは

> ruby -v
ruby 1.9.3p448 (2013-06-27) [i386-mingw32]

だった。できれば2系がいいけど、まあいっか。
gemも一緒に入ってて、一応

> gem update --system

してから

> gem install knife-solo

でknife soloを導入。

rsyncsshを使えるようにする

knife soloのバッチ処理中にrsyncコマンドをたたくのだけど、windowsにデフォルトでは入ってないのでrsyncを使えるようにする必要がある。 windows上でrsyncを使えるようにするために、私はcwRsyncを落とした。

cwRsync配布ページでGet cwRsync!をクリック。
リンク先では『OS1台につき35$』とか書かれてたりするけど、free editionあるので、ちゃんと確認して落とす。

インストー(ry

cwRsyncをインストールするとsshコマンドもたたけるようになるので、vagrantのインストーラを実行するだけでは使えないvagrant sshが使えるようになる。 またputtyssh-keygenコマンドも使えるようになる。

でもvagrantに入るのにはcmdを使いたくないので、私はTeraTermを落として使ってる。 TeraTerm配布ページに行って最新版をインストール。
puttyをインストールするかどうか選択できるのでcwRsyncで入ったもので間に合うならチェックを外すといい。

ここまでで何回かはOSの再起動が必要だったと思う。

2013-12-24 追記

cwRsyncのインストール後ユーザ環境変数PATHに%ProgramFiles(x86)%\cwRsync\binを追記しないとsshコマンドが使えなかった。
vagrantおよびchefのインストールフォルダにはssh.exeが存在しないことは確かめたので、やっぱりcwRsyncをインストールした後PATHを通す必要があるみたいだった。
前にインストールしたときは特に環境変数いじらなかった気がしていたが、再インストール時には動かなかったのでもしかすると無意識的にPATHをいじったのかもしれない。

オプションとしてsaharaプラグインを入れる

chefで実行しようとした変更が気に入らなかったときにvagrantの状態を元に戻せる(rollback)できるようにsaharaというプラグインをvagrantに入れる。

> vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.15)'!

> vagrant plugin list
sahara (0.0.15)

> vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

> vagrant sandbox status
[default] Sandbox mode is on

これで気に入らなければ、変更を破棄できるようになった。 別にvagrantならvagrant destroyでもよくね?って思うけど、途中まではいい感じだったのにというときに助かる。

必要なものはそろった。実際にknife soloを使ってvagrantにchefのレシピを適応していく。

おりょうりしましょう

この記事はvagrantの使い方を述べたいわけではないし、chef・knifeの使い方を詳しく述べたいわけでもないので、ざっくりした話だけ書いておく。
あらかじめvagrant initで初期化はしたということにしてvagrant upする。

次にknife soloで設定。

> knife solo init chef-repo
> cd chef-repo 
> knife solo prepare -i \path\to\.vagrant.d\insecure_private_key vagrant@localhost

で、適当にレシピを変更したら

> knife solo cook -i \path\to\.vagrant.d\insecure_private_key vagrant@localhost

でvagrantに適応。

ただこのままだとlocalhostでしかアクセスできないし、vagrantを複数立ち上げてるときにどのvagrantにレシピが適応されるのかわからなくなるので、Vagrantfileを編集する。

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

この行はデフォルトではコメントアウトされているので、それを外す。ip: "…"の部分を自分で使いたいipアドレスにする。
そのうえで

> vagrant reload
> knife init chef-repo
> cd chef-repo 
> knife solo cook -i \path\to\.vagrant.d\insecure_private_key vagrant@192.168.33.10

これでipアドレスが192.168.33.10になっているvagrantVMにレシピが適応される。

確認してないけど、やったらできるかもなーと思っていること

  • さいごのknife solo cookのところでinsecure_private_keyというのを-iオプションで指定しているが、ほかの人のwindowsなら指定しなくても動くかも(私のwindowsはCとDドライブの構成が・・・ゴニョゴニョ)。
  • 複数のvagrantサーバを立ち上げて一気にレシピを流し込みたいなーと考えているならknife solo cook …のところをよしなにバッチファイルに書き出して、それを実行すればよいと思う。『入門Chef』にもそう書いてたし。ただwindowsにはxargsというコマンドがないので、『入門Chef』に書いてあるやり方をそのまま適応することはできない。考えるの面倒くさいなら、もう一行ずつコマンド実行するように書いちゃえばいいんじゃないかな、とりあえず。

やっててはまったこと(なんかあり次第追記)

  • vagrantのipアドレスの設定変更のところだが、一番最初にvagrant initを実行したcmdが管理者権限だと、そのプロンプトを閉じて何気なく一般ユーザーでcmdを開いたときにvagrant up / reloadできない(エラー出力内容忘れてしまった・・・)。最初にvagrant initしたときにVirtualBox側の設定が管理者権限で実行されてしまうからみたいで、これ知らないと「なんでや?」って結構困る。原因を詳細に調べたわけではないのですごくモヤっとした話だけど、結論としてはむやみに管理者権限は使うな、という話。

以上、cmdだけでknife soloを使えるようにする話でした。

cmd以外のターミナルでknife soloを動かす方法はVagrant and Chef on Windowsを読めばよいと思います。
この記事で紹介されているmintty以外のターミナルでもやることはそんなに変わらないと思うし。

・・・俺、windowsクリーンインストールしたら、そういやこんな記事書いてたなってwindowsからchefをまた使えるようにするんだ。

週末にクリーンインストールできたらいいな。

2013-12-24 追記

次の記事にwindowsクリーンインストールの話とvagrant + chefの再インストールの話を書きました。