O recurso bash do Chef não está sendo executado como usuário especificado

11

Estou escrevendo um livro de receitas do Chef para instalar o Hubot . Na receita, faço o seguinte:

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

No entanto, quando tento executar o chef-client no servidor que está instalando o cookbook, estou recebendo uma permissão negada para gravar no diretório do usuário que executa o chef-client, não o usuário do hubot. Por algum motivo, npm está tentando executar sob o usuário errado, não o usuário especificado no recurso bash.

Eu posso executar sudo su - hubot -c "npm install /usr/local/hubot/hubot" manualmente, e isso obtém o resultado desejado (instala o hubot como o usuário do hubot). No entanto, parece que o chef-client não está executando o comando como o usuário do hubot. Abaixo você encontrará a execução do chef-cliente. Obrigado antecipadamente.

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
    
por Arthur Maltson 23.01.2012 / 18:49

3 respostas

7

O problema é (provavelmente) que o Chef não esteja executando o comando como o usuário errado, mas que o shell que está executando o seu script não é um shell de login. Isso significa que algumas variáveis de ambiente (como HOME) não serão configuradas da maneira esperada, levando o npm a tentar gravar arquivos no lugar errado.

O problema é discutido na edição CHEF-2288. Enquanto isso permanece excelente, você pode tentar adicionar HOME=/home/hubot-user no seu bloco de código, antes que o npm seja invocado.

    
por 24.02.2013 / 22:12
3

Extraído de um comentário em CHEF-2288 :

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

Trabalhou para mim!

No seu caso:

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

    
por 08.10.2014 / 15:48
1

Depois: link

Para executar um script ou um comando como usuário, você precisa combinar su -l e bash -i , por exemplo:

 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

Por causa de alguns bugs , o chef não define adequadamente o ambiente para o usuário especificado em executar .

    
por 21.11.2013 / 16:09

Tags