Подтвердить что ты не робот

Выполнять команды в качестве пользователя после предоставления Vagrant

Есть несколько команд, которые должны выполняться как обычный пользователь после первоначальной инициализации. Я думал, что могу сделать это, используя отдельную оболочку script и команду 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

Есть ли способ сделать это? Может быть, это нужно сделать с помощью другого инструмента обеспечения ресурсов, такого как Puppet или Chef? Я подумал о создании еще одной оболочки script, которая отправляет .bashrc, копируя ее в поле, используя средство обеспечения файла: и выполнение таких команд, но похоже вроде хака.

Каков правильный способ сделать это?

4b9b3361

Ответ 1

Вы должны сделать это, используя Vagrant Shell Provender, например

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.

Ответ 2

Я хотел задокументировать решение для ситуаций, когда поставщик оболочки должен запускать команды в качестве пользователя без полномочий root в оболочке входа в систему:

Поместите свои команды обеспечения в сценарий оболочки (например, "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

Тогда в вашем Vagrantfile:

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.

Ответ 3

Я пытался ответить, что @jabclab и @evanhsu не работают со мной

Чтобы установить rbenv и использовать его в процессе Vagrant 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"

Источник моего ответа от Gits от @creisor

Другой способ использования команд rbenv в процессе предоставления vagrant на ответах на этот вопрос