Chef bash 资源未以指定用户身份执行

Chef bash 资源未以指定用户身份执行

我正在编写一本 Chef 烹饪书来安装休伯特。在菜谱中,我做了以下事情:

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

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

我可以sudo su - hubot -c "npm install /usr/local/hubot/hubot"手动运行,这会得到我想要的结果(以 hubot 用户身份安装 hubot)。但是,chef-client 似乎没有以 hubot 用户身份执行命令。下面您将看到 chef-client 的执行情况。提前谢谢您。

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 [email protected] 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

答案1

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

这个问题在问题 CHEF-2288。尽管这仍然未解决,但您可以尝试HOME=/home/hubot-user在调用 npm 之前添加代码块。

答案2

摘自CHEF-2288

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

对我有用!

就你的情况而言:

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

答案3

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

要以用户身份执行脚本或命令,您需要结合bash -i,例如:

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

因为一些错误,chef 没有为指定用户正确设置环境执行

相关内容