ฉันพยายามเรียกใช้คำสั่งเชฟต่อไปนี้:
# 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 -gq zombie ควร mocha coffee-script
เข้าสู่ระบบคนจรจัดผ่านvagrant ssh
และเรียกใช้คำสั่งด้วยตนเองทำงานได้อย่างสมบูรณ์แบบได้อย่างสมบูรณ์แบบ การเข้าสู่ระบบในฐานะ root ผ่านsudo -i
และเรียกใช้คำสั่งล้มเหลวด้วยเหตุผลเดียวกันสูตรอาหารเชฟล้มเหลว (มีการติดตั้ง npm ในเครื่องสำหรับผู้ใช้ที่ไม่ใช่คนธรรมดาไม่ใช่สำหรับรูท: นี่คือสิ่งที่ฉันต้องการ)
ดังนั้น ... ฉันจะระบุพ่อครัวexecute
บล็อกนี้ให้ทำงานในฐานะผู้ใช้งานคนจรจัดได้อย่างไรและไม่รูท?
UPDATE : ฉันคิดว่านี่เป็นปัญหาของฉัน:
(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
โดยไม่มีมัน นี่เป็นปัญหาหรือไม่