Hay algunos comandos que deben ejecutarse como un usuario normal después del aprovisionamiento inicial. Pensé que podría hacer esto usando un script de shell separado y el comando su --login -c <command> vagrant
, pero no obtiene la ruta del usuario u otras configuraciones del entorno de .bashrc.
p.ej:
#!/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
¿Hay alguna forma de hacer esto? ¿Quizás deba hacerse con otra herramienta de aprovisionamiento como Puppet o Chef? He pensado en crear otro script de shell que obtenga el .bashrc
código, copiarlo en la caja usando un: aprovisionador de archivos y ejecutar los comandos de esa manera, pero parece una especie de truco.
¿Cuál es la forma correcta de hacer esto?
su -p
preservará las variables de entorno, ¿esto ayuda?Vagrant
caja con la instalación de Ruby, añadirRuby
etiquetas y añadir la instalación de Ruby en el título de pregunta como esta => ejecutar comandos de instalación de Ruby como usuario durante el aprovisionamiento de VagrantRespuestas:
Debería poder hacer esto utilizando el aprovisionador Vagrant Shell , p. Ej.
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
La clave es especificar
privileged: false
para que use el usuario predeterminado y noroot
.fuente
Quería documentar una solución para situaciones en las que el aprovisionador de shell debe ejecutar comandos como un usuario no root en un shell de inicio de sesión :
Coloque sus comandos de aprovisionamiento en un script de shell (por ejemplo, '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
Luego, en su Vagrantfile:
Vagrant.configure(2) do |config| $script = "/bin/bash --login /vagrant/bootstrap.sh" config.vm.provision :shell, privileged: false, inline: $script end
Debe reemplazar la
/vagrant/bootstrap.sh
ruta con la ruta correcta para su script de aprovisionamiento dentro de la máquina vagabunda .He usado esta solución específicamente para que los
rvm
comandos funcionen mientras aprovisionaba con Vagrant.fuente
He intentado tanto @jabclab y @evanhsu no respuestas trabajar conmigo
Para instalarlo
rbenv
y usarlo dentro del proceso de Vagrant Provisioning.Uso de comandos siguientes antes de usar
rbenv
comandosexport PATH="$HOME/.rbenv/bin:$PATH" export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH" eval "$(rbenv init -)"
Archivo 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
Entonces el
VagrantFile
archivo incluirá la línea de aprovisionamiento de vagabundosdeploy_config.vm.provision :shell, privileged: false, path: "bootstrap.sh"
Fuente de mi respuesta de Gits por @creisor
Otra forma de usar
rbenv
comandos dentro del proceso de aprovisionamiento vagabundo en las respuestas de esta preguntafuente
A veces desea mezclar comandos con privilegios y comandos sin privilegios. Si su situación lo requiere, utilice runuser.
runuser -l vagrant -c 'command'
fuente