Vagrant Up и раздражающий запрос пароля NFS

18

Извините за языковые ошибки, которые я сделал. Я пытаюсь запретить vagrant спрашивать пароль при монтировании общих папок по NFS:

 [server] Exporting NFS shared folders...
 Preparing to edit /etc/exports. Administrator privileges will be required...
 [sudo] password for timur: #!!!

У меня есть много онлайн-ресурсов, таких как github и посты других авторов, но у меня ничего не работает ...

Я попробовал инструкции были найдены здесь . У меня нет глубоких рабочих знаний. Так кто-нибудь может дать правильное решение для моей проблемы?

Тимур Файзрахманов
источник
Могу ли я просить принять принятый ответ сейчас, когда он был рассмотрен в документах Vagrant?
Тайтай
Прежде всего вам необходимо проверить, nfs-serverустановлен ли сервис на вашем компьютере.
Гамбит

Ответы:

32

Официальные документы Vagrant теперь охватывают это: https://www.vagrantup.com/docs/synced-folders/nfs.html#root-privilege-requirement

Вам необходимо добавить записи в /etc/sudoersфайл и способ редактирования, который заключается в том, чтобы напечатать это в терминале:sudo visudo

Введите свой пароль, и вы редактируете файл. Вы можете вставить эти строки ниже (в зависимости от того, используете ли вы Vagrant в OS X или Linux.

Если вы не знакомы с vim , в котором он открывается, эта страница помогла . В основном, скопируйте соответствующий блок текста ниже. Затем в visudo перейдите к месту, куда вы хотите вставить текст в файл (конец файла в порядке), и нажмите «i», чтобы перейти в режим вставки. CMD + V, чтобы вставить свой текст. Затем нажмите ESC, затем введите, :wчтобы сохранить изменения и затем :qвыйти.

Начиная с версии 1.7.3 , файл sudoers в OS X должен иметь следующие записи:

Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE

И в Linux должны быть такие записи:

Cmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/chown 0\:0 /tmp/*
Cmnd_Alias VAGRANT_EXPORTS_MV = /bin/mv -f /tmp/* /etc/exports
Cmnd_Alias VAGRANT_NFSD_CHECK = /etc/init.d/nfs-kernel-server status
Cmnd_Alias VAGRANT_NFSD_START = /etc/init.d/nfs-kernel-server start
Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar
%sudo ALL=(root) NOPASSWD: VAGRANT_EXPORTS_CHOWN, VAGRANT_EXPORTS_MV, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY

Обратите внимание, что они переходят с одной версии Vagrant на другую, поэтому приведенное выше может быть устаревшим. Важно то, что документы теперь покрывают это.

Тайтай
источник
Странно, но это не работает для меня, хотя /var/log/auth.logсодержит только команды, перечисленные там, и я могу вручную проверить, работают ли разрешения sudo.
Tgr
1
Вместо того, чтобы редактировать основной файл sudoers, я рекомендую добавить его в качестве нового файла, /etc/sudoers.dчтобы избежать будущих конфликтов при обновлении ОС. На Ubuntu: sudo visudo -f /etc/sudoers.d/vagrant-nfsили OSX:sudo visudo -f /private/etc/sudoers.d/vagrant-nfs
Эмиль
1
Это помогло, спасибо! Просто быстрый комментарий к вашему совету обойти редактор vim : просто откройте visudo с помощью sudo EDITOR=nano visudoкоманды, которая позволяет полностью обойти vim .
Петр
2

Точные команды могут меняться между версиями Vagrant, поэтому невозможно перечислить те, которые будут работать всегда.

Во всяком случае, правила sudoers в этой сущности должны быть еще довольно близки. Проверьте /var/log/auth.log, если он показывает фактические команды для вашей версии Vagrant и адаптируйте правила соответственно.

tmatilai
источник
Спасибо, но я давно попробовал это решение - оно не работает для меня.
Тимур Файзрахманов
2

Для тех, кто делает это для OSX (я на MacOS Sierra версии 10.12.6), у меня были трудности с разрешениями даже после добавления этих строк. Этот пост действительно помог:

https://github.com/cogitatio/vagrant-hostsupdater/issues/50

В основном это тот факт, что у вас нет прав доступа к этой папке самостоятельно. Итак, вам нужно запустить:

sudo chmod +a "$USER allow write,append" /etc/hosts
Рубен Аревало
источник
1

добавив , nfs_export: falseв конце config.vm.synced_folderстроки в Vagrantfile, решил это за меня.

Если у вас уже есть работающий nfs-config, и вам не нужен Vagrant для его перезаписи при каждом запуске, вы можете просто отключить запись в файл экспорта.

Это также решает проблему коллизий, если у вас есть более одного Vagrant, пытающегося получить доступ к одной и той же папке, как, например, 2 практически идентичных Vagrant, один с php 5.6 и один с php 7.2.

Puggan Se
источник
0

TL & DR: добавьте следующую папку override.vm.synced_folder ".", "/ Vagrant", отключено: true

Рационально: по умолчанию Vagrant пытается обнаружить любые папки NFS / SMB. Хотя я могу понять, почему разработчики добавили эту функцию, для моего варианта использования это очень раздражает. Решение состоит в том, чтобы просто отключить синхронизацию папок NFS.

Это можно сделать, переопределив параметр папки синхронизированной виртуальной машины. Я приложил следующую конфигурацию для цифрового океана для вашего рассмотрения, чтобы вы могли увидеть всю конфигурацию.

 config.vm.define "droplet1" do |config|
 config.vm.provider :digital_ocean do |provider, override|
    override.vm.synced_folder ".", "/vagrant", disabled: true
        override.ssh.private_key_path = '~/.ssh/id_rsa'
        override.vm.box = 'digital_ocean'=
        override.vm.box_url = "https://github.com/devopsgroup-io/vagrant- 
 digitalocean/raw/master/box/digital_ocean.box"
    override.nfs.functional = false
            provider.image = 'ubuntu-14-04-x64'
            provider.region = 'nyc1'
            provider.size = '512mb'
       end
      end
    end
FlyingV
источник
Должен любить людей "TL & DR"! Приветствия.
Луис Миланезе
1
Благодарность! Не забудьте поднять голос;)
FlyingV
Из-за твоего "TL & DR" ты заслуживаешь всех голосов, которые только можешь получить, но правда в том, что твой ответ не помог мне. Не потому, что это не хорошо, но проблема, с которой я столкнулся, немного отличалась от того, что мне задавали. Тем не менее, спасибо за хорошее отношение. :)
Луис Миланезе