我正在尝试在 Fedora 23 中使用libvirt
.它启动后一切看起来都很好,直到我被要求输入“sudo 密码:准备编辑 /etc/exports。需要管理员权限”。
我以普通用户身份运行 Vagrant,不想以 root 身份运行它,也不想将自己添加到 sudoers 文件中。只是为了测试,我已经vagrant up
以 root 身份运行并且一切正常,但我对这样运行 Vagrant 感到不舒服。
我在谷歌搜索修复时发现了一些东西,那就是更改文件的权限/etc/exports
。这有效并让我vagrant up
以普通用户身份运行,但对我来说这感觉像是一个肮脏的修复。更改 /etc/exports 文件的权限有什么缺点?我真的很想让 Vagrant 作为普通用户运行,而不必影响安全性。
由于内核更新,Virtualbox 不是替代方案。我不想冒任何破坏的风险,也不想等待 Oracle 或 rpmfusion 更新 Virtualbox 的内核模块。
我已按照 Fedora 开发者门户的以下说明进行操作:
$ sudo dnf install vagrant-libvirt
$ sudo systemctl enable libvirtd
$ lsmod | grep kvm
lsmod | grep kvm 不返回任何内容,因此我编辑了 Vagrantfile 以使用 qemu 驱动程序:
Vagrant.configure("2") do |config|
...
config.vm.provider :libvirt do |libvirt|
libvirt.driver = "qemu"
end
...
end
在没有密码提示的情况下使用 Vagrant 中的 libvirt
$ sudo gpasswd -a ${USER} libvirt
$ newgrp libvirt
Synced folders with NFS
$ sudo dnf install nfs-utils && sudo systemctl enable nfs-server
然后为firewalld启用nfs、rpc-bind和mountd服务:
$ sudo firewall-cmd --permanent --add-service=nfs &&
sudo firewall-cmd --permanent --add-service=rpc-bind &&
sudo firewall-cmd --permanent --add-service=mountd &&
sudo firewall-cmd --reload
在没有密码提示的情况下使用 Vagrant 的 NFS 共享
$ sudo visudo
添加这个:
# Allow Vagrant to manage /etc/exports
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD_CHECK = /usr/bin/systemctl status nfs-server.service
Cmnd_Alias VAGRANT_NFSD_START = /usr/bin/systemctl start nfs-server.service
Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /bin/sed -r -e * d -ibak /etc/exports
%vagrant ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY, VAGRANT_EXPORTS_REMOVE
然后,如果您尚未加入 vagrant 组,请运行以下命令:
$ sudo getent group vagrant >/dev/null || sudo groupadd -r vagrant
$ sudo gpasswd -a ${USER} vagrant
$ newgrp vagrant
让 Vagrant 启动并运行:
$ vagrant init rboyer/ubuntu-trusty64-libvirt
$ vagrant up
我尝试了 Vagrant 盒子网站上的两个不同的 libvirt 盒子: 这里和这里
非常感谢有关此事的帮助。谢谢。