виконувати команди як користувач після забезпечення 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, скопіювавши його у вікно, використовуючи файл: provisioner і виконуючи такі команди, але це здається наче хак.

Який правильний спосіб це зробити?


su -pзбереже змінні середовища - чи це допомагає?
Джош Веселий

@Vince Я думаю, що до вашого запитання буде префектом згадати про Vagrantвікно збірки з установкою Ruby, додати Rubyтег та додати Ruby Installation до заголовка запитання Ось так => виконувати команди встановлення Ruby як користувач під час надання Vagrant
Ahmed Hamdy

Відповіді:


157

Ви зможете це зробити за допомогою постачальника Vagrant Shell , наприклад

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:

Vagrant.configure(2) do |config|

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

end

Вам слід замінити /vagrant/bootstrap.shшлях на правильний шлях для вашого сценарію підготовки всередині машини-бродяги .

Я використовував це рішення спеціально для отримання rvmкоманд для роботи під час забезпечення з Vagrant.


0

Я спробував як відповіді @jabclab, так і @evanhsu не працюють зі мною

Щоб встановити rbenvта використовувати його в процесі надання послуг Vagrant.

Використання наступних команд перед використанням 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"

Джерело моєї відповіді від Gits @creisor

Інший спосіб використання rbenvкоманд у процесі бродячого надання у відповідях на це запитання


0

Іноді потрібно поєднати привілейовані команди та непривілейовані команди. Якщо ваша ситуація вимагає цього, використовуйте runuser.

runuser -l vagrant -c 'command'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.