抱歉我犯了语言错误。我试图阻止 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