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?
Parece que Chef se está ejecutando como el usuario vagabundo pero no está buscando la misma RUTA que su shell. Inicie sesión usando
vagrant ssh
y ejecutewhich npm
. Volverá algo así/path/to/bin/npm
. Reemplace a/path/to/bin/
continuación para obligar al Chef a buscar en el directorio apropiado.fuente
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script