Windows で knife solo を実行する方法
まえがき
サーバ/インフラエンジニア養成読本 DevOps編を買いました。
読み進めていくうちに「特集2 CircleCIによる継続的インテグレーション入門」でknife-soloコマンドを使うことになっているのですが正常に動かすことができず。
エラーの内容を掘っていってknife自体のソースを変更することでどうにか動かすことができたのでその時のメモを残します。
一通りの流れを記載しますが実際に動かしている環境では他にいろいろ触っていたので他に必要な操作、不要な操作があるかもしれません。
あくまでも今の自分のWindows環境やタイミングを含めて動いているものをメモしているだけなので助けにならない場合もあるのでご容赦ください。
Cygwinをインストールからパスの設定まで
- CygwinのコマンドをWindowsのコマンドプロンプトから実行できるようにする
Cygwin インストールからコマンドプロンプトへのパスの登録 - CygwinにSSHをインストール
Cygwinにscp,sshコマンドをインストールする - Cygwinにrsyncをインストール - Cygwinとrsyncをインストール
Vagrant - rsyncでファイルを同期する(Windows)
Rubyのインストール
- Rubyの最新版をインストール
今回はRuby 2.2.4 (x64)で試しました。
Ruby Downloads - Rubyのパスを通す
C:\Ruby22-x64\bin
を環境変数のpathに追加しました。
DEVELOPEMENT KITをインストール
-
Rubyをダウンロードしたページにある
DEVELOPEMENT KIT
にあるRuby2.0以上用のファイルをダウンロード
今回はFor use with Ruby 2.0 and above (x64 - 64bits only) DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe
をダウンロードしました。 -
ダウンロードしたファイルを解凍して配置
C:\Ruby22-x64\devkit
に置きました。
- コマンドプロンプトにて以下を実行。
dk.rbファイルがない場合、解凍とかファイルの移動とか失敗していると思われます。
cd C:\Ruby22-x64\devkit
ruby dk.rb init
ruby dk.rb install
Vagrantをインストール
普通にインストール
Vagrant
ユーザー用環境変数に home を設定
システムの環境変数には設定しないこと。
↓こんな感じのディレクトリをHOMEに設定する
C:\home\nakagawa
- 個人のhome用ディレクトリを掘る
コマンドプロンプトを起動
cd c:\
mkdir home
cd home
mkdir nakagawa
- 環境変数を追加、システムの詳細設定から
ユーザーの環境変数に
HOME C:\home\nakagawa
を追加
gemを使ってknife-soloをインストール
gem install knife-solo -v 0.5.1
重要!net-ssh Version2.9.4のソースを変更する
元のソース
C:\Ruby22-x64\lib\ruby\gems\2.2.0\gems\net-ssh-2.9.4\lib\net\ssh\authentication\pageant.rb
1:require 'dl/import'
6: require 'dl/types'
7: require 'fiddle'
40: extend Dl::Importer
42: include Dl::Win32Types
44: SIZEOF_DWORD = Dl::SIZEOF_LONG
以下のように変更
1:require 'fiddle/import'
6: require 'fiddle/types'
7: require 'fiddle'
40: extend Fiddle::Importer
42: include Fiddle::Win32Types
44: SIZEOF_DWORD = Fiddle::SIZEOF_LONG
DLじゃなくてFiddleを使うようにします。
この時点で動くようになるはず・・・。
本の通りにknife-soloを使ってみよう!
- とりあえずCookBooksというディレクトリを作る
cd C:\
mkdir cookbooks
cd cookbooks
- Knife-soloを実行する
knife solo init infra-ci-cookbooks
- 作ったCookbookのディレクトリに移動
cd infra-ci-cookbooks
- Vagrant というファイルを作り以下の内容を記載する
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-7.1"
config.vm.define :webapp do |host|
host.vm.hostname = "webapp"
end
end
- Vagrantを起動
vagrant up webapp
- sshの接続情報を出力
vagrant ssh-config webapp >> vagrant_ssh_config
- Vagrant内の仮想環境にCookbookを注入!
knife solo prepare webapp -F vagrant_ssh_config
これが正常に通れば書籍の通りに試せるはず!