在Ubuntu 10.04上执行chef-solo命令时,我遇到了一个奇怪的问题。
如果我执行这个(作为根):
# chef-solo -c /opt/mycorp/mycorp-chef-code/config/solo.rb -j /opt/mycorp/mycorp-chef-code/config/run_mycorp-config.json [Tue, 16 Nov 2010 15:28:49 +0100] INFO: Setting the run_list to ["recipe[mycorp-config]"] from JSON [Tue, 16 Nov 2010 15:28:49 +0100] INFO: Starting Chef Run (Version 0.9.12) [Tue, 16 Nov 2010 15:28:49 +0100] INFO: Chef Run complete in 0.47172 seconds [Tue, 16 Nov 2010 15:28:49 +0100] INFO: cleaning the checksum cache [Tue, 16 Nov 2010 15:28:49 +0100] INFO: Running report handlers [Tue, 16 Nov 2010 15:28:49 +0100] INFO: Report handlers complete
但是,如果我执行sudo(无论是作为根或sudoer)相同的确切命令我得到这个:
# sudo chef-solo -c /opt/mycorp/mycorp-chef-code/config/solo.rb -j /opt/mycorp/mycorp-chef-code/config/run_mycorp-config.json [Tue, 16 Nov 2010 15:28:37 +0100] INFO: Setting the run_list to ["recipe[mycorp-config]"] from JSON [Tue, 16 Nov 2010 15:28:37 +0100] INFO: Starting Chef Run (Version 0.9.12) [Tue, 16 Nov 2010 15:28:38 +0100] ERROR: Running exception handlers [Tue, 16 Nov 2010 15:28:38 +0100] ERROR: Exception handlers complete /opt/mycorp/mycorp-chef-code/chef-repo/cookbooks/tomcat6/attributes/default.rb:45:in `from_file': undefined method `[]' for nil:NilClass (NoMethodError) from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:578:in `load_attributes' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:576:in `each' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:576:in `load_attributes' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:575:in `each' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:575:in `load_attributes' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/run_context.rb:74:in `load' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/run_context.rb:55:in `initialize' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/client.rb:155:in `new' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/client.rb:155:in `run' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application/solo.rb:190:in `run_application' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application/solo.rb:181:in `loop' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application/solo.rb:181:in `run_application' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application.rb:62:in `run' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/chef-solo:25 from /usr/bin/chef-solo:19:in `load' from /usr/bin/chef-solo:19
任何想法? 我肯定失去了这个,为什么会使用sudo导致一个问题,即使发出命令的用户是root。
提前致谢。
这有点奇怪,但是Sudo确实会改变环境variables,所以也许厨师独奏会被抛弃。
以root env运行: env ,然后运行sudo env
你会看到variables是完全不同的。
以下是手册页中的一些信息:
如果sudo是由root运行的,并且设置了SUDO_USER环境variables,sudo将使用该值来确定实际用户是谁。 这可以被用户用来通过sudologging命令,即使已经调用了一个root shell。 它还允许-e标志在通过sudo脚本或程序运行时保持有用。 但请注意,sudoers lookup仍然是为root用户完成的,而不是由SUDO_USER指定的用户。
运行sudo之前,您的SUDO_USER是否已设置? 用echo $SUDO_USER检查。
sudoers表仍然得到咨询,即使你是根,所以检查你的sudoers文件。