Варианты синхронизированной папки Vagrant

Каков наилучший метод для реализации Vagrant NFS "синхронизированных папок" между хостом и виртуальной машиной?

Я, наконец, смог заставить работать NFS, но для этого потребовалось несколько настроек внутри виртуальной машины; и я не уверен, как автоматизировать эти изменения для использования другими.

В частности, мне нужно изменить UID/GID в /etc/passwd и /etc/group, чтобы они соответствовали идентификатору пользователя / группы экспортируемой файловой системы. (например, хост-машина использует 502:20, пользователь VM Apache должен быть также настроен на использование 502: 20)

Без этого изменения у меня возникают всевозможные проблемы с правами доступа и правами собственности, которые мешают запуску веб-приложения. С соответствием UID/GID все работает отлично.

Я прочитал все документы, которые смог найти, включая веб-сайт Vagrant.

В качестве примечания: я также попытался синхронизировать собственные папки (мучительно медленно) и rsync (100% ЦП... не используется)

NFS выглядит как победитель по производительности, но мои настройки не очень хороши.

Если это имеет какое-то значение, я работаю со следующим:

  • Хост: OS X 10.9.2
  • Бродяга: 1.5.4
  • Провайдер: VMware Fusion
  • Коробка: шеф-повар / Centos-6,5
  • Приложение для разработчиков: Magento 1.8

2 ответа

В 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

bindfs

GitLab использовала bindfs до того, как он отказался от Vagrant как метода разработки.

Есть даже плагин Vagrant для этого по адресу: https://github.com/gael-ian/vagrant-bindfs

Соответствующие строки Vagrantfile, когда файл все еще был частью проекта:

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
Другие вопросы по тегам