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


есть некоторые команды, которые должны быть выполнены как обычный пользователь после начальной подготовки. Я думал, что смогу сделать это с помощью отдельного сценария оболочки и команды 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? Я думал о создании другого сценария оболочки, который создает.bashrc, копирование его в поле с помощью a: file provisioner и выполнение таких команд, но это похоже на взлом.

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

2 58

2 ответа:

вы должны быть в состоянии сделать это с помощью бродячая оболочка provisioner, например,

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.

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

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