Shell 以用户身份在无限制设置后执行命令
在初始设置之后,有些命令必须作为普通用户运行。我想我可以使用一个单独的shell脚本和命令su--login-cvagrant来实现这一点,但它不能从.bashrc获取用户路径或其他环境设置 e、 g: 有办法做到这一点吗?也许必须使用另一种资源调配工具,如Puppet或Chef来完成?我曾考虑过创建另一个shell脚本来生成Shell 以用户身份在无限制设置后执行命令,shell,vagrant,Shell,Vagrant,在初始设置之后,有些命令必须作为普通用户运行。我想我可以使用一个单独的shell脚本和命令su--login-cvagrant来实现这一点,但它不能从.bashrc获取用户路径或其他环境设置 e、 g: 有办法做到这一点吗?也许必须使用另一种资源调配工具,如Puppet或Chef来完成?我曾考虑过创建另一个shell脚本来生成.bashrc,使用:file provisioner将其复制到box中,并执行类似的命令,但这看起来有点像是一种黑客行为 正确的方法是什么?您应该能够使用,例如 Vagr
.bashrc
,使用:file provisioner将其复制到box中,并执行类似的命令,但这看起来有点像是一种黑客行为
正确的方法是什么?您应该能够使用,例如
Vagrant.configure(“2”)do | config|
$script=我想记录一个解决方案,用于shell provisioner必须以非root用户身份在登录shell中运行命令的情况:
将设置命令放入shell脚本(例如“bootstrap.sh”):
然后在你的文件中:
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进行资源调配时工作。我尝试了这两种方法,但结果都不起作用
安装rbenv
并在Vagrant配置过程中使用它
在使用rbenv
命令之前使用下一个命令
export PATH=“$HOME/.rbenv/bin:$PATH”
export PATH=“$HOME/.rbenv/plugins/ruby build/bin:$PATH”
求值“$(rbenv init-”
Bootstrap.sh文件
#/usr/bin/env bash
更新源
echo“==========================================================================================================================================================”
sudo apt get install-y autoconf bison build essential libssl dev libyaml dev libreadline6 dev zlib1g dev libncurse5 dev libffi dev libgdbm3 libgdbm dev
echo“================================================================================================================================================================================================================”
git克隆https://github.com/rbenv/rbenv.git ~/.rbenv
echo“export PATH=“$HOME/.rbenv/bin:$PATH”>>~/.bashrc
echo'eval“$(rbenv init-”>>~/.bashrc
echo“==========================================================================================================================================
git克隆https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby build
echo'export PATH=“$HOME/.rbenv/plugins/ruby build/bin:$PATH”>>~/.bashrc
echo“===============================================================================================================================================================================”
export PATH=“$HOME/.rbenv/bin:$PATH”
export PATH=“$HOME/.rbenv/plugins/ruby build/bin:$PATH”
求值“$(rbenv init-”
rbenv安装2.5.0
rbenv全球2.5.0
ruby-v
gem-v
echo“==============================================================================================================================================”
gem安装绑定器
rbenv再灰烬
然后vagrant文件
文件将包括vagrant供应行
deploy\u config.vm.provision:shell,privileged:false,路径:“bootstrap.sh”
我的答案来源于
在vagrant provisioning process at中使用rbenv
命令的另一种方法有时您希望混合使用特权命令和非特权命令。如果您的情况需要使用runuser
runuser-l vagrant-c'command'
su-p
将保留环境变量-这有帮助吗?@Vince我想,如果您提到使用Ruby安装的buildvagrant
box,添加Ruby
标记并在问题的标题上附加Ruby安装,如下=>在Vagrant Provisioning期间以用户身份执行Ruby安装命令有没有办法以非默认用户身份执行此操作?我正在尝试将nvm
作为Vagrant文件的一部分进行安装。默认脚本将为root用户安装它,而不是vagrant
用户。这样做不需要编写shell脚本。
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
#! /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
Vagrant.configure(2) do |config|
$script = "/bin/bash --login /vagrant/bootstrap.sh"
config.vm.provision :shell, privileged: false, inline: $script
end