`निष्पादित करें 'योनि उपयोगकर्ता के रूप में, रूट नहीं, शेफ-सोलो के साथ?


11

मैं निम्नलिखित शेफ कमांड चलाने की कोशिश कर रहा हूं:

# 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:

निष्पादित करें [स्थापित q और zombiejs] (शेफ-रेडटेल :: डिफ़ॉल्ट लाइन 205) में एक त्रुटि थी: Errno :: ENOENT: ऐसी कोई फ़ाइल या निर्देशिका नहीं है - npm स्थापित -gq ज़ोंबी को कॉफी-स्क्रिप्ट को मोक करना चाहिए

vagrant sshमैन्युअल रूप से कमांड को चलाने और चलाने के लिए योनि में प्रवेश करना पूरी तरह से ठीक काम करता है। रूट के रूप में लॉग इन करना, sudo -iकमांड चलाना और चलाना उसी कारण से विफल हो जाता है जब तक शेफ रेसिपी विफल हो जाती है (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://ticket.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इसके बिना लौटेगा ? क्या यह मुद्दा है?

जवाबों:


13

उपयोगकर्ता के रूप में स्क्रिप्ट या कमांड निष्पादित करने के लिए, आपको su -l और bash -i को संयोजित करना होगा :

 execute "npm_install" do
    command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -g q zombie should mocha coffee-script'" 
    action :run
  end

वजह से कुछ कीड़े , महाराज ठीक से निर्दिष्ट उपयोगकर्ता के लिए पर्यावरण निर्धारित नहीं करता है निष्पादित । Narced133 के समाधान से काम नहीं चलेगा।


7

आप environmentअपने निष्पादित ब्लॉक में गृह और USER परिवेश चर सेट करने के लिए उपयोग कर सकते हैं ।

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'})                                                             
    command "npm install -g q zombie should mocha coffee-script"                  
end

मैं अपने वीएम के अंदर योनि उपयोगकर्ता के रूप में योनि प्लग इन को स्थापित करने के लिए अक्सर इसका उपयोग करता हूं। यदि आप जिस भी कमांड को निष्पादित करने का प्रयास कर रहे हैं, उसके लिए आप अन्य पर्यावरण चर भी निर्धारित कर सकते हैं।


यह एक बहुत ही साफ जवाब है IMHO।
बेन लियायनज

2

ऐसा लगता है कि शेफ को योनि उपयोगकर्ता के रूप में निष्पादित कर रहा है लेकिन अपने शेल के समान पेट को नहीं खोज रहा है। का उपयोग कर लॉगिन करें vagrant sshऔर चलाएं which npm। यह कुछ इस तरह लौटेगा /path/to/bin/npm/path/to/bin/उपयुक्त निर्देशिका खोजने के लिए बावर्ची को मजबूर करने के लिए नीचे बदलें ।

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    path ["/path/to/bin/"]                                                               
    command "npm install -g q zombie should mocha coffee-script"                  
end

बस कोशिश की कि; कोई पाँसा नहीं। पोस्ट में एक ही त्रुटि के साथ अभी भी विफल रहता है। कोई अन्य सुझाव?
नीजर

रास्‍ता सही करने की कोशिश करने के बजाय सीधे npm सिमिलिंक पर कमांड को इंगित करने का प्रयास कर सकता है। command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script
narced133

मैं पुष्टि कर सकता हूं कि "पथ" कुछ भी नहीं करता है, लेकिन कमांड को बाइनरी में सीधे इंगित करने से चाल होती है। यह शेफ के बग जैसा लगता है।
एफआरकेटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.