Vagrant प्रोविजनिंग के बाद उपयोगकर्ता के रूप में कमांड निष्पादित करें


79

कुछ आदेश हैं जिन्हें प्रारंभिक प्रावधान के बाद एक सामान्य उपयोगकर्ता के रूप में चलाया जाना चाहिए। मैंने सोचा कि मैं एक अलग शेल स्क्रिप्ट और कमांड का उपयोग करके ऐसा कर सकता हूं su --login -c <command> vagrant, लेकिन यह उपयोगकर्ता के पथ या अन्य पर्यावरण सेटिंग्स .bashrc को प्राप्त नहीं कर रहा है।

उदाहरण के लिए:

#!/usr/bin/env bash
su --login -c "rbenv install 2.0.0-p353" vagrant
su --login -c "rbenv global 2.0.0-p353" vagrant
su --login -c "gem update --system" vagrant
su --login -c "yes | gem update" vagrant
su --login -c "gem install rdoc" vagrant
su --login -c "gem install rails pg" vagrant

क्या इसे करने का कोई तरीका है? शायद यह कठपुतली या रसोइये जैसे अन्य प्रावधान उपकरण के साथ किया जाना है? मैंने एक और शेल स्क्रिप्ट बनाने के बारे में सोचा है जो सूत्रों का कहना है .bashrc, एक का उपयोग करके बॉक्स में कॉपी करना: फ़ाइल प्रावधान और उस तरह के कमांड को निष्पादित करना, लेकिन यह एक हैक की तरह लगता है।

ऐसा करने का सही तरीका क्या है?


su -pपर्यावरण चर को संरक्षित करेगा - क्या यह मदद करता है?
जोश जॉली

@ मुझे लगता है कि Vagrantरूबी इंस्टॉलेशन के साथ बिल्ड बॉक्स के बारे में बताना आपके प्रश्न के लिए प्रीफेक्ट होगा , Rubyटैग को जोड़ें और प्रश्न के शीर्षक पर रूबी इंस्टॉलेशन को जोड़ें। इस तरह = वैगरेंट प्रोविजनिंग के दौरान उपयोगकर्ता के रूप में रूबी इंस्टॉलेशन कमांड्स को निष्पादित करें
आहिल हमीद

जवाबों:


157

आप वैगेंट शेल के प्रावधानक का उपयोग करके ऐसा करने में सक्षम होना चाहिए , जैसे

Vagrant.configure("2") do |config|
  $script = <<-SCRIPT
  rbenv install 2.0.0-p353
  rbenv global 2.0.0-p353
  gem update --system
  yes | gem update
  gem install rdoc
  gem install rails pg
  SCRIPT

  config.vm.provision "shell", inline: $script, privileged: false
end

कुंजी को निर्दिष्ट करना है privileged: falseताकि वह डिफ़ॉल्ट उपयोगकर्ता का उपयोग करे और नहीं root


10
क्या गैर-डिफ़ॉल्ट उपयोगकर्ता के रूप में ऐसा करने का कोई तरीका है?
जूनो वुड्स

5

मैं उन स्थितियों के लिए एक समाधान का दस्तावेज बनाना चाहता था, जहां शेल प्रावधानकर्ता को लॉगिन शेल में एक गैर-रूट उपयोगकर्ता के रूप में कमांड चलाना चाहिए :

अपने प्रोविज़निंग कमांड को एक शेल स्क्रिप्ट में डालें (जैसे 'bootstrap.sh'):

#! /bin/bash

rbenv install 2.0.0-p353
rbenv global 2.0.0-p353
gem update --system
yes | gem update
gem install rdoc
gem install rails pg

फिर अपने वैग्रांटफाइल में:

Vagrant.configure(2) do |config|

  $script = "/bin/bash --login /vagrant/bootstrap.sh"
  config.vm.provision :shell, privileged: false, inline: $script

end

आपको योनि मशीन के अंदर/vagrant/bootstrap.sh अपने प्रावधान स्क्रिप्ट के लिए सही मार्ग के साथ पथ को बदलना चाहिए ।

मैंने इस समाधान का उपयोग विशेष रूप से rvmVagrant के साथ कार्य करते समय कमांड प्राप्त करने के लिए किया है ।


0

मैंने कोशिश की कि @jabclab और @evanhsu दोनों मेरे साथ काम न करें

rbenvVagrant Provisioning प्रक्रिया के भीतर इसे स्थापित करने और उपयोग करने के लिए ।

उपयोग करने से पहले अगले आदेशों का उपयोग करते rbenvआदेशों

export PATH="$HOME/.rbenv/bin:$PATH"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
eval "$(rbenv init -)"

Bootstrap.sh फ़ाइल

#!/usr/bin/env bash

sudo apt-get update
echo "========================= install dependencies for install rbenv ==========================="
sudo apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
echo "========================= install rbenv =========================================="
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>  ~/.bashrc
echo 'eval "$(rbenv init -)"' >>  ~/.bashrc
echo "========================= install ruby build plugin for rbenv ======================="
git clone https://github.com/rbenv/ruby-build.git  ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
echo "========================= install ruby v2.5.0 =========================================="
export PATH="$HOME/.rbenv/bin:$PATH"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
eval "$(rbenv init -)"
rbenv install 2.5.0
rbenv global 2.5.0
ruby -v
gem -v
echo "========================= install bundler dependencies manager for ruby ====================="
gem install bundler
rbenv rehash

फिर VagrantFileफ़ाइल में योनि प्रावधान पंक्ति शामिल होगी

deploy_config.vm.provision :shell, privileged: false, path: "bootstrap.sh"

मेरे उत्तर के लिए स्रोत @ क्रेता द्वारा

इस सवाल के जवाब मेंrbenv योनि प्रावधान प्रक्रिया के भीतर आदेशों का उपयोग करने का एक और तरीका है


0

कभी-कभी आप विशेषाधिकार प्राप्त आदेशों और गैर-विशेषाधिकार प्राप्त आदेशों का मिश्रण करना चाहते हैं। यदि आपकी स्थिति इस रन रनर के लिए कॉल करती है।

runuser -l vagrant -c 'command'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.