カメヲラボ

主にプログラミングとお勉強全般について書いてます

WindowsでChefの実行環境を“できるだけシンプルに”整える

仕事用のマシン(Windows 8.1 Pro)で環境を整えるにあたって、これまでの業務に差し支えると大変困るので、慎重に導入しました。いろいろとサイトを見て上手くいかなかった人は、もしかしたらこれでうまくいくかもしれません。

鉄則

私はこの手の環境を導入する場合の鉄則としていることがありまして、それは

インストーラがあるアプリケーションは必ずインストーラを利用する

です。というわけで、cygwinとかmingwをすでにインストールしている人は多いと思いでしょうし、私自身も入れているのですが、それらからは切り離して、順にインストールしていきます。

インストール

インストール場所は、すべてデフォルトです。

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html
本稿ではバージョン4.3.14をインストールしました

http://www.vagrantup.com/downloads.html
本稿ではバージョン1.6.3をインストールしました

  • Chef Client

http://www.getchef.com/chef/install/
本稿ではバージョン11.4.2をインストールしました

  • Chef Development Kit

http://downloads.getchef.com/chef-dk/
本稿ではバージョン0.2.0をインストールしました

MinGW関係

上記のインストールが終わったら、
Chef Development Kit(chefdk)に含まれるmsys.bat(C:\opscode\chefdk\embedded\msys.bat)から、コンソールを起動します。
chefdkに含まれるmingwを利用すると、面倒な設定等が比較的少な目で済む気がします。
まずは、必要なgemをインストールしておきます。いろいろ入れると面倒かもしれないので、とりあえずbundlerとknife-soloだけ入れておきます。

gem install bundle
gem install knife-solo

次に、sshrsyncを入れたいのですが、chefdkに付属しているmingwにはmingw-get.exeがありません。
そこで、
http://sourceforge.net/projects/mingw/files/
からインストーラをダウンロードして、インストールします。この時、インストール先を必ず

C:\opscode\chefdk\embedded

にしておいてください。インストール後、

mingw-get --version

とでも入力して、インストールされているかを確認しておきます。無事インストールされたら、

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

のようにして、必要なものをインストールします。このとき、インストール先が/msys/1.0/binになっているみたいなので、/etc/profileに

export PATH="/msys/1.0/bin:$PATH"

を追加しておきます。

これで大体Okなのですが、SSL認証でうまくいきません。
http://docs.ruby-lang.org/ja/1.9.3/method/OpenSSL=3a=3aX509/c/DEFAULT_CERT_FILE_ENV.html
によると、環境変数SSL_CERT_FILEを設定していないといけないようなので、
環境変数SSL_CERT_FILEを、

C:\opscode\chefdk\embedded\ssl\certs\cacert.pem

としておきます。

さらに、rsyncでマウントに関するエラーが出るのを避けるため、
C:\opscode\chefdk\embedded\msys\1.0\etc
に、fstabという名前で

C:	/cygdrive/c

と書いたファイルを作ります。C:と/cygdrive/cの間はTABで区切ってください。

これで、設定は終わりです。なんだかんだで面倒でしたね…(´Д`;)

sshでの問題

vagrant upしてから、vagrant sshでログインすると、

Pseudo-terminal will not be allocated because stdin is not a terminal.

とか言われます。そこで、

vagrant ssh -- -t -t

と、-tオプションを二重に付けてログインします。
正直あまりよく分かってませんが、多段sshとかで検索するといろいろ情報が出てきます。

あとは大丈夫でしょう

ここまでできれば問題ないと思います。あとは、極力gem installしないように、Gemfileを書いてターゲットごとにbundlerを使っていきましょう。依存関係とかのエラーがでると、本当にイライラします。