如何使用Hyper-V启动Vagrant Homestead

5
我无法按照https://laravel.com/docs/5.7/homestead上提供的指南,在Hyper-V上启动homestead。最初的问题是虚拟机无法启动,只会无限挂起。在解决了这个问题后,我遇到了另外两个问题,直到成功完成vagrant up命令。
我不确定是否应该在此发布此内容,但我已经花费了大约两周的时间来尝试解决此问题,希望如果其他人遇到类似问题时,我能够为他们节省一些时间。我能够使用virtual-box使用homestead,但是没有Hyper-V运行在我的PC上,这非常不方便,因此我卸载了virtual-box并尝试使用Hyper-V设置homestead。对我来说,虚拟机根本无法引导。当我在Hyper-V管理器中查看时,它只是在启动时被挂起。这实际上是因为它被设置为第1代盒子,并且驱动器连接为IDE。对我来说,解决方案是创建一个新的第2代VM,并使用SCSI连接提供的驱动器。然后我禁用了安全启动,就可以引导了。然后,在执行配置脚本期间,它在尝试挂载默认vagrant共享时失败了。我无法弄清楚如何修改此调用,因此最终禁用了它,因为在homestead中似乎不需要它。然后,我的第三个问题是无法挂载homestead.yaml文件中定义的任何用户定义的共享。对此进行了一些搜索,发现我需要使用没有其他参数的调用来执行此操作,但脚本似乎没有提供这个选项。我修改了脚本,vagrant up命令成功完成。下面是我采取的步骤的详细信息。如果有更简单的方法可以使用Hyper-V运行Vagrant Homestead,则希望得到建议。

问题1:无法引导

描述:问题似乎是它尝试使用IDE控制器作为第1代引导。这似乎对我的Windows 10 Pro安装不起作用。

解决方案:

1. Created a new VM using Generation 2 and attached the existing 
       "ubuntu-18.04-amd64.vhdx" to it using SCSI.

2. Boot this VM and then shutdown. 

3. Turn off secure boot

4. Replace the Virtual machine files in [VagrantInstallFolder]\boxes\laravel-VAGRANTSLASH-homestead\6.4.0\hyperv with the new ones created above.

5. Delete newly created box from HyperV

问题2:无法挂载默认的Vagrant共享文件夹

错误信息: ==> homestead-7: 虚拟机已启动并准备就绪! 未提供有效的ID以修剪NFS同步文件夹实现。这是Vagrant的内部错误,应该报告一个问题。

描述:在尝试挂载默认的Vagrant共享文件夹时,vagrant up命令失败。我找不到覆盖此调用参数的方法,因此它始终尝试使用不支持Windows的nfs进行调用。如果可以覆盖此调用设置,则这将是首选方式。但我想到的唯一一种让配置脚本继续执行的方法是禁用此共享文件夹。

解决方案:

1. Modify the scripts\homestead.rb file and add the code below to the
 Hyper V config settings section "Configure A Few Hyper-V Settings". This
 will disable the default file share but you can still add your own from
 the homestead.yaml file after completion of issue 3.

#Disable the default Vagrant file share
config.vm.synced_folder ".", "/vagrant", disabled: true

问题3:在homestead.yaml文件中定义用户共享仍然出现错误。
错误信息:
Linux guest中的文件夹挂载失败。通常是因为“vboxsf”文件系统不可用。请验证客户机中是否正确安装了增强功能并且可以正常工作。尝试的命令是:
mount -t cifs -o vers=3,credentials=/etc/smb_creds_vgt-96269f65d23acb279735d26264428995-66f0bd5cbca4d218f5f0b8a5f1712727,uid=1000,gid=1000,nolock,udp,noatime //192.168.1.107/vgt-96269f65d23acb279735d26264428995-66f0bd5cbca4d218f5f0b8a5f1712727 /home/vagrant/code 上一个命令的错误输出是:
mount error(22): Invalid argument Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
描述:vagrant up命令在尝试挂载homestead.yaml文件中定义的用户共享时失败。似乎将不需要的参数传递给mount命令。我们需要在scripts\homestead.rb文件中覆盖挂载调用,以使用无参数。
解决方案:
1. In the "Register All Of The Configured Shared Folders" section replace the line below. 

    Replace 
    config.vm.synced_folder folder['map'], folder['to'], type: folder['type'] ||= nil, **options

    With
    config.vm.synced_folder folder['map'], folder['to'], type: "smb"

2. Then run "vagrant up --provider hyperv"
2个回答

2
安装了哪些 Vagrant 插件(vagrant plugin list)?
我遇到了以下错误:
“未提供有效的 ID 以剪枝 NFS 同步文件夹实现。这是 Vagrant 的内部错误,应该提交问题。”
之前,我一直在使用 NFS,并安装了以下插件:https://github.com/winnfsd/vagrant-winnfsd
通过 vagrant plugin uninstall vagrant-winnfsd 移除插件后,配置工作正常进行。

0

我在Windows 11上遇到了同样的问题,找到了一些可能会对你有帮助的东西。

  • 在Windows上打开Hyper-V Manager
  • 你会发现通过vagrant up命令创建的虚拟机
  • 从管理器中运行它并登录到Ubuntu VM
  • 再次在项目文件夹内尝试vagrant up命令
  • 现在应该可以工作了!

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接