我有一个看起来像这样的 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],但这可能会导致崩溃。我已经成功地删除了检查(也适用于带有 nfs 的 vagrant)并且它可以正常工作,但这样做需要您自担风险。我没有做一个完整的构建世界,而是只用第二个链接的补丁重建了 mount_nfs 二进制文件。
作为最后一点,我最终决定使用 nfs 的 vagrant 错误太多,并改用 rsync 共享文件夹。
[1] http://www.secnetix.de/olli/FreeBSD/mnamelen.hawk
[2] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=167105