2014-05-24 21 views
6

Provare a scrivere uno script di shell per configurare il mio ambiente server su Ubuntu tramite Vagrant e sto correndo in un problema in cui lo script termina in modo imprevisto. Ho aggiunto il percorso allo script della shell nell'opzione di configurazione della fornitura di Vagrant.Impostazione di Shell Script per Vagrant Setup

Vagrant:

# Specify our provision script 
config.vm.provision "shell", path: "scripts/bootstrap.sh" 

Il mio script:

#!/bin/bash 

# Install dependencies for Ruby 
sudo apt-get update 
sudo apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common 

# Setting up rbenv 
echo 'Setting up rbenv' 
git clone git://github.com/sstephenson/rbenv.git .rbenv 
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc 
echo 'eval "$(rbenv init -)"' >> ~/.bashrc 
exec $SHELL 

Dopo la corsa, mi aspetto il repository da clonare nella cartella .rbenv e di avere rbenv aggiunto al $ PATH in ~ /. bashrc insieme con la funzione init di rbenv valutata e inserita in ~/.bashrc. Tuttavia, quando lo script viene eseguito sul passo di provisioning di Vagrant, finisco con lo script solo clonando il repository git e quindi terminando senza eseguire nient'altro nel mio script.

uscita:

==> default: Processing triggers for libc-bin (2.19-0ubuntu6) ... 
==> default: Setting up rbenv 
==> default: Cloning into '.rbenv'... 

E poi lo script termina e ~/.bashrc è rimasto invariato. Mi stavo chiedendo come posso cambiare il mio script di shell in modo che esegua l'azione che voglio (che sta aggiungendo rbenv a ~/.bashrc). Qualche idea?

+1

Lo script è eseguito nel contesto dell'utente _corrente_? Potrebbe essere che '~' punti altrove quando viene eseguito lo script? Per il debug, aggiungi quanto segue al tuo script e acquisisci anche il suo output _stderr_: 'PS4 = '> $ LINENO:'; imposta -xv' – mklement0

risposta

8

Come detto mklement0, lo script non viene eseguito come utente vagrant: viene eseguito come root.

Se si desidera eseguire lo script come utente vagrant, è necessario privileged: false.

config.vm.provision :shell, privileged: false, path: "scripts/bootstrap.sh" 

Come mklement0 detto: usate il set -xv per il debug degli script di provisioning.

Se si desidera eseguire come un altro utente, non dimenticate che su uservolontà non lavoro: How do I use su to execute the rest of the bash script as that user?

2

Se si desidera eseguire qualche script come utente vagabonda, provare questo.

su vagrant -l -c "echo Hello world"