ln: 未能创建符号 link: 协议错误(在 Vagrant 中)

ln: failed to create symbolic link: Protocol error (in Vagrant)

我正在使用 Laravel Homestead(Vagrant,Ubuntu)。我的主机是 Windows10 运行ning VirtualBox.

作为管理员(因为我已经看到很多答案都说缺乏权限通常是人们遇到符号链接问题的原因),我打开 Git Bash 和 运行 这个:

vagrant@vboxHomestead:~/Code/myproject$ ls -lah /home/vagrant/foo/blah
total 0
drwxrwxrwx 1 vagrant vagrant 0 Mar 17 23:09 .
drwxrwxrwx 1 vagrant vagrant 0 Mar 17 22:36 ..
-rwxrwxrwx 1 vagrant vagrant 0 Mar 17 23:09 asdf.txt
vagrant@vboxHomestead:~/Code/myproject$ sudo ln -s /home/vagrant/foo/blah /home/vagrant/Code/myproject/storage/app/public/blah
ln: failed to create symbolic link '/home/vagrant/Code/myproject/storage/app/public/blah': Protocol error

问题是什么?跟folder mappings of Homestead有关系吗? 我怎样才能实现我的目标?

(我的 /home/vagrant/Code//home/vagrant/foo/ 映射到我的 Windows 机器上的单独驱动器。)

P.S。在尝试上述步骤之前,我什至删除了 Homestead standard public symlink 以避免其他可能的并发症。

P.P.S。我还尝试在我的 Homestead Vagrantfile 的底部附近(在最后一个 end 之上)添加 this,然后再旋转盒子:

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end

我注意到 php artisan storage:link 现在也引起了 "Protocol error"。

因此,为了缩小问题范围,我创建了一个全新的 Homestead 项目和框,并尝试在其中创建符号链接(包括 php artisan storage:link),但也得到了 "Protocol error"。

而且我在使用 Git Bash(我的终端/命令行客户端)作为管理员时非常小心,所以我已经听从了 StackExchange 上大多数答案的建议。

我还决定将我的一个 Windows 文件夹(我将 Homestead 映射到 /home/vagrant/foo/ 的文件夹)移动到 Homestead 映射到的 Windows 文件夹中/home/vagrant/Code/.*

我决定完全重启Windows 10。现在,在启动新的 vagrant boxes 之后,php artisan storage:link 并创建了我的其他符号链接。

*我不确定是否有必要移动 Windows 文件夹。也许我可以将文件夹留在单独的 Windows 驱动器上。但当时,我想尽量减少可能出现的并发症。

使用 Homestead 时,在 Windows 中的 public 目录中创建符号链接也会在 vagrant 上创建符号链接。反过来可能(!)会产生这个错误,并会在你的 Windows 目录中留下一个无效的符号链接。

有时 return 在关闭 VM 并重新启动后错误仍然存​​在。基本上你需要再次告诉 VirtualBox 启用符号链接。这是完整的解决方案

显然按照上面的建议在你的 vagrant 文件中包含这个

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name", "1"]
end

我建议注释掉任何同步文件夹并让默认的 ./(at host) 同步到 /vagrant(at guest)。这将确保您的 共享文件夹(Folder_Name) 名称始终是 vagrant,如此处 https://www.vagrantup.com/docs/synced-folders/ 所述。此外,您不会遇到 ssh

问题

如果符号链接协议错误 returns 重启后或仍然存在 运行

VBoxManage setextradata "VM_Name" VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name 1

vagrant halt
vagrant up

vagrant ssh

通常,VBoxManagee 位于 C:\Program Files\Oracle\VirtualBox\

通过转至 /vagrant 和 运行ning

验证符号链接的工作
touch test.txt && ln -s test.txt test1.txt

PS:我已经在 Windows 主页上试过了,它对安全设置的访问受限