ln: не удалось создать символическую ссылку: ошибка протокола (в Vagrant)

Я использую Laravel Homestead (Vagrant, Ubuntu). Мой хост-компьютер — Windows 10 с 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

В чем проблема? Это как-то связано с сопоставлением папок Homestead? Как я могу достичь своей цели?

(Мои /home/vagrant/Code/ и /home/vagrant/foo/ сопоставляются с отдельными дисками на моем компьютере с Windows.)

P.S. И прежде чем пытаться выполнить шаги, описанные выше, я даже удалил стандартную общедоступную символическую ссылку Homestead просто чтобы избежать других возможных осложнений.

П.П.С. Я также попытался добавить это внизу (выше последний end) моего Homestead Vagrantfile перед тем, как раскрутить коробку:

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

person Ryan    schedule 18.03.2020    source источник


Ответы (3)


Я заметил, что php artisan storage:link теперь также вызывает «ошибку протокола».

Поэтому, чтобы сузить проблему, я создал совершенно новый проект и коробку Homestead и попытался создать там символические ссылки (включая php artisan storage:link), но также получил «Ошибку протокола».

И я очень осторожно использовал Git Bash (мой клиент терминала / командной строки) в качестве администратора, поэтому я уже следовал советам большинства ответов на StackExchange.

Я также решил переместить одну из своих папок Windows (ту, что у меня была карта Homestead на /home/vagrant/foo/), чтобы она находилась в папке Windows, которую Homestead сопоставил с /home/vagrant/Code/.*

Я решил полностью перезапустить Windows 10. Теперь, после запуска новых бродячих ящиков, php artisan storage:link и создание моей другой символической ссылки заработало.

* Я не уверен, что перемещение папки Windows вообще было необходимо. Возможно, я мог бы оставить папки на отдельных дисках Windows. Но в то время я хотел свести к минимуму возможные осложнения.

person Ryan    schedule 18.03.2020

Ошибка иногда возвращается после выключения виртуальной машины и перезапуска или все еще сохраняется. По сути, вам нужно снова сказать VirtualBox, чтобы включить символические ссылки. Вот полное решение

Очевидно, имейте это в своем бродячем файле, как было предложено выше.

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

Я рекомендовал закомментировать любую папку синхронизации и позволить по умолчанию ./(на хосте) синхронизироваться в /vagrant(на госте). Это гарантирует, что имя вашей общей папки (Folder_Name) всегда будет vagrant, как указано здесь https://www.vagrantup.com/docs/synced-папки/. Кроме того, у вас не возникнет проблем с ssh.

Если ошибка протокола символической ссылки возвращается после перезапуска или все еще сохраняется, запустите

VBoxManage setextradata "VM_Name" VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name 1

vagrant halt
vagrant up

vagrant ssh

Обычно VBoxManagee находится в папке C:\Program Files\Oracle\VirtualBox\.

Проверьте работу символической ссылки, перейдя в /vagrant и запустив

touch test.txt && ln -s test.txt test1.txt

PS: я пробовал это на Windows Home, которая имеет ограниченный доступ к настройкам безопасности.

person Purnesh Dixit    schedule 20.05.2020

При использовании Homestead создание символической ссылки в общедоступном каталоге в Windows также создаст символическую ссылку на vagrant. Наоборот, может (!) создать эту ошибку и оставит неработающую символическую ссылку в вашем каталоге Windows.

person ekkev    schedule 11.04.2020