Vagrant同步文件夹选项

时间:2014-05-22 05:31:46

标签: vagrant nfs vmware-fusion vagrantfile

实施Vagrant NFS"同步文件夹的最佳方法是什么?#34;主机和VM之间?

总的来说,我终于能够让NFS工作了,但它需要在VM中进行一些调整;并且我不确定如何自动化这些更改以供其他人使用。

具体来说,我必须修改/ etc / passwd和/ etc / group中的UID / GID以匹配导出文件系统的用户/组的UID / GID。 (例如,主机使用502:20,VM apache用户也必须设置为使用502:20)

如果没有此更改,我会遇到阻止Web应用运行的各种权限/所有权问题。通过UID / GID匹配,一切都很好。

我已经阅读了所有可以找到的文档,包括Vagrant网站。

作为旁注:我也尝试过原生文件夹同步(痛苦地慢)和rsync(100%CPU ......无法使用)

NFS似乎是性能的赢家,但我的设置很粗略。

如果有任何不同,我正在使用以下内容:

  • 主持人:OS X 10.9.2
  • Vagrant:1.5.4
  • 提供商:VMware Fusion
  • Box:chef / centos-6.5
  • 开发应用程序:Magento 1.8

2 个答案:

答案 0 :(得分:12)

在Vagrantfile中,您可以将当前的uid / gid分配给nfs映射。 (在配置后查看主机/ etc / exports。)

 config.nfs.map_uid = Process.uid   
 config.nfs.map_gid = Process.gid 

使用Puppet作为配置程序,您可以解决这些值:

 config.vm.provision :puppet, :facter => { 
     "host_uid" => config.nfs.map_uid, 
     "host_gid" => config.nfs.map_gid, 
 } do |puppet| ...

所以你可以在诸如变量之类的木偶范围内使用它。

user { "www-data":
    ensure => present,
    uid => $::host_uid,
    gid => $::host_gid,
}

我认为在厨师中,自定义json选项相当于稍后在厨师食谱中使用

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
        # ...

        chef.json = {
          "map" => {
            "uid" => config.nfs.map_uid,
            "gid" => config.nfs.map_gid
          }
        }
      end
    end

答案 1 :(得分:5)

<强> bindfs

GitLab在将Vagrant作为开发方法弃用之前正在使用bindfs

https://github.com/gael-ian/vagrant-bindfs

中甚至还有一个Vagrant插件

相关的Vagrantfile行when the file was still part of the project

config.vm.synced_folder ".", "/vagrant", :disabled => true
config.vm.synced_folder "./home_git", "/git-nfs", :nfs => true
config.bindfs.bind_folder "/git-nfs", "/home/git", :owner => "1111", :group => "1111", :'create-as-user' => true, :perms => "u=rwx:g=rwx:o=rwx", :'create-with-perms' => "u=rwx:g=rwx:o=rwx", :'chown-ignore' => true, :'chgrp-ignore' => true, :'chmod-ignore' => true