Windows7にknife-solo + vagrant環境を作成しようとして疲弊した話

会社でchefを紹介することになり、knife-solo + vagrant環境を構築しようとしたのですが、細かい所で動かなくて大分疲弊しました。(このご時世にもchefのcの字も知らない同僚が多いのがSI企業の辛いとこです…)

結局諦めて、Windows上にChef用のCentOSとテスト用のCentOSを立ててしまったので、成功パターンではないのですがこれはダメだったというアンチパターン?ということで。

環境は以下となります。

  • Windows7 32bit
  • vagrant 1.6.3
  • knife-solo (失念しましたが2014/8/22の最新番)
  • VirtualBox  4.3.4 → 4.3.14(インストールがうまく行かず) → 4.3.12

やりたかったこと

  1. powershellからvagrant ssh (これはまあできた)
  2. powershellからknife solo cook <hostname>  ⇐これがどうしてもできなかった

要はChef実践入門の序盤のお試し環境Windows上で実現したかったわけです。Windowsでこれを実現するには、powershellから rsync + sshが実行できることが必要となります。私の場合はrsyncがどうしても動作してくれず、断念しました。

cygwin + knife-solo + vagrant 

「knife-soloはcygwinrsyncを使うこと前提にコードが書かれている」という話を聞いていたので、なら最初からそうしよう!と思ってチャレンジしたのがコレ。しかしながらsshもできなければ、rsyncも動作しなかった。sshvagrant以外の普通のサーバにも試してみたが、「Socket operation on non-socket」(だったと思う)が出てNG。当然、knife solo bootstrap <hostname>も knife solo cook <hostname>もダメでした…

mingw + knife-solo +vagrant

以下のサイト様を参考にして挑戦しました。

嗤うプログラマー: Windows に Vagrant + knife-solo環境を作る手順 2014年4月版

ちなみに最初に挑戦したのはこちらなのですが、どうしてもmingwGUIからパッケージがインストール出来なかったため一旦断念。どうやらどうも社内の認証プロキシに引っかかっていたっぽいです。GUIからではインストールできなかったのですが、powershellからmingw-getを実行することでプロキシの認証画面がポップアップ画面で表示され、問題なくDLできることを確認できました。

mingw-get install msys-openssh
mingw-get install msys-rsync

 環境変数mingw、msysのパスを通し、

vagrant ssh

つながった!

次に、knife-soloを実行するためにvagrantssh設定をpowershellで書き出します。

encoding -defaultを設定しないUTF16で書き出されてしまい、盛大に文字化けするので注意。

vagrant ssh-config --host <hostname> | out-file C:¥Users¥<User>¥.ssh¥config -encoding default

 ちなみにmingwssh自体はwindowsの$home配下を見に行ってないようなので、ssh <hostname>は上記では失敗します。以下のようにmsys-opensshのssh_configに設定を書き出す必要があります。

vagrant ssh-config --host <hostname> | out-file C:¥MinGw¥msys¥1.0¥etc¥ssh¥ssh_config -encoding default

上記設定の是非は別として、これでssh <hostname>でログインできました。

続いてvagrant上のVMにchefをインストール 。なんか最後、エラーが出てる気がしたが気にしないぜっ!

knife solo bootstrap <hostname>

ちなみにプロキシ環境では、vagrant上のVMに先にプロキシ設定を入れて置く必要があります。自分は/etc/environmentに以下の設定を通して、souceしました。

  • export http_proxy=ほにゃらら、export https_proxy=ほにゃらら
  • source /etc/environment 

そしていよいよknife soloを実行する!

knife solo cook <hostname>

しかし、rsyncがどうしても動かない!!というかbootstrapのときに出てたエラーもrsyncについてでした。

エラーメッセージを見ると、「Failed to dup/close」とのことですがGoogle先生に聞いても良く分からない。以下、ネットの成功パターンを見て自分が試したこと。

  1. cygwinrsyncを使う
  2. cwRsyncを使う(MinGWからrsyncを一旦アンインストール)

cwRsyncの中身はcygwinの一部っぽいので2つを試す意味は無かったような気がしますが…まあ結果はダメでしたよ。

丸2日ほど試行錯誤したあげく(VirtualBoxのバージョン変えたりしました…)、結局断念してWin上にVirtualBoxCentOSを二台立て、一台をknife-solo実行用、もう一台をvagrantで管理するテストVMという逃げ回避索をとりました。

上記のブログの方も書いていましたが、おとなしくChef環境をVMに立てるのがWindowsの場合はいいかもですね。あぁ会社でMac使いてえ。