code

Vagrant 프로비저닝 후 사용자로 명령 실행

codestyles 2020. 11. 4. 08:00
반응형

Vagrant 프로비저닝 후 사용자로 명령 실행


초기 프로비저닝 후 일반 사용자로 실행해야하는 몇 가지 명령이 있습니다. 별도의 쉘 스크립트와 명령을 사용하여이 작업을 수행 할 수 있다고 생각 su --login -c <command> vagrant했지만 .bashrc에서 사용자의 경로 또는 기타 환경 설정을 가져 오지 않습니다.

예 :

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

이를 수행하는 방법이 있습니까? Puppet 또는 Chef와 같은 다른 프로비저닝 도구로 수행해야할까요? 를 소스로하는 또 다른 쉘 스크립트를 만들고 .bashrc: file 프로 비저 너를 사용하여 상자에 복사하고 이와 같은 명령을 실행하는 것을 생각했지만 일종의 해킹처럼 보입니다.

이를 수행하는 올바른 방법은 무엇입니까?


당신은 이것을 사용하여이 작업을 수행 할 수 있어야한다 방랑 쉘 제공자를 , 예를

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

핵심은 privileged: false기본 사용자가 아닌 기본 사용자를 사용 하도록 지정 하는 것입니다 root.


셸 프로 비저 너가 로그인 셸에서 루트가 아닌 사용자로 명령을 실행해야하는 상황에 대한 솔루션을 문서화하고 싶었습니다 .

프로비저닝 명령을 쉘 스크립트 (예 : '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

그런 다음 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경로를 vagrant 머신 내부의 프로비저닝 스크립트에 대한 올바른 경로로 바꿔야합니다 .

rvmVagrant로 프로비저닝하는 동안 명령이 작동하도록 특별히이 솔루션을 사용했습니다 .


@jabclab@evanhsu 모두 나와 함께 작동하지 않는 답변을 시도 했습니다.

rbenvVagrant Provisioning 프로세스 내에서 설치 하고 사용합니다.

Using Next Commands before using rbenv commands

export PATH="$HOME/.rbenv/bin:$PATH"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
eval "$(rbenv init -)"

Bootstrap.sh File

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

Then VagrantFile file will include vagrant provisioning line

deploy_config.vm.provision :shell, privileged: false, path: "bootstrap.sh"

Source for my Answer from Gits by @creisor

Another Way to using rbenv commands within vagrant provisioning process at answers of this question

참고URL : https://stackoverflow.com/questions/22547575/execute-commands-as-user-after-vagrant-provisioning

반응형