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 머신 내부의 프로비저닝 스크립트에 대한 올바른 경로로 바꿔야합니다 .
rvm
Vagrant로 프로비저닝하는 동안 명령이 작동하도록 특별히이 솔루션을 사용했습니다 .
@jabclab 과 @evanhsu 모두 나와 함께 작동하지 않는 답변을 시도 했습니다.
rbenv
Vagrant 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
'code' 카테고리의 다른 글
Postgres 9.1 vs Mysql 5.6 InnoDB? (0) | 2020.11.04 |
---|---|
입력 유형 = "파일"대화 상자를 특정 파일 유형별로 필터링하는 방법은 무엇입니까? (0) | 2020.11.04 |
Lollipop AppCompat-v7 21- "테마"속성이 이미 정의되었습니다. (0) | 2020.11.04 |
클로저로 숫자를 나눌 때 분수를 얻습니다. 소수는 어떻게 얻습니까? (0) | 2020.11.04 |
예외를 잡았습니다 !! (0) | 2020.11.04 |