thực hiện các lệnh với tư cách người dùng sau khi cấp phép Vagrant


79

Có một số lệnh phải được chạy như một người dùng bình thường sau khi cấp phép ban đầu. Tôi nghĩ rằng tôi có thể làm điều này bằng cách sử dụng một tập lệnh shell và lệnh riêng biệt su --login -c <command> vagrant, nhưng nó không lấy được đường dẫn của người dùng hoặc các cài đặt môi trường khác từ .bashrc.

ví dụ:

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

Có cách nào để làm việc này không? Có lẽ nó phải được thực hiện với một công cụ cung cấp khác như Puppet hoặc Chef? Tôi đã nghĩ đến việc tạo một tập lệnh shell khác lấy nguồn .bashrc, sao chép nó vào hộp bằng cách sử dụng: trình cấp phép tệp và thực hiện các lệnh như vậy, nhưng nó có vẻ giống như một vụ hack.

Cách thích hợp để làm điều này là gì?


su -psẽ duy trì các biến môi trường - điều này có giúp ích gì không?
Josh Jolly

@Vince Tôi nghĩ rằng nó sẽ hảo cho câu hỏi của bạn để đề cập về xây dựng Vagranthộp với cài đặt Ruby, add Rubythẻ và append của Ruby Cài đặt trên tiêu đề câu hỏi của Như thế này => thực hiện các lệnh cài đặt Ruby như người dùng trong Vagrant provisioning
ahmed hamdy

Câu trả lời:


157

Bạn có thể thực hiện việc này bằng cách sử dụng trình điều chỉnh Vagrant Shell , ví dụ:

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

Điều quan trọng là chỉ định privileged: falseđể nó sẽ sử dụng người dùng mặc định và không root.


10
Có cách nào để làm điều này với tư cách là người dùng không phải mặc định không?
Juno Woods

5

Tôi muốn ghi lại một giải pháp cho các tình huống trong đó trình cung cấp trình bao phải chạy lệnh với tư cách là người dùng không phải root trong trình bao đăng nhập :

Đặt các lệnh cấp phép của bạn vào một tập lệnh shell (ví dụ: '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

Sau đó, trong Vagrantfile của bạn:

Vagrant.configure(2) do |config|

  $script = "/bin/bash --login /vagrant/bootstrap.sh"
  config.vm.provision :shell, privileged: false, inline: $script

end

Bạn nên thay thế /vagrant/bootstrap.shđường dẫn bằng đường dẫn chính xác cho tập lệnh cấp phép của bạn bên trong máy lang thang .

Tôi đã sử dụng giải pháp này đặc biệt để rvmcác lệnh hoạt động trong khi cấp phép với Vagrant.


0

Tôi cố gắng Cả @jabclab@evanhsu câu trả lời không làm việc với tôi

Để cài đặt rbenvvà sử dụng nó trong quy trình Cấp phép Vagrant.

Sử dụng lệnh tiếp theo trước khi sử dụng rbenvlệnh

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

Tệp 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

Sau đó, VagrantFiletệp sẽ bao gồm dòng cấp phép mơ hồ

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

Nguồn cho Câu trả lời của tôi từ Gits bởi @creisor

Một cách khác để sử dụng rbenvcác lệnh trong quy trình cấp phép mơ hồ tại các câu trả lời của câu hỏi này


0

Đôi khi bạn muốn kết hợp các lệnh đặc quyền và các lệnh không đặc quyền. Nếu tình huống của bạn yêu cầu sử dụng runuser này.

runuser -l vagrant -c 'command'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.