mac - chefが動かなくなった
chefが使えなくなった。多分OSアップデートのせいだと思う。 chef development kitをGUIでインストールしたけど、コンフリクトして変になった。
chefのバージョン確認するとエラーになる。
$ chef -vChef Development Kit Version: 0.12.0/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout/unix.rb:338:in `exec': No such file or directory - chef-client (Errno::ENOENT) from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout/unix.rb:338:in `block in fork_subprocess' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout/unix.rb:316:in `fork' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout/unix.rb:316:in `fork_subprocess' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout/unix.rb:93:in `run_command' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.2.6/lib/mixlib/shellout.rb:259:in `run_command' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.8.1/lib/chef/mixin/shell_out.rb:97:in `shell_out_command' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-12.8.1/lib/chef/mixin/shell_out.rb:50:in `shell_out' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/lib/chef-dk/cli.rb:101:in `block (2 levels) in show_version' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/bundler-1.11.2/lib/bundler.rb:219:in `block in with_clean_env' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/bundler-1.11.2/lib/bundler.rb:199:in `with_original_env' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/bundler-1.11.2/lib/bundler.rb:205:in `with_clean_env' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/lib/chef-dk/cli.rb:101:in `block in show_version' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/lib/chef-dk/cli.rb:100:in `each' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/lib/chef-dk/cli.rb:100:in `show_version' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/lib/chef-dk/cli.rb:90:in `handle_options' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/lib/chef-dk/cli.rb:70:in `run' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/chef-dk-0.12.0/bin/chef:25:in `<top (required)>' from /usr/local/bin/chef:69:in `load' from /usr/local/bin/chef:69:in `<main>'gemでchefを入れてるとコンフリクトするらしい。gemに複数のchefが入ってたので、全部消してみた。
$ sudo gem uninstall chefchef-zeroというのは残っている。
$ gem list chef
*** LOCAL GEMS ***
chef-zero (1.7.3)まだ、同じエラー出る。
knife-soloも消す。
$ sudo gem uninstall knife-soloSuccessfully uninstalled knife-solo-0.4.1参考:Chefを使うのに必要な環境が一気に整う「ChefDK」レビュー
インストールが完了すると /opt/chefdk 以下にもろもろのファイルが展開され、/usr/bin/ 以下にもシンボリックリンクが作成されています。 まっさらな環境であればこれで問題なくChefDKによるChefが動くようになっていたはずです。 しかしすでにRubyを導入済みの環境では話はそう簡単ではありませんでした。開発者であればrvmやrbenvを使っていることが多いので、
MacPortsはUNIXのソフトウェアをインストールするためのパッケージシステムで、optというフォルダの中にソフトをインストールします。UNIXのソフトを使わないのであれば削除しても構いません。削除の仕方はこちらです。http://macwiki.sourceforge.jp/wiki/index.php/MacPorts
optディレクトリに、chefdk以外に、chefがあるので、消しちゃってみる。
$ sudo rm -rf /opt/chef同じエラー出る。エラーメッセージだとchef-clientというのがないってことかな?
Chef Development Kitをインストールしなおしてみる。
$ chef -vChef Development Kit Version: 0.12.0chef-client version: 12.8.1berks version: 4.3.0kitchen version: 1.6.0エラー出なくなった。
knife-soloを入れる
$ sudo chef gem install knife-soloPassword:WARNING: You don't have /Users/hoge/.chefdk/gem/ruby/2.1.0/bin in your PATH, gem executables will not run.Thanks for installing knife-solo!
If you run into any issues please let us know at: https://github.com/matschaffer/knife-solo/issues
If you are upgrading knife-solo please uninstall any old versions byrunning `gem clean knife-solo` to avoid any errors.
See http://bit.ly/CHEF-3255 for more information on the knife bugthat causes this.Successfully installed knife-solo-0.5.11 gem installed一応インストールできたけど、knifeコマンド実行するとエラー出る。
$ knifeERROR: You need to pass a sub-command (e.g., knife SUB-COMMAND)中略/opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/specification.rb:2285:in `raise_if_conflicts': Unable to activate knife-solo-0.5.1, because net-ssh-3.0.2 conflicts with net-ssh (< 3.0, ~> 2.7) (Gem::ConflictError)gem、rubyのバージョン確認してみる。
$ gem -v2.0.14.1
$ ruby -vruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]gemのアップデートをしてみる。
$ sudo gem update --systemrubyのインストールもしてみる。 参考:Mac OS X : rbenv で 最新の ruby をインストール
$ brew install rbenv ruby-build$ rbenv install 2.2.3$ rbenv global 2.2.1$ rbenv rehash$ rbenv versions system* 2.2.3 (set by /Users/hoge/.rbenv/version)$ vim ~/.bash_profile.bash_profileに、下記を追加。
eval "$(rbenv init -)"だめっぽい。まだエラー出る。めんどくさい。
$ gem list net-*
*** LOCAL GEMS ***
moneta (0.6.0)net-scp (1.2.1)net-ssh (2.8.0)net-ssh-gateway (1.2.0)net-ssh-multi (1.2.0)net-telnet (0.1.1)
$ sudo gem update net-ssh 3.1.1Updating installed gemsUpdating net-sshFetching: net-ssh-3.1.1.gem (100%)Successfully installed net-ssh-3.1.1Parsing documentation for net-ssh-3.1.1Installing ri documentation for net-ssh-3.1.1Installing darkfish documentation for net-ssh-3.1.1Parsing documentation for net-ssh-3.1.1Gems updated: net-sshGems already up-to-date: 3.1.1
$ gem list net-ssh
*** LOCAL GEMS ***
net-ssh (3.1.1, 2.8.0)net-ssh-gateway (1.2.0)net-ssh-multi (1.2.0)だめだ、同じエラー出る。
$ sudo gem uninstall net-ssh 2.8.02.8消してもだめだ。3.0.2を入れてみよう。ないわ。3.1.1が入る。
あ、chef gemってしないといけないのか。
$ chef gem list net-ssh
*** LOCAL GEMS ***
net-ssh (3.0.2, 2.9.4)net-ssh-gateway (1.2.0)net-ssh-multi (1.2.1)ある。。2.9.4を消してみよう。
$ knife/opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'net-ssh' (= 3.0.2) - did find: [net-ssh-3.1.1] (Gem::LoadError)Checked in 'GEM_PATH=/Users/ye/.chefdk/gem/ruby/2.1.0:/opt/chefdk/embedded/lib/ruby/gems/2.1.0', execute `gem env` for more information from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:328:in `to_spec' from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:65:in `gem' from /usr/local/bin/knife:23:in `<main>'エラー変わらない。3.1.1入れて、3.0.2消してみる。
とんでもないことになってしまった。
$ knife/opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'net-ssh' (= 3.0.2) - did find: [net-ssh-3.1.1] (Gem::LoadError)Checked in 'GEM_PATH=/Users/ye/.chefdk/gem/ruby/2.1.0:/opt/chefdk/embedded/lib/ruby/gems/2.1.0', execute `gem env` for more information from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb:328:in `to_spec' from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:65:in `gem' from /usr/local/bin/knife:23:in `<main>'もう一度、chef dkをインストールしなおしてみる。だめだ。
Unable to activate knife-solo-0.5.1が出たまま。 参考:Chefのリポジトリ構成
chefDKの最新環境では、net-sshはv3.0.2必須。 2.9.4も、別途インストールはされている。 しかし、knife soloのどこかで、net-sshは2.7~3.0を指定されている。 3.0.2をアンインストールすると『knife-soloはnet-ssh3.0.2必須!』と怒られ。 Gemfileとかに器用な事を書いて切り抜けられる技量がないので、 この矛盾を解消できなかった。 よって、knife soloはあきらめました。
chefDKの1つ前のものをインストールしたらいいのかな?今chefDKの0.12だから、0.11.2を入れてみる。 ちなみに、chef-soloが動かなくなても、chef-zero使えればいいらしい。 chef-soloアンインストールして、chef-zero使うようにしてもいいっぽい。
0.11.2を入れても、やっぱ同じエラー出る。むしろエラー多くなった。0.12に戻して、chef-zero使うことにするか。いやだ。chef-soloでいい。なんで便利なパッケージツールを普通にインストールしたらsoloが使えなくなるのじゃ。それともこれはイレギュラーなケースなんだろうか?あーめんどくさい。0.11.0をインストールしてみるか。ちなみに、mac 10.11.4です。
chef dkのアンインストール
参考:chef-DK触ってみた
$ sudo rm -rf /opt/chefdk$ sudo pkgutil --forget com.getchef.pkg.chefdk$ find /usr/bin -lname '/opt/chefdk/*' -deleteとりあえず、chef-soloは今後使えなくなるらしいし、もういいや。別のやり方覚えればいいや。ちなみに、chefdkの0.10インストールしたけど、別のエラー出たし、もういやになった。
参考:matschaffer/knife-solo » Compatibility with berkshelf from chefdk 0.10.0
なんだこれ。俺のエラーと同じエラーについてイングリッシュで議論している。knife-solo 0.6なんてない。よし、chefDKやめよう。
とりあえず、macの元のrubyに戻す。
$ rbenv local system$ ruby -vruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]$ gem -v2.6.3$ which gem/Users/ye/.rbenv/shims/gemchefのインストール
$ sudo gem install chef --no-ri --no-docERROR: Error installing chef: chef-zero requires Ruby version >= 2.1.0.rubyが2.1以上じゃないとダメらしい。
macのrubyのupdate
$ brew update$ brew install ruby$ ruby -vruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]$ sudo gem install chef --no-ri --no-docFetching: bundler-1.11.2.gem (100%)Successfully installed bundler-1.11.2Fetching: fuzzyurl-0.8.0.gem (100%)Successfully installed fuzzyurl-0.8.0Fetching: mixlib-config-2.2.1.gem (100%)Successfully installed mixlib-config-2.2.1Fetching: mixlib-shellout-2.2.6.gem (100%)Successfully installed mixlib-shellout-2.2.6Fetching: chef-config-12.9.38.gem (100%)Successfully installed chef-config-12.9.38Fetching: libyajl2-1.2.0.gem (100%)Building native extensions. This could take a while...Successfully installed libyajl2-1.2.0Fetching: ffi-yajl-2.2.3.gem (100%)Building native extensions. This could take a while...ERROR: While executing gem ... (TypeError) no implicit conversion of nil into Stringなんだこれは。。
$ sudo gem i --no-ri --no-doc --backtrace -n /usr/local/bin chefBuilding native extensions. This could take a while...ERROR: While executing gem ... (TypeError) no implicit conversion of nil into String /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/installer.rb:186:in `check_executable_overwrite' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/installer.rb:427:in `block in generate_bin' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/installer.rb:414:in `each' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/installer.rb:414:in `generate_bin' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/installer.rb:254:in `install' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/request_set.rb:166:in `block in install' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/request_set.rb:150:in `each' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/request_set.rb:150:in `install' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/commands/install_command.rb:249:in `install_gem' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/commands/install_command.rb:299:in `block in install_gems' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/commands/install_command.rb:295:in `each' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/commands/install_command.rb:295:in `install_gems' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/commands/install_command.rb:202:in `execute' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/command.rb:307:in `invoke_with_build_args' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/command_manager.rb:168:in `process_args' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/command_manager.rb:138:in `run' /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/gem_runner.rb:54:in `run' /usr/local/bin/gem:21:in `<main>'