выполнение команд от имени пользователя после инициализации 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 ответа:
вы должны быть в состоянии сделать это с помощью бродячая оболочка 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.