node.js – Chef 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”,这样就得到了我想要的结果(将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不是登录shell.这意味着某些环境变量(如HOME)将不会按预期方式设置,导致npm尝试在错误的位置写入文件.

这个问题在issue CHEF-2288中讨论过.虽然仍然很出色,但在调用npm之前,可以尝试在代码块中添加HOME = / home / hubot-user.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...