Certaines commandes doivent être exécutées en tant qu'utilisateur normal après l'approvisionnement initial. Je pensais pouvoir le faire en utilisant un script Shell séparé et la commande su --login -c <command> vagrant
, mais il n'obtient pas le chemin de l'utilisateur ou d'autres paramètres d'environnement à partir de .bashrc.
par exemple.:
#!/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
Y a-t-il un moyen de faire cela? Peut-être que cela doit être fait avec un autre outil d'approvisionnement comme Puppet ou Chef? J'ai pensé à créer un autre script Shell qui source le .bashrc
, en le copiant dans la boîte en utilisant a: file provisioner et en exécutant les commandes comme ça, mais cela ressemble à un hack.
Quelle est la bonne façon de procéder?
Vous devriez pouvoir le faire en utilisant Vagrant Shell provisioner , par ex.
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 clé est de spécifier privileged: false
pour qu'il utilise l'utilisateur par défaut et non root
.
Je voulais documenter une solution pour les situations où le provisionneur Shell doit exécuter des commandes en tant qu'utilisateur non root dans un shell de connexion:
Mettez vos commandes de provisioning dans un script Shell (par exemple '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
Puis dans votre Vagrantfile:
Vagrant.configure(2) do |config|
$script = "/bin/bash --login /vagrant/bootstrap.sh"
config.vm.provision :Shell, privileged: false, inline: $script
end
Vous devez remplacer le /vagrant/bootstrap.sh
chemin avec le chemin correct pour votre script de provisioning à l'intérieur de la machine vagabonde.
J'ai utilisé cette solution spécifiquement pour que les commandes rvm
fonctionnent pendant le provisioning avec Vagrant.
J'ai essayé Les réponses @ jabclab et @ evanhs ne fonctionnent pas avec moi
Pour installer rbenv
et l'utiliser dans le processus Vagrant Provisioning.
Utilisation des commandes suivantes avant d'utiliser les commandes rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
export PATH="$HOME/.rbenv/plugins/Ruby-build/bin:$PATH"
eval "$(rbenv init -)"
Fichier 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
Ensuite, le fichier VagrantFile
inclura une ligne de provisionnement vagabonde
deploy_config.vm.provision :Shell, privileged: false, path: "bootstrap.sh"
Source pour ma réponse de Gits par @creisor
Une autre façon d'utiliser les commandes rbenv
dans le processus de provisionnement vagabond à réponses à cette question