在流浪者配置期间更改用户

时间:2015-09-03 07:22:21

标签: ruby vagrant vagrantfile

我想使用vagrant来设置开发者机器。由于机器将与内部服务器通信,我认为它们设置的开发人员在主机上具有相同的用户名是个好主意。我在配置步骤中无法弄清楚如何处理这个问题。

我的简单Vagrantfile如下所示:

VAGRANT_COMMAND = ARGV[0]

Vagrant.configure(2) do |config|
  user = ENV['USER']
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :shell, :path => "bootstrap.sh", :args => user
  config.ssh.username = user
  config.ssh.password = "heimskringla"
  config.vm.synced_folder "~/src/", "/home/" + user + "/src"
  config.vm.provision "file", source: "~/.gitconfig", destination: "/home/" + user + "/.gitconfig"
  config.vm.provision "file", source: "~/.ssh", destination: "/home/" + user + "/.ssh"
end

bootstrap.sh从主机获取$ USER作为输入。如果Vagrant机器中不存在该用户,则会创建该用户并将其添加到/etc/sudoers.d。

如果我从一个干净的平板开始并在此上运行“Vagrant up”,它会立即开始使用$ USER,并且由于它还不存在,安装失败。

作为测试,我尝试过这样做:

if VAGRANT_COMMAND != "up"
  config.ssh.username = user
  config.ssh.password = "changeme"
end

然后bootstrap.sh中的配置工作。用户已创建,我的软件包已安装。但是,当它到达文件和同步文件夹配置时,由于权限问题而失败。

由于权限,无法通过SCP将文件上传到来宾VM 错误。这通常是因为SSH用户没有权限 写入目的地位置。或者,用户正在运行 主机上的Vagrant可能没有读取文件的权限。

我已经尝试在bootstrap.sh的底部做“su $ USER”,但这显然不是它的工作方式。

任何人都知道如何满足我的需求?

编辑:可能的解决方案

我决定不努力改变Vagrant,并试图使用流浪者用户。现在我有以下Vagrantfile:

Vagrant.configure(2) do |config|
    config.vm.box = "ubuntu/trusty64"
    config.vm.provision :shell, :path => "vagrant/bootstrap.sh"
    config.vm.synced_folder "~/src/", "/home/vagrant/src"
    config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
    config.vm.provision "file", source: "~/.ssh", destination: ".ssh-from-host-machine"
    config.vm.provision "file", source: "vagrant/.bash_aliases", destination: ".bash_aliases"
    config.vm.provision :shell, privileged: false, :path => "vagrant/bootstrap_late.sh"
end

bootstrap.sh安装所需的软件包,bootstrap_late.sh为vagrant用户进行必要的安装。这包括添加ssh配置,使其在与服务器通信时使用$ USER。

0 个答案:

没有答案