Windows に Vagrant と knife-solo の環境をつくろうという、今日びよくきく話題について書いてみる。
よくきく話題なのになぜわざわざ改めて書くのか。なぜ2014年4月版なのか。
ググれば同じ話題の Blog の記事はわんさか出てくるのであるが、実はどれもうまく実行できる環境は作れないという事実に気がついたからである。
もちろんその記事が書かれた頃にはその手順でうまく動いたのであろう。ただし、特に Chef や knife-solo の細かいバージョンアップにより、そもそもインストールできなかったりインストールできても動作しなかったりといったことになってしまったのではないだろうか。
念のため言っておくと、Linux や Mac OS X のような Unix 環境では特に難しいことはない。単純に gem コマンドでインストールするだけである。
てなわけで、現時点で多分もっとも手数と問題が少ないと思われる、Windows に Vagrant と knife-solo の環境を構築する手順をご紹介する。なお、この手順もしばらくしたら動かなくなってしまう可能性があることはあらかじめご承知おきいただきたい。
Vagrant をインストール
まずは公式サイトから msi をダウンロードしインストールする。インストールが終わると再起動しろと言ってくるので、Windows を再起動する。
この時点で環境変数 PATH が設定され、vagrant< コマンドを実行可能になっている。デフォルトでは「C:\HashiCorp\Vagrant」にインストールされているので、「C:\HashiCorp\Vagrant\embedded\bin」にもPATHを通しておく。
Vagrant に組み込まれている Ruby に Knife Solo をインストールするためである。
Vagrant 組み込みの Ruby は 1.9 であるのと、Vagrant / Chef / Knife Solo 以外の用途にも Ruby を使うとか、新しいバージョンのちゃんとした Ruby の実行環境がほしいひとは別途 MinGW 版 Ruby と DevKit をインストールしたほうが良いかもしれない。この手順はあくまでその辺手抜きをするためのものである。
なお自分で Ruby を入れる場合、MSWin32 版 Ruby およびその派生である ActiveScriptRuby には Chef / Knife Solo のインストールはできないので注意。
knife-solo をインストール
まずここが1つ目の山場。
ふつうに knife-solo をインストールしようとするとなぜか win32-api パッケージが古いバージョンの 1.4.8 がインストールされてしまい、一見インストールできているようで動作しない環境が出来上がってしまう (knife-solo 0.4.1 時点)。
なので、Bundler を使って win32-api 1.5.1 以上を使うように細工する。
まずは Bundler をインストール。
gem install bundler
既に 1.4.8 の win32-api が入ってしまっていたらすべて削除。
gem uninstall win32-api
既に動かない knife ができていたら chef と knife-solo もすべて削除。
gem uninstall knife-solo
適当なディレクトリを作って、下記のファイルをダウンロード。
ダウンロードした Gemfile のあるディレクトリで下記コマンドを実行。
bundle install
MinGW/MSYS から ssh と rsync をインストール
MinGW 公式サイトのダウンロードページから mingw-get-setup.exe をダウンロードして実行する。
パッケージの選択画面では、画面左側の「All Packages」を選択し、画面右側から以下のパッケージのみを選択する。依存するパッケージは自動的に選択される。もちろんお好みで別のものをいろいろ入れても問題ない。
- mysys-openssh (bin)
- msys-rsync (bin)
メニューから「Installation」→「Apply Changes」を実行。
C:\MinGW\bin および C:\MinGW\msys1.0\bin に PATH を通しておく。
ここで2つ目の山場。
現在の Knife Solo は Cygwin の rsync を使うつもりで実装されており、C ドライブは 「/cygdrive/c」というパスだと思い込んでいる。もちろん MinGW/MSYS では普通に「C:」である。
これを調整するため、C:\WinGW\msys1.0\etc\fstab に次を記述する。
c: /cygdrive/c
だったらそもそも Cygwin を入れればいいじゃないかという意見の方はそうすれば良いと思う。Cygwin は動作が重たいのと、DLL の依存関係がいろいろとキビしいので、Cygwin はできるだけ入れずにおきたいと個人的には思う。
おわり
これで以上である。なんとゆーか、Vagrant だけはやはりオフィシャルのインストーラーでインストールする必要はあるものの、その後は「gem install knife-solo」いっぱつで済む Unix 系 OS に比べて大変な手間である。
使える環境があるなら Linux なり Mac OS X なりを使われることを強くオススメする。てゆーかせっかく Vagrant とか入れるなら、Knife Solo の実行環境も Vagrant 上に作ればいいかもしんない。
コメント