INFRA

mac - chefが動かなくなった

chefが使えなくなった。多分OSアップデートのせいだと思う。 chef development kitをGUIでインストールしたけど、コンフリクトして変になった。

chefのバージョン確認するとエラーになる。

$ chef -v
Chef 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 chef

chef-zeroというのは残っている。

$ gem list chef
*** LOCAL GEMS ***
chef-zero (1.7.3)

まだ、同じエラー出る。

knife-soloも消す。

$ sudo gem uninstall knife-solo
Successfully uninstalled knife-solo-0.4.1

参考:Chefを使うのに必要な環境が一気に整う「ChefDK」レビュー

インストールが完了すると /opt/chefdk 以下にもろもろのファイルが展開され、/usr/bin/ 以下にもシンボリックリンクが作成されています。 まっさらな環境であればこれで問題なくChefDKによるChefが動くようになっていたはずです。 しかしすでにRubyを導入済みの環境では話はそう簡単ではありませんでした。開発者であればrvmやrbenvを使っていることが多いので、

参考:Mac optフォルダについて いつまにかMacのH

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 -v
Chef Development Kit Version: 0.12.0
chef-client version: 12.8.1
berks version: 4.3.0
kitchen version: 1.6.0

エラー出なくなった。

knife-soloを入れる

$ sudo chef gem install knife-solo
Password:
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 by
running `gem clean knife-solo` to avoid any errors.
See http://bit.ly/CHEF-3255 for more information on the knife bug
that causes this.
Successfully installed knife-solo-0.5.1
1 gem installed

一応インストールできたけど、knifeコマンド実行するとエラー出る。

$ knife
ERROR: 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 -v
2.0.14.1
$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]

gemのアップデートをしてみる。

$ sudo gem update --system

rubyのインストールもしてみる。 参考: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.1
Updating installed gems
Updating net-ssh
Fetching: net-ssh-3.1.1.gem (100%)
Successfully installed net-ssh-3.1.1
Parsing documentation for net-ssh-3.1.1
Installing ri documentation for net-ssh-3.1.1
Installing darkfish documentation for net-ssh-3.1.1
Parsing documentation for net-ssh-3.1.1
Gems updated: net-ssh
Gems 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.0

2.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使うようにしてもいいっぽい。

参考:Knife-SoloからKnife-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 -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
$ gem -v
2.6.3
$ which gem
/Users/ye/.rbenv/shims/gem

chefのインストール

$ sudo gem install chef --no-ri --no-doc
ERROR: Error installing chef:
chef-zero requires Ruby version >= 2.1.0.

rubyが2.1以上じゃないとダメらしい。

macのrubyのupdate

$ brew update
$ brew install ruby
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]
$ sudo gem install chef --no-ri --no-doc
Fetching: bundler-1.11.2.gem (100%)
Successfully installed bundler-1.11.2
Fetching: fuzzyurl-0.8.0.gem (100%)
Successfully installed fuzzyurl-0.8.0
Fetching: mixlib-config-2.2.1.gem (100%)
Successfully installed mixlib-config-2.2.1
Fetching: mixlib-shellout-2.2.6.gem (100%)
Successfully installed mixlib-shellout-2.2.6
Fetching: chef-config-12.9.38.gem (100%)
Successfully installed chef-config-12.9.38
Fetching: libyajl2-1.2.0.gem (100%)
Building native extensions. This could take a while...
Successfully installed libyajl2-1.2.0
Fetching: 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 chef
Building 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>'