web-dev-qa-db-ja.com

Vagrant OS XホストのNFS共有権限エラー-所有者を「1000」に設定できませんでした

私はVagrantとPuppetの初心者です。DebianSqueezeとスタンドアロンPuppetを使用してベースボックスを作成し、 Puppetlabsパッケージを使用してPuppetをインストールするための手順 を使用します。

ボックス自体は正常にインポートされているようですが、プロビジョニングを開始すると、ホスト上の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ファイルをホストファイルシステムの共有/ vagrant/wwwにコピーしたときに発生します。私はこのPuppetモジュールを、ファイルがvmのファイルシステムでホストされているvm上のPuppetのスタンドアロンインストールで使用しましたが、理想的には、nfs共有に配置したいと考えています。

もう少し情報を編集しました。 puppetlabs Apacheモジュールを使用してvhostを作成すると、最初にエラーが発生しました。ただし、どのユーザーがそれを作成して強制的に作成しても、同じエラーで失敗します。

このための私の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
6
rachelandrew

この権限の問題を取り除くために、ここに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

ホストOS(OSXまたはLinux)に応じてNFSオプションを適合させます。

3
mbarthelemy

これは、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)
2
Daniel Ramsay

mbarthelemyの回答で途中まで行きましたが、結局、もう少し微調整する必要がありました。

私のVagrantFileでは、これをマッピングに追加して機能させました。

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