我需要在vagrant / virtualbox vm上有选择地禁用主机时间同步。我可以在主机上没有问题就这样做:
$ VBoxManage setextradata <name> \
> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"
问题是我只需要在guest虚拟机vm中完成一些工作时禁用同步。具体来说,单元测试作业需要能够以编程方式切换GetHostTimeDisabled
值,从而有效地完全控制测试作业的vm系统时间。
我考虑过在单元测试作业中通过ssh运行VBoxManage命令,但这会带来额外的困难。比如,例如,设置无密码登录到我的本地计算机作为vagrant用户。
我为vm启用了ssh代理转发功能,并且已确认正常工作。除非有人提出“更好”的建议,否则我会感谢一些帮助,想知道如何从vm(ubuntu linux)作为流浪者用户回到主机(OSX)。理想情况下,我希望它对流浪者的所有用户都一样。也许以某种方式使用转发的代理?
也许有办法在guest虚拟机上操作VBoxService来暂时禁用时间同步?
答案 0 :(得分:2)
我已经使用ssh在主机上运行VBoxManage命令解决了这个问题。
config.ssh.forward_agent = true
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
默认情况下将VM设置为ssh(而不是流浪者用户)
,例如,通过Vagrantfile中的shell配置程序:
require 'etc'
username = Etc.getlogin
config.vm.provision :shell, :inline => "echo \"Host *\n User #{username}\" > /home/vagrant/.ssh/config"
像这样自由地回到主机:(主机的默认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"'
答案 1 :(得分:0)
我看到你找到了答案,但我想到了另一种方式。
VirtualBox有一个名为“共享文件夹”的概念。这意味着您可以在主机上设置一个文件夹,该文件夹可以在客户机上安装,并且在主机和主机之间保持不变。 guest,意味着您可以在guest虚拟机运行时共享数据。您甚至可以自动安装它,在这种情况下它将作为/media/<folder>
安装。然后,您可以将其符号链接到您想要的任何位置。
根据我的想法,您可以将VBoxManage.exe
放入主机的共享文件夹中,然后从将其放入guest虚拟机的任何位置调用它,并可能将其放入PATH中。然后你打电话
$ /path/to/VBoxManage setextradata <guest name> \
> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"
来自您的脚本或其他任何内容。
我刚试过这个,但它没有用,但我有一种感觉,那是因为我的主持人&amp;客人是不同的操作系统,特别是Windows&amp; Linux,分别。我怀疑在dos2unix
上调用VBoxManage.exe
可能会有效,但我不敢尝试,因为它可能会破坏VirtualBox。不过,它可能对你有用。