Estoy tratando de ejecutar el siguiente comando de 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
Pero sigue fallando porque no puede encontrar npm
:
Ejecutar [instalar q y zombiejs] (chef-redtail :: línea predeterminada 205) tuvo un error: Errno :: ENOENT: No existe tal archivo o directorio - npm install -gq zombie debería moca coffee-script
Iniciar sesión en vagabundo a través de vagrant ssh
y ejecutar el comando manualmente funciona perfectamente bien. Iniciar sesión como root, a través sudo -i
y ejecutar el comando falla por la misma razón que falla la receta del chef (npm se instala localmente solo para el usuario vagabundo, no para root: esto es lo que quiero).
Entonces ... ¿cómo puedo especificar que este execute
bloque de chef se ejecute como el usuario vagabundo y no como root?
ACTUALIZACIÓN : Creo que esto resume mi 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
a través de http://tickets.opscode.com/browse/CHEF-2517
OTRA ACTUALIZACIÓN : así que acabo de notar esta discrepancia:
(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 la diferencia en PATH
? La exportación no tiene el /home/vagrant/.local/bin
directorio listado ... ¿por qué el primer eco volvería PATH
con él y la segunda exportación volvería PATH
sin él? ¿Es este el problema?