Estou tentando executar o seguinte comando do chef:
# install zombiejs, q (promises), should, coffee-script & mocha
execute "install q and zombiejs" do
cwd "/home/vagrant"
user "vagrant"
action :run
command "npm install -g q zombie should mocha coffee-script"
end
Mas continua falhando porque não consegue encontrar npm
:
execute [install q e zombiejs] (chef-redtail :: linha padrão 205) cometeu um erro: Errno :: ENOENT: Esse arquivo ou diretório não existe - npm install -gq zombie deve mocha coffee-script
O login no vagrant via vagrant ssh
e a execução manual do comando funcionam perfeitamente bem. O login como root, via sudo -i
e executando o comando, falha pelo mesmo motivo que a receita do chef falha (o npm é instalado localmente apenas para o usuário vagante, não para root: é isso que eu quero).
Então ... como posso especificar esse execute
bloco de chef para ser executado como usuário vagante e não como root?
UPDATE : Acho que isso resume meu problema:
(ssh) /vagrant git:backbone ❯ whoami
vagrant
(ssh) /vagrant git:backbone ❯ which npm
/home/vagrant/.local/bin/npm
(ssh) /vagrant git:backbone ❯ echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i which npm
npm not found
via http://tickets.opscode.com/browse/CHEF-2517
OUTRA ATUALIZAÇÃO : Então, acabei de perceber essa discrepância:
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i export
HOME=/home/vagrant
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LOGNAME=vagrant
MAIL=/var/mail/vagrant
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
SHELL=/bin/zsh
SSH_AUTH_SOCK=/tmp/ssh-uJUopA4146/agent.4146
SUDO_COMMAND='/bin/zsh -c export'
SUDO_GID=1001
SUDO_UID=1000
SUDO_USER=vagrant
TERM=xterm
USER=vagrant
Observe a diferença em PATH
? A exportação não possui o /home/vagrant/.local/bin
diretório listado ... por que o primeiro eco retornaria PATH
com ele e a segunda exportação retornaria PATH
sem ele? Esse é o problema?
Parece que o Chef está executando como o usuário vagabundo, mas não está procurando o mesmo CAMINHO que o seu shell. Entre usando
vagrant ssh
e executewhich npm
. Ele retornará algo como/path/to/bin/npm
. Substitua/path/to/bin/
abaixo para forçar o Chef a pesquisar no diretório apropriado.fonte
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script