Vagrant OS X主机nfs共享权限错误 – 未能将所有者设置为“1000”

我是stream浪汉和木偶新手,我创build了一个Debian Squeeze加独立木偶的基本框,使用这里的说明来安装Puppet以及Puppetlabs软件包 。

该框本身似乎成功导入,但一旦我开始configuration它,我得到的错误似乎是与主机上的NFS共享。 1000是vm上的Vagrant用户的uid。

错误:

Error: Failed to set owner to '1000': Operation not permitted - /vagrant/www/index.php Error: /Stage[main]/Perchdemo::Sites::Create/File[/vagrant/www/index.php]/owner: change from 501 to vagrant failed: Failed to set owner to '1000': Operation not permitted - /vagrant/www/index.php 

这发生在我使用Puppet将index.php文件复制到主机文件系统上的share / vagrant / www时。 我已经使用这个Puppet模块在一个独立安装的虚拟机上的文件被托pipe在虚拟机的文件系统上,理想情况下,但我希望他们在虚拟机共享上。

用更多的信息编辑。 当我使用puppetlabs apache模块创build虚拟主机时,最初发生了错误。 不pipe哪个用户我尝试强制创build,都会失败,并出现相同的错误。

我的stream浪文件如下。

 Vagrant::Config.run do |config| config.vm.box = "squeeze64" config.vm.network :hostonly, "10.1.0.52" config.nfs.map_uid = :auto config.nfs.map_gid = :auto config.vm.forward_port 80, 8080 config.vm.share_folder("v-web", "/vagrant/www", "./www", :nfs => true) config.vm.provision :shell, :inline => "echo \"Europe/London\" | sudo tee /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata" config.vm.provision :shell, :inline => "apt-get update --fix-missing" config.vm.provision :shell, :inline => "apt-get upgrade" config.vm.provision :puppet do |puppet| puppet.facter = { "fqdn" => "perchtutorial.eoms"} puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "perchtutorial.pp" puppet.module_path = "puppet/modules" end end 

为了摆脱这个权限问题,这里是我添加到我的Vagrantfile

 if (/darwin/ =~ RUBY_PLATFORM) != nil config.vm.synced_folder ".", "/host/path/to/shared/folder", nfs: true, :bsd__nfs_options => ["-maproot=0:0"] else config.vm.synced_folder ".", "/host/path/to/shared/folder", nfs: true, :linux__nfs_options => ["no_root_squash"] end 

它将根据您的主机操作系统(OSX或Linux)调整NFS选项。

这可能是由NFS服务器上的“根压缩”造成的。

当NFS客户端计算机上的root用户尝试操作导出的NFS文件系统上的文件时,它使用非特权用户(通常是nobody或nfsnobody)的权限执行此操作。 在这种情况下,如果我正确读取,可能是Puppet(以root身份运行)无法操作NFS服务器上的文件,因为它的权限被映射到这个非特权用户。

要删除根压缩,请编辑NFS服务器上的/ etc / exports,并将no_root_squash添加到导出文件系统的选项中,然后运行exportfs -av来重新导出文件系统。

例如/ etc / exports行:

 /srv 192.168.0.0/24 (rw,no_root_squash) 

mbarthelemy的答案让我在那里一半,但最后,我不得不稍微调整一下:

在我的VagrantFile中,我将它添加到映射中以使其工作:

 :linux__nfs_options => ["no_root_squash"], :map_uid => 0, :map_gid => 0