LoginSignup
2
2

More than 5 years have passed since last update.

Vagrant の Synced Folder に NFS をつかったディレクトリでは chown できない

Posted at

背景

ホストとゲストで共有したいディレクトリがあって、NFSが気持ち速いらしい。こうしてみたらトラブった。

config.vm.synced_folder "../", "/share", type: "nfs"

vagrantからAnsible provisionerでセットアップしてて、mkdir, chown, chmodしてる箇所があって、

- name: create document root
  file: path=/share state=directory owner=vagrant group=vagrant mode=0775

このようにコケていました。

TASK [apache : create document root] *******************************************
fatal: [default]: FAILED! => {"changed": false, "gid": 20, "group": "games", "mode": "0755", "msg": "chown failed: [Errno 1] Operation not permitted: '/share'", "owner": "501", "path": "/share", "secontext": "system_u:object_r:nfs_t:s0", "size": 416, "state": "directory", "uid": 501}

最初はVagrantfileをいじくり回していましたが、ゲストOS内に入ってみたりするうちに、違うとわかりました。

結論

ゲストOS内から、NFS共有したディレクトリに対して、chown操作ができない。chmodはできる。

[vagrant@hoge /]$ ll
total 102
(略)
drwxr-xr-x   28     501 games     896 Oct  9 13:20 share
(略)
[vagrant@hoge /]$ sudo chown vagrant:vagrant /share
chown: changing ownership of `/share': Operation not permitted
[vagrant@hoge /]$ sudo chmod 777 /share
[vagrant@hoge /]$ ll /
total 102
(略)
drwxrwxrwx   28     501 games     896 Oct  9 13:20 share
(略)
[vagrant@hoge /]$

NFS共有において、ゲストOS内からchownする必要があるかというと、必要ない。なぜならVirtualBoxのSynced Folder側が、ゲストOS内の誰で触ろうとも、map_uid, map_gid に変換してホストOSに読み書き操作するから。

他にハマったところ

マニュアル読む

ググっても古い断片的な情報しかない。公式マニュアルが正義のはずだっ。

vagrant sshして挙動を観察する

ホストOSとVagrantfileからのアプローチが手詰まってきた頃合いで、ゲストOSからも見る。

map_uid, map_gid

This defaults to the current user running Vagrant.

とあるので、

config.nfs.map_uid = 502
config.nfs.map_gid = 20

は書かなくてよい。むしろ、ホスト側のuidは501だったり503かもしれず、gidもmacのバージョンによって違うかもしれず、git cloneしてから手作業でVagrantfileをイジるようなことになりかねないので、削るべき。

ホストOSの /etc/exports

まずはVagrantfileには何も書かず、自動生成に任せるのが正解に思いました。自動生成でトラブった場合に、うまく動くよう明記するのが疲れないのでは。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2