Erro de permissões de compartilhamento do host NFS do Vagrant OS X - Falha ao definir o proprietário para '1000'

6

Eu sou um novato Vagrant and Puppet, eu criei uma Base Box com o Debian Squeeze mais Puppet autônomo, usando o instruções para instalar o Puppet com os pacotes Puppetlabs .

A caixa em si parece ser importada com sucesso, mas assim que obtenho o provisionamento, recebo erros que parecem estar relacionados ao compartilhamento nfs no host. 1000 é o uid do usuário do Vagrant na vm.

Erro:

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

Isso ocorre quando eu copio o arquivo index.php para o share / vagrant / www no sistema de arquivos do host usando o Puppet. Eu usei este módulo Puppet em uma instalação autônoma de Puppet em um vm onde os arquivos foram hospedados no sistema de arquivos da vm, idealmente, eu gostaria que eles estivessem no compartilhamento nfs.

Editado com um pouco mais de informação. Ter um puxão em torno do erro inicialmente ocorre quando eu crio o vhost usando o módulo apache puppetlabs. No entanto, qualquer que seja o usuário que eu tente e force isso para criar, ele falha com o mesmo erro.

Meu VagrantFile para isso é o seguinte.

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
    
por rachelandrew 14.03.2013 / 17:52

3 respostas

3

Para se livrar desse problema de permissões, aqui está o que eu adicionei ao meu 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

Ele irá adaptar as opções do NFS de acordo com seu sistema operacional host (OSX ou Linux).

    
por 03.01.2014 / 14:23
2

Isso pode ser causado por "squashing raiz" no servidor NFS.

Quando o usuário root em uma máquina cliente NFS tenta manipular arquivos em um sistema de arquivos NFS exportado, ele o faz com as permissões de um usuário não privilegiado (geralmente nobody ou nfsnobody). Neste caso, se eu estiver lendo corretamente, pode ser que o Puppet (rodando como root) não possa manipular arquivos no servidor NFS porque suas permissões estão sendo mapeadas para este usuário não privilegiado.

Para remover o squashing raiz, edite / etc / exports no servidor NFS e adicione no_root_squash às opções para o sistema de arquivos exportado, então execute exportfs -av para reexportar os sistemas de arquivos.

Exemplo de linha / etc / exports:

/srv   192.168.0.0/24 (rw,no_root_squash)
    
por 15.03.2013 / 14:50
1

resposta mbarthelemy me pegou no meio do caminho, mas no final, eu tive que ajustar um pouco mais:

No meu VagrantFile, adicionei isso ao mapeamento para que ele funcionasse:

:linux__nfs_options => ["no_root_squash"], :map_uid => 0, :map_gid => 0
    
por 10.07.2014 / 14:54