厨师bash资源不作为指定的用户执行

我正在写一个厨师菜谱来安装Hubot 。 在配方中,我做了以下几点:

bash "install hubot" do user hubot_user group hubot_group cwd install_dir code <<-EOH wget https://github.com/downloads/github/hubot/hubot-#{node['hubot']['version']}.tar.gz && \ tar xzvf hubot-#{node['hubot']['version']}.tar.gz && \ cd hubot && \ npm install EOH end 

但是,当我尝试在安装cookbook的服务器上运行chef-client时,我得到拒绝写入运行chef-client(而不是hubot用户)的用户的目录的权限。 出于某种原因, npm试图在错误的用户下运行,而不是在bash资源中指定的用户。

我能够sudo su - hubot -c "npm install /usr/local/hubot/hubot"运行sudo su - hubot -c "npm install /usr/local/hubot/hubot" ,并且获得我想要的结果(安装hubot作为hubot用户)。 但是,似乎chef-client不是以hubot用户的身份执行命令。 下面你会发现厨师 – 客户执行。 先谢谢你。

 Saving to: `hubot-2.1.0.tar.gz' 0K ...... 100% 563K=0.01s 2012-01-23 12:32:55 (563 KB/s) - `hubot-2.1.0.tar.gz' saved [7115/7115] npm ERR! Could not create /home/<user-chef-client-uses>/.npm/log/1.2.0/package.tgz npm ERR! Failed creating the tarball. npm ERR! couldn't pack /tmp/npm-1327339976597/1327339976597-0.13104878342710435/contents/package to /home/<user-chef-client-uses>/.npm/log/1.2.0/package.tgz npm ERR! error installing hubot@2.1.0 Error: EACCES, permission denied '/home/<user-chef-client-uses>/.npm/log' ... npm not ok ---- End output of "bash" "/tmp/chef-script20120123-25024-u9nps2-0" ---- Ran "bash" "/tmp/chef-script20120123-25024-u9nps2-0" returned 1 

问题是(可能)不是Chef以错误的用户身份运行命令,而是运行脚本的shell不是loginshell。 这意味着一些环境variables(如HOME)不会按照您期望的方式设置,导致npm尝试在错误的位置写入文件。

问题在CHEF-2288号文件中讨论。 虽然这仍然很好,你可以尝试添加HOME=/home/hubot-user在你的代码块中,在npm被调用之前。

采取自CHEF-2288的评论:

environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })

为我工作!

在你的情况下:

environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })

之后: https : //serverfault.com/a/432916/129232

要以用户身份执行脚本或命令,需要将su -lbash -i组合起来,例如:

  execute "npm_install" do command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -gq zombie should mocha coffee-script'" action :run end 

由于一些错误 ,厨师没有正确设置指定用户执行的环境。