Reputation: 372
I am trying to run follow Chef recipe with chef-client, my recipe is:
require 'chef/provisioning/docker_driver'
machine 'wario' do
recipe 'openssh::default'
machine_options :docker_options => {
:base_image => {
:name => 'ubuntu',
:repository => 'ubuntu',
:tag => '14.04'
},
:command => '/usr/sbin/sshd -p 8022 -D'
}
but when execute that recipe (and any one) get this:
[2016-01-25T09:22:03-05:00] WARN: No config file found or specified on command line, using command line options.
[2016-01-25T09:22:03-05:00] WARN: No cookbooks directory found at or above current directory. Assuming /home/rizotas/Documents/safari.
Starting Chef Client, version 12.6.0
resolving cookbooks for run list: []
Synchronizing Cookbooks:
Compiling Cookbooks...
[2016-01-25T09:22:05-05:00] WARN: Node myHost has an empty run list.
Converging 1 resources
Recipe: @recipe_files::/home/rizotas/Documents/safari/ssh.rb
* machine[wario] action converge
- update node wario at chefzero://localhost:8889
- update normal.chef_provisioning.reference.allocated_at from "2016-01-25 14:18:49 UTC" to "2016-01-25 14:22:05 UTC"
- add normal.chef_provisioning.reference.docker_options.base_image = {:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}
- add normal.chef_provisioning.reference.docker_options.command = "/usr/sbin/sshd -p 8022 -D"
- remove normal.chef_provisioning.reference.docker_options.base_image
- remove normal.chef_provisioning.reference.docker_options.command
- update run_list from ["recipe[openssh::default]"] to ["recipe[openssh::default]", "recipe[openssh::default]"]
- update node wario at chefzero://localhost:8889
- add normal.chef_provisioning.reference.docker_options.base_image = {:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}
- add normal.chef_provisioning.reference.docker_options.command = "/usr/sbin/sshd -p 8022 -D"
- remove normal.chef_provisioning.reference.docker_options.base_image
- remove normal.chef_provisioning.reference.docker_options.command
- update run_list from ["recipe[openssh::default]"] to ["recipe[openssh::default]", "recipe[openssh::default]"]
- update node wario at chefzero://localhost:8889
- add normal.chef_provisioning.reference.docker_options.base_image = {:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}
- add normal.chef_provisioning.reference.docker_options.command = "/usr/sbin/sshd -p 8022 -D"
- remove normal.chef_provisioning.reference.docker_options.base_image
- remove normal.chef_provisioning.reference.docker_options.command
- update run_list from ["recipe[openssh::default]"] to ["recipe[openssh::default]", "recipe[openssh::default]"]
================================================================================
Error executing action `converge` on resource 'machine[wario]'
================================================================================
ArgumentError
-------------
invalid byte sequence in UTF-8
Resource Declaration:
---------------------
# In /home/rizotas/Documents/safari/ssh.rb
2: machine 'wario' do
3: recipe 'openssh::default'
4: machine_options :docker_options => {
5: :base_image => {
6: :name => 'ubuntu',
7: :repository => 'ubuntu',
8: :tag => '14.04'
9: },
10: :command => '/usr/sbin/sshd -p 8022 -D'
11: }
12: end
Compiled Resource:
------------------
# Declared in /home/rizotas/Documents/safari/ssh.rb:2:in `from_file'
machine("wario") do
action [:converge]
retries 0
retry_delay 2
default_guard_interpreter :default
chef_server {:chef_server_url=>"chefzero://localhost:8889", :options=>{:client_name=>"myHost", :signing_key_filename=>nil, :api_version=>"0"}}
driver "docker"
machine_options {:docker_options=>{:base_image=>{:name=>"ubuntu", :repository=>"ubuntu", :tag=>"14.04"}, :command=>"/usr/sbin/sshd -p 8022 -D"}}
declared_type :machine
cookbook_name "@recipe_files"
recipe_name "/home/rizotas/Documents/safari/ssh.rb"
run_list_modifiers [#<Chef::RunList::RunListItem:0x007f087ca79528 @version=nil, @type=:recipe, @name="openssh::default">]
end
Running handlers:
[2016-01-25T09:22:07-05:00] ERROR: Running exception handlers
Running handlers complete
[2016-01-25T09:22:07-05:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 04 seconds
[2016-01-25T09:22:07-05:00] FATAL: Stacktrace dumped to /home/rizotas/.chef/local-mode-cache/cache/chef-stacktrace.out
[2016-01-25T09:22:07-05:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2016-01-25T09:22:07-05:00] ERROR: machine[wario] (@recipe_files::/home/rizotas/Documents/safari/ssh.rb line 2) had an error: ArgumentError: invalid byte sequence in UTF-8
[2016-01-25T09:22:07-05:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
I don't know why that ArgumentError
.
Ruby syntax is OK.
Ruby version 1.8.7
Chef version 12.5.1
How I can solve it?
Thanks :)
I have tried with Ruby 1.9, Ruby 2.1.7 and Ruby 2.0.0
chef-stacktrace.out
file:
Generated at 2016-01-25 11:43:14 -0500
ArgumentError: machine[wario] (@recipe_files::/home/rizotas/Documents/safari/creating-containers/create-containers.rb line 4) had an error: ArgumentError: invalid byte sequence in UTF-8
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:137:in `split'
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:137:in `block in ps'
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:114:in `foreach'
/usr/local/lib/ruby/gems/2.0.0/gems/sys-proctable-1.0.0-universal-linux/lib/linux/sys/proctable.rb:114:in `ps'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-docker-0.7/lib/chef/provisioning/docker_driver/docker_transport.rb:230:in `using_boot2docker?'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-docker-0.7/lib/chef/provisioning/docker_driver/docker_transport.rb:193:in `make_url_available_to_remote'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/machine/basic_machine.rb:75:in `make_url_available_to_remote'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/convergence_strategy/precreate_chef_objects.rb:32:in `setup_convergence'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/convergence_strategy/install_cached.rb:47:in `setup_convergence'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provisioning/machine/basic_machine.rb:17:in `setup_convergence'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-provisioning-1.5.1/lib/chef/provider/machine.rb:58:in `block in <class:Machine>'
(eval):2:in `block in action_converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/provider.rb:360:in `instance_eval'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/provider.rb:360:in `compile_and_converge_action'
(eval):2:in `action_converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/provider.rb:144:in `run_action'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource.rb:596:in `run_action'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:74:in `run_action'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:106:in `block (2 levels) in converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:106:in `each'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:106:in `block in converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/resource_list.rb:83:in `block in execute_each_resource'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:116:in `call'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:116:in `call_iterator_block'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:85:in `step'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:104:in `iterate'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/resource_collection/resource_list.rb:81:in `execute_each_resource'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/runner.rb:105:in `converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:658:in `block in converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:653:in `catch'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:653:in `converge'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:692:in `converge_and_save'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/client.rb:271:in `run'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:261:in `block in fork_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:249:in `fork'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:249:in `fork_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:215:in `block in run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/local_mode.rb:44:in `with_server_connectivity'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:203:in `run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:413:in `block in interval_run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:403:in `loop'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:403:in `interval_run_chef_client'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application/client.rb:393:in `run_application'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/lib/chef/application.rb:58:in `run'
/usr/local/lib/ruby/gems/2.0.0/gems/chef-12.6.0/bin/chef-client:26:in `<top (required)>'
/usr/local/bin/chef-client:23:in `load'
/usr/local/bin/chef-client:23:in `<main>'
Upvotes: 2
Views: 776
Reputation: 54267
You should be using the ChefDK installers for your workstation. We do not support installing via gems anymore for general usage (read: it works and will continue to work, but you need to handle getting your environment set up correctly).
Upvotes: 0
Reputation: 5758
Chef 12.5.1
requires Ruby 2 or higher.
Ruby 1.8.7 reached EOL long ago.
Try upgrading your Ruby version.
chef-stacktrace.out
output:The following code from sys-proctable
gem seems to be the problem:
IO.read("/proc/#{file}/environ").split("\0").each{ |str|
key, value = str.split('=')
struct.environ[key] = value
}
Some process has invalid UTF-8 chars in its environment.
There is a related issue here: djberg96/sys-proctable#19. In that case it was related to the dovecot/imap
process environ
file filled with 0xab
chars. Maybe you are having the same problem with Dovecot or other process that behaves similarly.
They fixed it setting the default external encoding:
Encoding.default_external = Encoding::ASCII_8BIT
I recommend you to try to stop this process or maybe to fix its environment if possible.
Based on @WattsInABox answer, you can search the environ
files using ag
:
# ag "[\x80-\xFF]" /proc/*/environ
Another possible approach is to open an issue in the sys-proctable
gem.
Upvotes: 1
Reputation: 4636
I double-checked your output for UTF-8 characters and found none. So, as was said in a comment and given the stack trace, you have some UTF-8 character(s) in your ssh.rb (inside your chef repo- home/rizotas/Documents/safari/ssh.rb
). Is that a file you wrote b/c it sounds like one of the files that's normally included in chef?
I'm not entirely sure it's related to your ruby version, although I guess it could be. The thing is, chef is bundled with standalone ruby now so I'm doubting that's it.
Things I would try, in no particular order:
Run ag
(the silver searcher) on the ssh.rb to make sure there's no UTF-8 characters in it https://github.com/ggreer/the_silver_searcher
ag "[\x80-\xFF]" ssh.rb
Upvotes: 0