Я пытаюсь запустить следующую команду 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
Но это продолжает терпеть неудачу, потому что это не может найти npm
:
Выполнить [install q and zombiejs] (chef-redtail :: строка 205 по умолчанию) произошла ошибка: Errno :: ENOENT: Нет такого файла или каталога - npm install -gq zombie должен mocha coffee-script
Вход в vagrant через vagrant ssh
и запуск команды вручную работает отлично. Вход в систему с правами root, sudo -i
запуск и выполнение команды завершаются неудачно по той же причине, что и рецепт шеф-повара (npm устанавливается локально только для бродячего пользователя, а не для пользователя root: это то, что я хочу).
Итак ... как я могу указать этот execute
блок chef для запуска как бродячий пользователь, а не как root?
ОБНОВЛЕНИЕ : Я думаю, что это подводит итог моей проблемы:
(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
через http://tickets.opscode.com/browse/CHEF-2517
ДРУГОЕ ОБНОВЛЕНИЕ : Поэтому я только заметил это несоответствие:
(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
Обратите внимание на разницу в PATH
? В экспорте нет /home/vagrant/.local/bin
каталога, указанного в нем ... почему первый эхо-сигнал возвращается PATH
с ним, а второй экспорт возвращается PATH
без него? Это проблема?
Похоже, что Chef работает как бродячий пользователь, но не ищет тот же PATH, что и ваша оболочка. Войдите используя
vagrant ssh
и запуститеwhich npm
. Это вернет что-то вроде/path/to/bin/npm
. Замените/path/to/bin/
ниже, чтобы заставить Chef искать соответствующий каталог.источник
command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script