読者です 読者をやめる 読者になる 読者になる

hidemium's blog

日々学んだことをアウトプットする。

WindowsへのChef Soloのインストールと環境改善

WindowsにChefをインストールできるようなので試してみました。また、Chefの実行はコマンドプロンプトから行うため、合わせてコマンドプロンプトを使いやすくしてみた。

構成

Windows 7: Chef 11.10
Ubuntu 12.04: サーバ構築対象
Ubuntu 12.04はDocker 0.10上で動作しています。

インストール

Ruby

まず、WindowsRubyのインストールを行います。
Windows用のインストーラーが用意されているため、RubyInstallerから「rubyinstaller-1.9.3-p545.exe」をダウンロードします。*1

「rubyinstaller-1.9.3-p545.exe」をクリックし、Rubyをインストールします。
ほぼデフォルトのままで良いかと思いますが、「インストール先とオプションの指定」では、以下のように指定しました。

  • インストールフォルダ: C:\Ruby\1.9.3-p545
  • Rubyの実行ファイルへ環境変数PATHを設定する チェック

インストール後に、コマンドプロンプトにて以下のコマンドを実行し、Rubyがインストールされていることを確認します。

> ruby -v
ruby 1.9.3p545 (2014-02-24) [i386-mingw32]

DevKit

ChefのインストールにDevKitも必要であるため、同じサイトから「DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe」をダウンロードします。

適当なフォルダに展開し、以下のコマンドを実行し、インストールを行います。

> cd C:\Ruby\DevKit
> ruby dk.rb init
> ruby dk.rb install

cwRsync

ChefはSSHを使用しているため、WindowsでもSSHを使用できるようにするため、cwRsyncというソフトウェアを使用します。
cwRsync - Rsync for Windowsから「Free」をクリックします。次にダウンロードページから「Download!」をクリックし、「cwRsync_5.3.0_Free.zip」をダウンロードします。

適当なフォルダに展開します。

> mkdir C:\User\<アカウント名>\bin
> C:\Users\<アカウント名>\bin\cwRsync_5.3.0に展開

次に、システム環境変数のPathに以下を追加します。

;C:\Users\<アカウント名>\bin\cwRsync_5.3.0

以下のコマンドを実行し、他サーバへSSH接続が可能か確認します。

> ssh <ユーザ名>@<サーバのIPアドレス>:

サーバにパスワードなしで接続できるように、公開鍵認証の設定を行います。
ssh-keygenコマンドで認証用の鍵を作成し、対象サーバへ転送します。

> ssh-keygen
> cd C:\User\<アカウント名>\.ssh
> rsync id_rsa.pub <ユーザ名>@<サーバのIPアドレス>:
> ssh <ユーザ名>@<サーバのIPアドレス> # サーバへログイン
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

Chef

以下のコマンドを実行し、Chefのインストールを行います。
このあたりはCentOSと変わりません。

> cd C:\User\<アカウント名>
> gem install chef -v 11.10 # Chefをインストール
> knife configure # 初期設定
> gem install knife-solo

今回、Ruby1.9系を使用しましたが、Ruby2.0系でknife configureコマンドを実行した際に、以下のメッセージが出力される場合があり、おとなしくRuby1.9系にしました。

> knife configure
ERROR: Ohai::Exceptions::DependencyNotFound: Can not find a plugin for dependency os
> knife configure
DL is deprecated, please use Fiddle
C:/Ruby/2.0.0-p481/lib/ruby/gems/gems/windows-api-0.4.0/lib/windows/api.rb:1:in `req
uire': 126: 指定されたモジュールが見つかりません。 - C:/Ruby/2.0.0-p481/lib/ruby/g
ems/gems/win32-api-1.4.6-x86-mswin32-60/lib/win32/api.so (LoadError)

また、Chef11.12系では、knife cookをした際に以下のような警告メッセージが出力されるようになりました。Windowsでの対処方法が見つからなかったため、Chef11.10系を指定してインストールしています。

SSL validation of HTTPS requests is disabled. HTTPS connections are still                       
encrypted, but chef is not able to detect forged replies or man in the middle                   
attacks.                                                                                        
                                                                                                
To fix this issue add an entry like this to your configuration file:                            
                                                                                                
```                                                                                             
  # Verify all HTTPS connections (recommended)                                                  
  ssl_verify_mode :verify_peer                                                                  
                                                                                                
  # OR, Verify only connections to chef-server                                                  
  verify_api_cert true                                                                          
