Próbuję uruchomić następujące polecenie szefa kuchni:
# 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
Ale ciągle zawodzi, ponieważ nie może znaleźć npm
:
Wykonaj [zainstaluj q i zombiejs] (szef-redtail :: domyślna linia 205) miał błąd: Errno :: ENOENT: Brak takiego pliku lub katalogu - npm zainstaluj -gq zombie powinien mocha skrypt skryptowy
vagrant ssh
Ręczne logowanie się do włóczęgi i uruchomienie polecenia działa idealnie. Logowanie się jako root, przez sudo -i
i uruchomienie polecenia kończy się niepowodzeniem z tego samego powodu, dla którego przepis szefa kuchni się nie powiedzie (npm jest instalowany lokalnie tylko dla włóczęgi, a nie dla roota: tego właśnie chcę).
Więc ... jak mogę określić ten execute
blok szefa kuchni , aby działał jako włóczęga, a nie root?
AKTUALIZACJA : Myślę, że to podsumowuje mój problem:
(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
przez http://tickets.opscode.com/browse/CHEF-2517
KOLEJNA AKTUALIZACJA : Właśnie zauważyłem tę rozbieżność:
(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
Czy zauważysz różnicę w PATH
? Eksport nie ma w nim /home/vagrant/.local/bin
katalogu ... dlaczego pierwsze echo miałoby PATH
z nim wrócić , a drugi eksport PATH
bez niego? Czy to jest problem?
Wygląda na to, że szef kuchni wykonuje się jako włóczęga, ale nie szuka tej samej ŚCIEŻKI, co twoja powłoka. Zaloguj się przy użyciu
vagrant ssh
i uruchomwhich npm
. Zwróci coś takiego/path/to/bin/npm
. Zamień/path/to/bin/
poniżej, aby zmusić szefa kuchni do przeszukania odpowiedniego katalogu.źródło
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script