다음 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
.
execute [install q and zombiejs] (chef-redtail :: default line 205)에 오류가 발생했습니다 : Errno :: ENOENT : 해당 파일 또는 디렉토리가 없습니다-npm install -gq zombie는 mocha coffee-script
vagrant ssh
명령을 통해 방랑자에 로그인 하고 명령을 수동으로 실행하면 완벽하게 작동합니다. sudo -i
Chef 레시피가 실패하는 것과 같은 이유로 루트로 로그인 하여 명령을 실행하고 실행하는 데 실패합니다 (npm은 루트가 아닌 방랑자 사용자에게만 로컬로 설치됩니다. 이것은 내가 원하는 것입니다).
그렇다면 ...이 요리사 execute
블록을 루트가 아닌 방랑자 사용자로 실행하도록 어떻게 지정할 수 있습니까?
업데이트 : 이것이 내 문제를 요약한다고 생각합니다.
(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
하지 않습니까? 이것이 문제입니까?