我有一个使用 archlinux/archlinux 的简单 Vagrantfile,并尝试访问连接到主机的 USB。当我vagrant up
这样做时,我收到如下错误:
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["showvminfo", "VAGRANT-ID",
"--machinereadable"]
Stderr:
如果我使用以下命令检查,vboxmanage showvminfo VAGRANT-ID --machinereadable
则会得到如下分段错误:
...
USBFilterManufacturer2=""
USBFilterProduct2=""
USBFilterRemote2=""
USBFilterSerialNumber2=""
[1] 9658 segmentation fault (core dumped) vboxmanage showvminfo
VAGRANT-ID --machinereadable
我在 Vagrantfile 中使用这些行尝试访问 USB。
vb.customize ["modifyvm", :id, "--usb", "on"]
vb.customize ["modifyvm", :id, "--usbehci", "on"]
vb.customize ['usbfilter', 'add', '0', '--target', :id, '--name',
'usb', '--vendorid', 'VENDOR-ID-HEX', '--productid', 'PRODUCT-ID-HEX']
我的主机操作系统是 Fedora 29,Virtualbox 版本是 6.0,Vagrant 2.2.3。
我尝试过的方法:
删除了 .vagrent 文件夹并执行 vagrant up,
添加
vagrant ALL=(ALL) NOPASSWD:ALL
Defaults:vagrant !requiretty
到 /etc/sudoers 文件
使用
vboxmanage usbfilter add 0 --taget VAGRANT-ID --name usb
--vendorid VENDOR-ID-HEX --productid PRODUCT-ID-HEX
(并且没有出现错误)。
先感谢您。
答案1
我找到了一个解决方案。
这不是 Vagrant 的问题,而是 Virtualbox 的问题。如你所见,
vboxmanage showvminfo <uuid>
导致段错误,在 Linux 上是可见的。在我的实验中,它在 Windows 命令行中不可见,但可能也可以在那里进行调试。
如果使用 Vagrant 来管理 Virtualbox 容器,它本质上就是一个大型的 ruby 脚本vboxmanage
。它可以vboxmanage
通过异常的退出代码检测到失败,但对其原因了解不多。
这个错误存在于vboxmanage
二进制文件中,而不是它所使用的某个内部 VirtualBox 库中。
这个问题可以在公共 VirtualBox 错误跟踪器中找到这里。
测试版本 128880 已实施修复,但尚未发布。在没有新版本发布之前,我们需要使用测试版本。
如果测试版本(作为内部开发版本)无法使用,可以选择仅从vboxmanage
中提取,并将其与最新稳定版本一起使用。对于我来说,此方案在 Windows 和 Linux 上均有效。
希望能够尽快发布。