```                                                                                             
                                                                                                
To check your SSL configuration, or troubleshoot errors, you can use the                        
`knife ssl check` command like so:                                                              
                                                                                                
```                                                                                             
  knife ssl check -c /tmp/vagrant-chef-1/solo.rb                                                
```                                                   

次に、Chefのリポジトリを作成します。

> knife solo init chef-repo

cookbookを作成します。

> cd chef-repo
> knife cookbook create apache2 -o site-cookbooks
> site-cookbooks/apache2/recipes/default.rb
package "apache2" do
    action :install
end

サーバのIPアドレス.jsonのファイルが作成されるため、実行したいcookbookを指定します。

> nodes/<サーバのIPアドレス>.json
{
  "run_list":[
    "recipe[apache2]"
  ]
}

サーバへChefをインストールし、cookbookを実行します。

> knife solo bootstrap <ユーザ名>@<サーバのIPアドレス> -p <Dockerコンテナのポート番号>

コマンドプロンプトを使いやすくする

Console

コマンドプロンプトを拡張する「Console」というソフトウェアがあります。このソフトウェアは、コマンドラインの実行環境はそのままで、フォントの変更やコピーアンドペーストの挙動、背景の透明化、タブ化など、コマンドプロンプトではできない機能を使用することができます。

Consoleから、「Console-2.00b148-Beta_32bit.zip」をダウンロードし、適当なフォルダに展開します。

> mkdir C:\User\<アカウント名>\tools
> C:\Users\<アカウント名>\tools\Consoleに展開

Console.exeから起動することができます。
[Edit]>[Setting..]をクリックすると、Console Settingの画面が開きます。
代表的な設定は以下で設定することができます。

  • フォント: Appearance>Font>Name
  • コピーアンドペーストの挙動: Behavior>Copy Paste
  • 背景の透明化: Appearance>More..>Window transparency>Alpha>Active window,Inactive windows
  • 上矢印キーで履歴: Hotkeys>Use Scroll Lock for scrollingをOFF

Vim

コマンドプロンプトにはCUIエディタがないため、Windows用のVimをインストールします。
Vim — KaoriYaから「vim74-kaoriya-win32-20140504.zip」をダウンロードし、適当なフォルダに展開します。

> C:\Users\<アカウント名>\bin\vim74に展開

次に、システム環境変数のPathに以下を追加します。

;C:\Users\<アカウント名>\bin\vim74

なお、GUIのエディタでレシピを編集しても実行可能なため、必ずしもVimにする必要はありません。(好みの問題です。)

doskey

Windowsにもdoskeyというエイリアス機能があるので、Linuxライクなコマンドが使えるように変更します。

ホームディレクトリにcmd.aliasesというファイルを作成し、以下のような設定を入力します。

> %HOME%\cmd.aliases
pwd=cd
mv=move $*
rm=del $*
grep=find "$1" $2
diff=fc $*
cp=copy $*
cat=type $*
ls=dir /b $*
ll=dir $*
vi=vim $*
ps=tasklist $*

Consoleの[Edit]>[Setting..]をクリックすると、Console Settingにて以下の設定を行います。

  • シェル: Console>Shell
C:\Windows\system32\cmd.exe /K doskey /macrofile=%HOME%\cmd.aliases

例えば、「ll」と入力すると、dirコマンドの結果を見ることができます。

> ll
2014/05/17  02:59    <DIR>          .
2014/05/17  02:59    <DIR>          ..
2014/05/16  14:24    <DIR>          .chef
2014/05/16  14:24                13 .gitignore
2014/05/17  00:07                87 chef_run.bat
2014/05/16  14:24    <DIR>          cookbooks
:

これで、Windowsから直接Chefを実行する環境が整いました。

*1:2014/5時点で最新のものです。