Я хочу использовать Vagrant, чтобы предоставить моей команде общую среду разработки. Хозяева совершенно разные:
- Некоторые используют OS X, некоторые Linux и некоторые Windows.
- Некоторые используют VMware, некоторые - VirtualBox.
Внутри виртуальной машины мы хотим запустить Linux.
Пока все нормально.
Теперь наша идея заключалась в том, что каждый разработчик должен иметь возможность использовать IDE по своему выбору, и поэтому мы ввели синхронизированную папку, которая разделяет исходный код между хостом и виртуальной машиной. По сути, это тоже работает… за исключением символических ссылок.
Внутри нашего исходного кода у нас действительно есть несколько символических ссылок, что не является проблемой для Linux внутри виртуальной машины, но для Windows как хоста это вызывает проблемы. Единственное, что мы не можем сделать, это избавиться от символических ссылок, поэтому нам нужен другой способ справиться с этим.
Пока что мы испробовали несколько вариантов:
- В выпуске Vagrant упоминается обходной путь , к сожалению, он предназначен только для VirtualBox и не помогает тем, кто использует VMware. До сих пор мы не нашли способ запуска кода в Vagrantfile в зависимости от используемого провайдера.
- Вместо использования стандартной общей папки мы попробовали использовать тип rsync . Это работает в Windows, но вылетает в OS X с рядом ошибок, сообщающих нам, что
symlink has no referent
(одна ошибка на символическую ссылку). - Мы думали о NFS , но это работает, только если вы не используете Windows в качестве хоста.
- Мы также думаем о SMB , но это снова работает только в Windows в качестве хоста.
Я не могу представить, чтобы мы были единственными или первыми людьми на этой планете, у которых возникли проблемы с мультиплатформенными хостами и символическими ссылками в общей папке.
Как вы можете решить эту проблему, чтобы мы могли сохранить символические ссылки, но при этом использовать разные операционные системы хоста?
источник
Ответы:
Virtualbox не позволяет использовать символические ссылки в общих папках по соображениям безопасности. Чтобы включить символические ссылки, необходимо добавить следующую строку в блок конфигурации поставщика vm в Vagrantfile:
Кроме того, в Windows vagrant up должен выполняться в оболочке с правами администратора. Никаких обходных путей не требуется.
источник
vagrant up
Все, что требуется - запустить в оболочке с правами администратора. Как отметил @jdunk, этот параметр конфигурации уже установлен по умолчанию в Vagrant, поскольку этот коммит произошел почти за год до публикации этого ответа. Тем не менее, запускvagrant up
в оболочке с правами администратора решил мою проблему.Принятый ответ не годится. Вопрос описывает проблему с синхронизированными папками, а не с общими папками. Предлагаемое решение не повлияет на синхронизированную ( не общую ) папку. И даже если OP использовал общую папку, предложение принятого ответа - это то, что уже было интегрировано в vagrant с версии 1.1, выпущенное за 15 месяцев до того, как OP опубликовал вопрос (не говоря уже о том, что общие папки VirtualBox ужасно медленные ).
Я столкнулся с той же проблемой: в OS X я получил
symlink has no referent
ошибку rsync. Я лично смог решить эту проблему, добавив определенные аргументы rsync в моиvagrantfile
:Я также открыл эту проблему в github vagrant, чтобы указать на что-то, что кажется неправильным с их значением по умолчанию для
rsync__args
(в частности, что один из аргументов по умолчанию--copy-links
, похоже, нарушает другой--archive
, по крайней мере, что касается копирования сломанных символических ссылок. ).источник
--copy-links
параметр установлен по умолчанию. Это была моя проблема. Удалив это (используя ваш ответ выше) - это позаботится об этом.Я перепробовал все эти варианты, чтобы устранить ошибку при запуске
npm install
.Просто запустив vagrant в командной строке администратора и загрузив vm (
vagrant reload
), проблема решена.Я вернулся и удалил
SharedFoldersEnableSymlinksCreate
конфигурацию из Vagrantfile, и все было по-прежнему в порядке.источник
npm update
не работал в моей бродячей общей папке. Это решение по какой-то причине исправило это.Тип синхронизируемой папки по умолчанию
vboxsf
имеет известную проблему производительности с большим количеством файлов / каталогов и не поддерживает символические ссылки и жесткие ссылки (см. Билет 818 - ошибка 7+ летней давности). Избегайте его использования.Синхронизируемая папка типа rsync может быть вашим лучшим выбором.
Вы упомянули, что произошел сбой, какая версия rsync у вас установлена? Попробуйте обновить его до 3.1.0 через brew, я знаю, что OOTB слишком старый (2.x), что может вызывать проблемы.
источник
[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
sudo mount -t rsync shared /var/www
ошибкуmount: unknown filesystem type 'rsync'
rsync
никогда не является типом файловой системы, поэтому вы не сможете его смонтировать.Vagrantfile
и вручную запуститьvagrant rsync
илиvagrant rsync-auto
. В противном случае он будет синхронизироваться только при включении и перезагрузке.После часа возни и попытки попробовать несколько разных решений (
vagrant-vbguest
исправление, предложенное Марвином) я не смог получить символические ссылки в общих папках для работы с VirtualBox 4.8.10, Vagrant 1.5.1.Я обнаружил, что более простым решением является настройка отдельной общей папки, а затем использование Ruby
File.readlink
для чтения по базовому пути:источник
Добавьте в Vagrantfile следующую строку:
Это сработало для меня ТОЛЬКО после того, как я понизил виртуальный бокс с 6.0.8 до 6.0.4 и vagrant 2.2.4 до 2.2.1.
когда вы открываете терминал (я использую git bash в Windows 10) с помощью «Запуск от имени администратора».
также попробуйте изменить git bash: в файле проекта: $ vim. git / config изменить на символические ссылки = true
источник