2014-05-24 12 views
6

Próba napisania skryptu powłoki w celu ustawienia środowiska serwera na systemie Ubuntu poprzez Vagrant i pojawia się problem, w którym skrypt kończy się nieoczekiwanie. Dodałem ścieżkę do skryptu powłoki w opcji konfiguracji dostarczania Vagrant.Konfigurowanie skryptu powłoki dla konfiguracji Vagrant

Vagrant:

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

Mój skrypt:

#!/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 

Po uruchomieniu, spodziewam repozytorium zostać sklonowany do folderu .rbenv i mieć rbenv dodany do $ PATH w pliku ~ /. bashrc wraz z funkcją init rbenv ocenianą i umieszczoną w ~/.bashrc. Jednakże, gdy skrypt zostanie wykonany na etapie dostarczania Vagrant, kończę skryptem tylko klonującym repozytorium git, a następnie kończącym bez wykonywania czegokolwiek w moim skrypcie.

wyjściowa:

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

A potem skrypt kończy i ~/.bashrc pozostało niezmienione. Zastanawiam się, w jaki sposób mogę zmienić skrypt powłoki tak, aby wykonywał żądaną akcję (która dodaje rbenv do ~/.bashrc). Jakieś pomysły?

+1

Czy skrypt został wykonany w kontekście _prądowego użytkownika_? Czy to możliwe, że '~' wskazuje gdzie indziej, gdy skrypt działa? Aby debugować, dodaj do skryptu i przechwytuj jego wyjściowe _stderr_: 'PS4 = '> $ LINENO:'; ustaw -xv' – mklement0

Odpowiedz

8

Jak powiedział mklement0, skrypt nie działa jako użytkownik vagrant: działa jako root.

Jeśli chcesz uruchomić skrypt jako użytkownik vagrant, musisz mieć privileged: false.

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

Jak mklement0 powiedział: użycie ustawić -xv debugować skrypty rezerw.

Jeśli chcesz uruchomić jako inny użytkownik, nie należy zapominać, że su usernie praca: How do I use su to execute the rest of the bash script as that user?

2

Jeśli chcesz wykonać jakiś skrypt jak Vagrant użytkownika, spróbuj tego.

su vagrant -l -c "echo Hello world" 
Powiązane problemy