Назад | Перейти на главную страницу

Ошибка разрешений общего доступа nfs хоста Vagrant OS X - не удалось установить владельца на '1000'

Я новичок в Vagrant и Puppet, я создал Base Box с Debian Squeeze плюс автономный Puppet, используя инструкции по установке Puppet с пакетами Puppetlabs.

Кажется, что сам ящик успешно импортируется, но как только я приступаю к его настройке, я получаю ошибки, которые, похоже, связаны с общим ресурсом nfs на хосте. 1000 - это uid пользователя Vagrant на vm.

Ошибка:

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

Это происходит, когда я копирую файл index.php в share / vagrant / www файловой системы хоста с помощью Puppet. Я использовал этот модуль Puppet при автономной установке Puppet на виртуальной машине, где файлы были размещены в файловой системе виртуальной машины, хотя в идеале я бы хотел, чтобы они находились в общей папке nfs.

Отредактировано с немного дополнительной информацией. Изначально ошибка возникает, когда я создаю виртуальный хост с помощью модуля apache puppetlabs. Однако, какой бы пользователь я ни пытался создать, он терпит неудачу с той же ошибкой.

Мой VagrantFile для этого выглядит следующим образом.

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

Он адаптирует параметры NFS в соответствии с ОС вашего хоста (OSX или Linux).

Ответ mbarthelemy помог мне на полпути, но, в конце концов, мне пришлось немного подправить:

В моем VagrantFile я добавил это в сопоставление, чтобы заставить его работать:

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

Это может быть вызвано "сжатием корня" на сервере NFS.

Когда пользователь root на клиентском компьютере NFS пытается манипулировать файлами в экспортированной файловой системе NFS, он делает это с разрешениями непривилегированного пользователя (обычно никто или nfsnobody). В этом случае, если я правильно читаю, возможно, Puppet (работающий от имени пользователя root) не может управлять файлами на сервере NFS, потому что его разрешения привязаны к этому непривилегированному пользователю.

Чтобы удалить корневое сжатие, отредактируйте / etc / exports на сервере NFS и добавьте no_root_squash к параметрам экспортированной файловой системы, затем запустите exportfs -av для повторного экспорта файловых систем.

Пример строки / etc / exports:

/srv   192.168.0.0/24 (rw,no_root_squash)