" gem install"使用rbenv从shell进行vagrant provision setup.sh

时间:2016-02-04 16:44:26

标签: ruby shell rubygems vagrant vagrantfile

我正在使用这个vagrantfile:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "ubuntu/trusty64"

  ...bla bla bla bla bla...

    config.vm.provision "shell", path: "provision/setup.sh", privileged: false

end

在我的 setup.sh 中,我有:

sudo apt-get update
sudo apt-get install --yes git-all libreadline-dev build-essential curl git m4 python-setuptools ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev

yes | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

echo PATH=$HOME/.linuxbrew/bin:$PATH >> ~/.bashrc    
export PATH=$HOME/.linuxbrew/bin:$PATH
brew doctor

然后我有:

brew install rbenv ruby-build
brew update
brew upgrade

echo 'eval "$(rbenv init -)"' >> ~/.bashrc
. ~/.bashrc
rbenv init

rbenv install 2.3.0
rbenv global 2.3.0
rbenv local 2.3.0
rbenv versions

gem install bundler

但是我收到了这个错误:

==> default: ERROR: While executing gem ... (Errno::EACCES) ==> default: Permission denied - /var/lib/gems`

如何安装" bundler"和其他"宝石"用我的设置脚本?

1 个答案:

答案 0 :(得分:0)

在脚本中运行sudo并不是一个好主意,但尝试使用

对脚本进行sudoing
$ sudo ./script.sh

并从你的sh脚本中取出所有'sudos'。

下一步更改

config.vm.provision "shell", path: "provision/setup.sh", privileged: false

config.vm.provision "shell", path: "provision/setup.sh", privileged: true

这样sudo只对文件解锁,并且可以控制你正在做的任何事情。

如果这是机器中的新文件,您可能需要使用

chmod +x ./script.sh

让你的操作系统正确执行它。从我看到的情况来看,事情应该可以正常工作,除非你不小心配置你的vm两次,你可能想要覆盖它。您也可以尝试自己运行每个命令,看看它是否是流浪者之外的孤立问题。

修改 主要问题是/ var / lib / gems目录是root用户所拥有的,所以无论如何都可以在sudo命令下获得它。

编辑:清晰度很高。