Vagrant Up 和烦人的 NFS 密码询问

Vagrant Up 和烦人的 NFS 密码询问

抱歉我犯了语言错误。我试图阻止 vagrant 在通过 NFS 挂载共享文件夹时询问密码:

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

我阅读过许多在线资源,例如 github 和其他作者的帖子,但对我没什么用......

我试过发现这里。我对 CLI 工作知识不太深。所以有人能为我的问题提供正确的解决方案吗?

答案1

官方的 Vagrant 文档现在涵盖了这一点: https://www.vagrantup.com/docs/synced-folders/nfs.html#root-privilege-requirement

您需要向/etc/sudoers文件中添加条目,编辑的方法是在终端上输入以下内容:sudo visudo

输入密码,然后就可以编辑文件了。您需要粘贴以下几行(取决于您是在 OS X 还是 Linux 上运行 Vagrant。

如果你不熟悉vim,它打开了,此页面有帮助。基本上,复制下面的相应文本块。然后,在 visudo 中,转到要将文本粘贴到文件的位置(文件末尾也可以),并按“i”进入插入模式。按 CMD+V 粘贴文本。然后,按 ESC,然后键入:w以保存更改,然后:q退出。

从版本 1.7.3 开始,OS X 中的 sudoers 文件应该包含以下条目:

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 版本的不同而发生变化,因此上述内容可能已过时。重要的是,文档现在涵盖了这些内容。

答案2

确切的命令可能会在 Vagrant 版本之间发生变化,因此不可能列出总是有效的命令。

无论如何,sudoers 规则这个要点应该还是很接近的。检查 /var/log/auth.log 是否显示了适用于你的 Vagrant 版本的实际命令,并相应地调整规则。

答案3

对于任何在 OSX 上执行此操作的人(我使用的是 MacOS Sierra 版本 10.12.6),即使添加了这些行,我仍然很难获得权限。这篇文章真的很有帮助:

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

基本上,这是因为您自己没有为该文件夹设置权限。因此您需要运行:

sudo chmod +a "$USER allow write,append" /etc/hosts

答案4

TL&DR:添加以下内容override.vm.synced_folder ".", "/vagrant", 已禁用:true

理由:默认情况下,Vagrant 会尝试检测任何 NFS / SMB 文件夹。虽然我能理解开发人员添加此功能的原因,但对于我的用例来说,这非常烦人。解决方案是简单地禁用 NFS 文件夹同步。

这可以通过覆盖 VM 同步文件夹选项来实现。我已附上以下 Digital Ocean 配置供您参考,以便您可以查看整个配置。

 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

相关内容