У меня есть ящик FreeBSD Vagrant, который выглядит так:
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "chef/freebsd-10.0"
config.vm.network "private_network", ip: "10.0.1.10"
config.vm.synced_folder '.', '/vagrant', :nfs => true, id: "vagrant-root"
end
Однако, если он пытается запустить путь к каталогу со слишком длинным именем, он терпит неудачу:
==> default: Mounting NFS shared folders...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
mount -t nfs '10.0.1.1:/Users/petersouter/projects/reallylongpathnameover88characterssothatmountfswillfail12345678910111213141516' '/vagrant'
Stdout from the command:
Stderr from the command:
mount_nfs: 10.0.1.1:/Users/petersouter/projects/reallylongpathnameover88characterssothatmountfswillfail12345678910111213141516: File name too long
Есть ли способ решить эту проблему, кроме копирования каталога в каталог с более коротким именем? Могу ли я обновить материал FreeBSD, чтобы он мог принимать файлы большего размера?
FreeBSD ограничивает длину имен точек монтирования до 88 символов. Причины этого несколько эзотерические, но они связаны с выравниванием структуры памяти по границам страницы [1].
Вы можете исправить бинарный файл монтирования, чтобы использовать больший предел или удалить его все вместе [2], но это может вызвать сбои. Я успешно удалил проверку (также для vagrant с nfs), и она работала без проблем, но делайте это на свой страх и риск. Я не делал полный buildworld, а пересобирал только двоичный файл mount_nfs с патчем из второй ссылки.
В заключение я решил, что vagrant с nfs слишком глючит, и переключился на использование общих папок rsync.
[1] http://www.secnetix.de/olli/FreeBSD/mnamelen.hawk
[2] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=167105