Configure el usuario de inicio de sesi贸n de Vagrant durante el aprovisionamiento utilizando el proveedor de Shell.

Vagrant permite el aprovisionamiento de nuevas instancias de invitados mediante Shell, pero el script siempre se ejecuta en el rootcontexto. Ejecutar como rootes ideal para la configuraci贸n global sin tener que lidiar con sudo. Pero, 驴qu茅 debe hacer si tambi茅n necesita configurar autom谩ticamente el usuario de inicio de sesi贸n de Vagrant durante el aprovisionamiento? Eso no es tan sencillo como parece.

Un esqueleto de un proyecto t铆pico para m铆 se ve as铆:

 .
鈹溾攢鈹 Vagrantfile
鈹斺攢鈹 vagrant
鈹溾攢鈹 provision.sh
鈹斺攢鈹 user-config.sh

El vagrantdirectorio no es obligatorio, pero es una convenci贸n que he adaptado para organizar todos los archivos que usar茅 para Vagrant pero que no est谩n relacionados con la l贸gica de la aplicaci贸n. Lo m谩s importante es que hay dos archivos presentes. El provision.shes el archivo que contiene toda la configuraci贸n de mi sistema global. El user-config.shsostiene espec铆fico de configuraci贸n para el usuario de inicio de sesi贸n vagabundo.

Mi Vagrantfilevoluntad, como m铆nimo, se configurar谩 para usar el aprovisionador de Shell y comenzar谩 con vagrant/provision.sh:

Vagrant.configure('2') do |config|
# -- snipped --
config
.vm.provision :shell do |s|
s
.path = 'vagrant/provision.sh'
end
config
.vm.synced_folder '.', '/home/vagrant/myapp'
# -- snipped --
end

El es responsable de todas mis acciones de contexto como la instalaci贸n de bibliotecas o servicios como Postgres, Redis, etc. Todo esto es bastante t铆pico de la configuraci贸n de un nuevo sistema. 驴Qu茅 ser谩 diferente es sin embargo que tambi茅n invocar a los que el usuario configurar configuraci贸n personalizada para lo que sea que voy a estar haciendo. Normalmente uso el para instalar RVM, instalar Ruby, Bundling Rubygems y luego ejecutar las tareas Rails y Rake para configurar mi aplicaci贸n.provision.shrootprovision.shuser-config.shvagrantuser-config.sh

Un ejemplo de un m铆nimo para un sistema invitado de Ubuntu se ve as铆:provision.sh

#!/bin/bash -x

export DEBIAN_FRONTEND=noninteractive

apt
-get update
apt
-get -y install git
# install stuff, configure env, etc

su
-c "source /home/vagrant/myapp/vagrant/user-config.sh" vagrant

Observe que al final del script hay un comando para ejecutar el como usuario.provision.shsuuser-config.shvagrant

#!/bin/bash -x

echo
"export EDITOR=vim" >> $HOME/.bashrc

# RVM
echo
"rvm_install_on_use_flag=1" >> $HOME/.rvmrc
echo
"rvm_project_rvmrc=1" >> $HOME/.rvmrc
echo
"rvm_trust_rvmrcs_flag=1" >> $HOME/.rvmrc
curl
-L https://get.rvm.io | bash -s stable --autolibs=4
source
"$HOME/.rvm/scripts/rvm"
[[ -s "$rvm_path/hooks/after_cd_bundle" ]] && chmod +x $rvm_path/hooks/after_cd_bundle
rvm autolibs enable

rvm requirements

rvm reload


_RUBY_VERSION
="ruby-1.9.3"
rvm install $_RUBY_VERSION

rvm gemset create myapp

rvm
use $_RUBY_VERSION --default
rvm
use [email protected]

cd
~/myapp

gem update
--system && gem update bundler
bundle config
--global jobs 3

bundle install


bundle
exec rake db:setup
bundle
exec rake db:test:prepare

Esto puede contener cualquier cosa que necesite para su aplicaci贸n. Este es solo un ejemplo de lo que estoy usando para una aplicaci贸n en la que estoy trabajando actualmente.

Una advertencia es que el aprovisionador de Shell intentar谩 ejecutarse cada vez que lo haga vagrant up. Deber谩 cambiar la forma en que inicia Vagrant si desea omitir el paso de aprovisionamiento.

vagrant up --no-provision