knife soloが動かない

こちらの本を読んでchefを動かしてみた際にハマった部分をメモ

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

まずomnibusのインストーラでchefを入れる

$ curl -L https://www.opscode.com/chef/install.sh | sudo bash

chef 11.12.0が入った

そして、gemを用いてknife soloをいれる

$ gem install knife-solo

入ったのでchefのレポジトリを作成しようとknife solo init hogehogeとすると以下のようにエラー

$ knife solo init hogehoge
FATAL: Cannot find sub command for: 'solo init hogehoge'
Available subcommands: (for details, knife SUB-COMMAND --help)

** BOOTSTRAP COMMANDS **
knife bootstrap FQDN (options)

** CLIENT COMMANDS **
knife client bulk delete REGEX (options)
knife client create CLIENT (options)
knife client delete CLIENT (options)
knife client edit CLIENT (options)
knife client list (options)
knife client reregister CLIENT (options)
knife client show CLIENT (options)

** CONFIGURE COMMANDS **
knife configure (options)
knife configure client DIRECTORY
・・・以下コマンドのヘルプが続く

どうやらsolo自体が認識されていない感じ
ググってみるとchefが複数バージョン入っているとそうなることがあると判明

gemで入っているパッケージを見てみる

$ gem list chef
*** LOCAL GEMS ***

chef (11.14.0.alpha.2)
chef-zero (2.0.2)

最初にomnibusのインストーラで入れたのとは別にさらに新しいバージョンが入っていた
knife soloのインストール時に依存関係によって入ったのかと思われる

新しい方を残すことにしたのでomnibusで入れた方を削除したいがuninstall.shなどはない
これもググってみると以下のページがあった
http://stackoverflow.com/questions/17115245/how-to-uninstall-chef-client-and-the-whole-chef-package

このページの通り/opt/chef以下を全て消し
/usr/binのchef関係のコマンドをgemで入れたchefの方を見るように変更

$ sudo rm -rf /opt/chef
$ gem which chef
~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/chef-11.14.0.alpha.2/lib/chef.rb
$ ls ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/chef-11.14.0.alpha.2/bin
chef-apply           chef-client          chef-service-manager chef-shell           chef-solo            knife                shef
$ ln -s ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/chef-11.14.0.alpha.2/bin/chef-apply /usr/bin/chef-apply
・・・すべてリンク張る

これで再度knife soloを使ってみると無事動いた



追記:このあとさらにknife solo prepareでwgetが404となってchefがインストールできないことがあったがそれはこちらのページの通り解決
http://mrk1869.com/blog/chef_prepare/