2014-05-24 6 views
6

व्रगेंट के माध्यम से उबंटू पर अपने सर्वर पर्यावरण को स्थापित करने के लिए एक शेल स्क्रिप्ट लिखने की कोशिश कर रहा है और एक समस्या में चल रहा है जहां स्क्रिप्ट अप्रत्याशित रूप से समाप्त होती है। मैंने Vagrant के प्रावधान कॉन्फ़िगरेशन विकल्प में खोल स्क्रिप्ट के पथ को जोड़ा।वग्रेंट सेटअप के लिए शैल स्क्रिप्ट सेट करना

Vagrant:

# Specify our provision script 
config.vm.provision "shell", path: "scripts/bootstrap.sh" 

मेरे स्क्रिप्ट:

#!/bin/bash 

# Install dependencies for Ruby 
sudo apt-get update 
sudo apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common 

# Setting up rbenv 
echo 'Setting up rbenv' 
git clone git://github.com/sstephenson/rbenv.git .rbenv 
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc 
echo 'eval "$(rbenv init -)"' >> ~/.bashrc 
exec $SHELL 

चलाने के बाद, मैं भंडार .rbenv फ़ोल्डर में क्लोन किया जाना है और rbenv में ~/$ पथ को जोड़ा गया है की उम्मीद है। rbenv init फ़ंक्शन के साथ bashrc का मूल्यांकन किया गया और ~/.bashrc में डाल दिया गया। हालांकि, जब स्क्रिप्ट को वग्रेंट के प्रावधान चरण पर निष्पादित किया जाता है, तो मैं स्क्रिप्ट के साथ समाप्त होता हूं, केवल गिट रिपोजिटरी को क्लोन करता हूं और फिर मेरी स्क्रिप्ट में किसी और चीज को निष्पादित किए बिना समाप्त कर देता हूं।

आउटपुट:

==> default: Processing triggers for libc-bin (2.19-0ubuntu6) ... 
==> default: Setting up rbenv 
==> default: Cloning into '.rbenv'... 

और फिर स्क्रिप्ट समाप्त हो जाता है और ~/.bashrc अपरिवर्तित छोड़ दिया है। मैं सोच रहा था कि मैं अपनी शेल स्क्रिप्ट कैसे बदल सकता हूं ताकि यह मेरी इच्छित कार्रवाई करेगा (जो आरबीएनवी को ~/.bashrc में जोड़ रहा है)। कोई विचार?

+1

क्या स्क्रिप्ट _current user_ के संदर्भ में निष्पादित है? क्या यह स्क्रिप्ट चलने पर कहीं और '' 'अंक हो सकता है? डिबगिंग के लिए, अपनी स्क्रिप्ट में निम्नलिखित जोड़ें और इसके _stderr_ आउटपुट को कैप्चर करें: 'PS4 ='> $ LINENO: '; सेट-एक्सवी' – mklement0

उत्तर

8

जैसा कि mklement0 ने कहा था, स्क्रिप्ट vagrant उपयोगकर्ता के रूप में नहीं चलती है: यह root के रूप में चलती है।

यदि आप स्क्रिप्ट को vagrant उपयोगकर्ता के रूप में चलाने के लिए चाहते हैं तो आपको privileged: false की आवश्यकता है।

config.vm.provision :shell, privileged: false, path: "scripts/bootstrap.sh" 

रूप mklement0 ने कहा: उपयोग सेट -xv अपने प्रावधान स्क्रिप्ट डिबग करने के लिए।

आप किसी अन्य उपयोगकर्ता के रूप में चलाने के लिए चाहते हैं, तो मत भूलना कि su userनहीं काम करेगा: How do I use su to execute the rest of the bash script as that user?

2

आप आवारा उपयोगकर्ता जैसे कुछ स्क्रिप्ट को निष्पादित चाहते हैं तो यह प्रयास करें।

su vagrant -l -c "echo Hello world" 
संबंधित मुद्दे