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?
Es hört sich so an, als würde Chef als vagabundierender Benutzer ausgeführt, aber nicht denselben Pfad wie Ihre Shell durchsucht. Mit anmelden
vagrant ssh
und ausführenwhich npm
. Es wird so etwas wie zurückgeben/path/to/bin/npm
. Ersetzen Sie/path/to/bin/
unten, um Chef zu zwingen, das entsprechende Verzeichnis zu durchsuchen.quelle
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script