3

我需要在 vagrant/virtualbox vm 上选择性地禁用主机时间同步。我可以像这样在主机上毫无问题地做到这一点:

$ VBoxManage setextradata <name> \
> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"

问题是我只需要在来宾虚拟机中完成一些工作时禁用同步。具体来说,单元测试作业需要能够以GetHostTimeDisabled编程方式切换值,从而有效地将虚拟机系统时间的完全控制权交给测试作业。

我考虑过在单元测试作业中通过 ssh 运行 VBoxManage 命令,但这带来了额外的困难。例如,将无密码登录设置为我的本地计算机作为 vagrant 用户。

我为 vm 启用了 ssh 代理转发,并确认它可以正常工作。除非有人对“更好”的方式提出建议,否则我会很感激一些帮助,以了解如何以 vagrant 用户身份从 vm(ubuntu linux)SSH 回到主机(OSX)。理想情况下,我希望它对流浪者的所有用户都一样。也许以某种方式使用转发代理?

也许有一种方法可以在来宾上操纵 VBoxService 以暂时禁用时间同步?

4

2 回答 2

2

我已经使用 ssh 在主机上运行 VBoxManage 命令解决了这个问题。

  1. 在 Vagrantfile 中启用 ssh 转发
    • 例如,config.ssh.forward_agent = true
  2. 让自己像自己一样对自己进行 ssh ;)
    • 也就是说,将自己的公钥复制到自己的 authorized_keys 文件中
    • 例如,$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 默认情况下将 VM 设置为 ssh(而不是 vagrant 用户)

    • 例如,通过 Vagrantfile 中的 shell 配置程序:

        require 'etc'
        username = Etc.getlogin
        config.vm.provision :shell, :inline => "echo \"Host *\n  User #{username}\" > /home/vagrant/.ssh/config"
      
  4. 像这样自由地 ssh 回主机:(主机的默认 NAT IP 是 10.0.2.2)

    $ ssh 10.0.2.2 'hostname'
    $ ssh 10.0.2.2 'VBoxManage setextradata <your vm name> \
      "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"'
    $ echo "GetHostTimeDisabled is now " && \
      ssh 10.0.2.2 'VBoxManage getextradata <your vm name> \
      "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled"'
    
于 2013-10-14T15:57:09.203 回答
0

我看到你找到了答案,但我想了一个不同的方法。

VirtualBox 有一个叫做“共享文件夹”的概念。这意味着您可以在主机上设置一个文件夹,该文件夹可用于挂载到客户机上,并且主机和客户机之间保持不变,这意味着您可以在客户机运行时共享数据。你甚至可以让它自动挂载,在这种情况下它将被挂载为/media/<folder>. 然后,您可以将其符号链接到您想要的任何位置。

就我的想法而言,您将从VBoxManage.exe主机放入共享文件夹,然后从您将其放入来宾的任何位置调用它,并可能将其放入您的 PATH 中。然后你会打电话

$ /path/to/VBoxManage setextradata <guest name> \
> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"

从你的脚本或其他什么。

我刚刚尝试过,但没有成功,但我有一种感觉,因为我的主机和来宾是不同的操作系统,分别是 Windows 和 Linux。我怀疑调用dos2unix可能VBoxManage.exe会起作用,但我不敢尝试它,因为它可能会破坏 VirtualBox。不过,它可能对你更有效。

于 2014-04-05T21:42:28.197 回答