Ich versuche, den folgenden Befehl des Küchenchefs auszuführen:
# 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
Aber es scheitert immer wieder, weil es nicht finden kann npm
:
Ausführen [q und zombiejs installieren] (chef-redtail :: default line 205) hatte einen Fehler: Errno :: ENOENT: Keine solche Datei oder kein solches Verzeichnis - npm install -gq zombie sollte mokka kaffeeskript
Das Anmelden bei vagrant via vagrant ssh
und das manuelle Ausführen des Befehls funktioniert einwandfrei. Die Anmeldung als root über sudo -i
und das Ausführen des Befehls schlägt aus demselben Grund fehl, aus dem das Rezept des Küchenchefs fehlschlägt (npm wird lokal nur für den vagabundierenden Benutzer installiert, nicht für root: Dies ist das, was ich möchte).
Also ... wie kann ich diesen Chefblock angeben execute
, der als vagabundierender Benutzer und nicht als Root ausgeführt werden soll?
UPDATE : Ich denke, das fasst mein Problem zusammen:
(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
über http://tickets.opscode.com/browse/CHEF-2517
EIN ANDERES UPDATE : Also habe ich gerade diese Diskrepanz bemerkt:
(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
Beachten Sie den Unterschied in PATH
? Im Export ist das /home/vagrant/.local/bin
Verzeichnis nicht aufgeführt ... warum würde das erste Echo PATH
mit und das zweite Export PATH
ohne es zurückkehren? Ist das das Problem?