Niektóre polecenia muszą zostać uruchomione jako zwykły użytkownik po początkowym udostępnieniu. Pomyślałem, że mógłbym to zrobić używając oddzielnego skryptu powłoki i polecenia su --login -c <command> vagrant
, ale nie uzyskuje to ścieżki użytkownika ani innych ustawień środowiska z .bashrc.
na przykład:
#!/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
Czy jest na to sposób? Może trzeba to zrobić za pomocą innego narzędzia do obsługi administracyjnej, takiego jak Puppet lub Chef? Myślałem o stworzeniu kolejnego skryptu powłoki, który pozyskuje .bashrc
plik, skopiowaniu go do skrzynki za pomocą: file Provisioner i wykonaniu takich poleceń, ale wygląda to na coś w rodzaju włamania.
Jaki jest właściwy sposób, aby to zrobić?
su -p
zachowa zmienne środowiskowe - czy to pomoże?Vagrant
skrzynce kompilacji z instalacją Rubiego, dodaszRuby
znacznik i dołączysz instalację Rubiego do tytułu pytania W ten sposób => wykonaj polecenia instalacyjne Rubiego jako użytkownik podczas udostępniania VagrantOdpowiedzi:
Powinieneś być w stanie to zrobić za pomocą narzędzia Vagrant Shell , np
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
Kluczem jest określenie,
privileged: false
aby używał domyślnego użytkownika, a nieroot
.źródło
Chciałem udokumentować rozwiązanie dla sytuacji, w których dostawca powłoki musi uruchamiać polecenia jako użytkownik inny niż root w powłoce logowania :
Umieść swoje polecenia obsługi administracyjnej w skrypcie powłoki (np. „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
Następnie w swoim pliku 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
Ścieżkę należy zastąpić poprawną ścieżką do skryptu obsługi administracyjnej wewnątrz maszyny włóczącej się .Użyłem tego rozwiązania specjalnie po to, aby
rvm
polecenia działały podczas udostępniania z Vagrantem.źródło
Próbowałem zarówno @jabclab i @evanhsu nie działają ze mną
Żeby zainstalować
rbenv
i używać go w ramach procesu Vagrant Provisioning.Używanie następnych poleceń przed użyciem
rbenv
poleceńexport PATH="$HOME/.rbenv/bin:$PATH" export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH" eval "$(rbenv init -)"
Plik 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
Następnie
VagrantFile
plik będzie zawierał linię zaopatrzenia wędrownegodeploy_config.vm.provision :shell, privileged: false, path: "bootstrap.sh"
Źródło mojej odpowiedzi od Gits autorstwa @creisor
Kolejny sposób na użycie
rbenv
poleceń w procesie udostępniania włóczęgów w odpowiedzi na to pytanieźródło
Czasami chcesz mieszać polecenia uprzywilejowane i nieuprzywilejowane. Jeśli twoja sytuacja wymaga tego, użyj runuser.
runuser -l vagrant -c 'command'
źródło