J'essaie d'exécuter la commande chef suivante:
# 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
Mais il continue d'échouer car il ne peut pas trouver npm
:
exécuter [installer q et zombiejs] (chef-redtail :: ligne par défaut 205) avait une erreur: Errno :: ENOENT: Aucun fichier ou répertoire - npm install -gq zombie devrait moka coffee-script
Se connecter à vagrant via vagrant ssh
et exécuter la commande manuellement fonctionne parfaitement bien. La connexion en tant que root, via sudo -i
et en exécutant la commande échoue pour la même raison que la recette du chef échoue (npm est installé localement uniquement pour l'utilisateur vagabond, pas pour root: c'est ce que je veux).
Alors ... comment puis-je spécifier ce execute
bloc chef à exécuter en tant qu'utilisateur vagabond et non root?
MISE À JOUR : Je pense que cela résume mon problème:
(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
UNE AUTRE MISE À JOUR : Je viens de remarquer cette différence:
(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
Remarquez la différence dans PATH
? L'export ne contient pas le /home/vagrant/.local/bin
répertoire répertorié ... pourquoi le premier écho reviendrait- PATH
il avec lui et le second retour d'exportation PATH
sans lui? Est-ce là le problème?
Il semble que Chef s'exécute en tant qu'utilisateur vagabond mais ne recherche pas le même CHEMIN que votre shell. Connectez-vous en utilisant
vagrant ssh
et exécutezwhich npm
. Cela retournera quelque chose comme/path/to/bin/npm
. Remplacez/path/to/bin/
ci-dessous pour forcer Chef à rechercher le répertoire approprié.la source
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script