例えばVagrantfileに以下のように設定します。
config.vm.synced_folder ".", "/var/www/www-develop.skyarch.net", type: "nfs" config.nfs.map_uid = ENV['MAC_CURRENT_USER_ID'] config.nfs.map_gid = ENV['MAC_CURRENT_USER_ID']
上記の"ENV['MAC_CURRENT_USER_ID']"はMacのユーザーIDを設定します。
※Macの現在のユーザIDは
以下のページの"ユーザアカウントのフルネームを変更する"の
"macOS Sierra、El Capitan、Yosemite"の手順1~3で確認できます。
macOS のユーザアカウントやホームフォルダの名前を変更する - Apple サポート
このオプションを指定しないでNFS共有を行っていると、
VM側のapache, nginx等のユーザーが
Mac側の共有ディレクトリーにキャッシュを作成しようとした場合など
権限の問題で動作しない等の問題が発生しますが、
このオプションを設定することで回避できます。
↓こちらの説明からはやや解りにくいですが、
NFS - Synced Folders - Vagrant by HashiCorp
"config.nfs.map_uid", "config.nfs.map_gid"を指定すると
「VM側のあらゆるユーザーが共有ファイルに対してアクセスした」とき、
Vagrantが自動的に、
「Mac側において指定したユーザーがアクセスした」ものとして
処理を行ってくれるようです。
以下、NFSに関する基礎知識です。
NFSサーバー・クライアント間における所有者・グループのマッピング
Vagrantの場合、Mac側がNFSサーバー、VirtualBox側がNFSクライアントとなります。
NFSサーバー(Mac)がNFSクライアント(VM)にファイルを晒す形となります。
その際、何も設定をしないと、NFSクライアント(VM)側で見るファイルの所有者・グループは
NFSサーバー(Mac)側で見るファイルの所有者・グループのIDと同じ
NFSクライアント(VM)側の所有者・グループとなります。
(対応するユーザーが存在しない場合は所有者・グループが番号として表示されます。)
Ex: Macのユーザー"shinoda"のユーザーIDが"501"とすると
# Mac側 ls -la drwx------. 4 shinoda shinoda 4096 Feb 10 10:28 . drwxr-xr-x. 6 shinoda shinoda 4096 Feb 9 22:07 .. drwx------. 3 shinoda shinoda 4096 Feb 7 22:52 test.txt # VM側 ls -la drwx------. 4 501 501 4096 Feb 10 10:28 . drwxr-xr-x. 6 501 501 4096 Feb 9 22:07 .. drwx------. 3 501 501 4096 Feb 7 22:52 test.txt
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?