【问题标题】:Using IVSHMEM with libvirt virt-manager将 IVSHMEM 与 libvirt virt-manager 一起使用
【发布时间】:2016-12-12 11:12:54
【问题描述】:

qemu 中使用 ivshmem 需要以下步骤。

  1. 在主机./ivshmem_server 中启动ivshmem 服务器,这将创建一个unix 域套接字/tmp/ivshmem_socket
  2. 使用以下命令行选项启动 qemu--chardev socket,path=/tmp/ivshmem_socket,id=ivshmem_socket -device ivshmem,chardev=ivshmem_socket,size=1m

现在,如果我们在 guest 中执行lspci,ivshmem pci 设备就会显示在其中。

如何在 virt-manager 中做同样的事情? 具体来说,我想做两件事。

  • 在 virt-manager 启动时将上述命令行选项传递给 qemu
  • libvirt virt-manager 使用 apparmor 来隔离客人,如何确保对/tmp/ivshmem_socket 的访问不会被VM 拒绝?

【问题讨论】:

    标签: shared-memory virtualization qemu libvirt apparmor


    【解决方案1】:

    传递命令行选项

    将命令行选项从 virt-manager 传递给 qemu 需要以下步骤。

    • virsh edit <name of vm>,或者直接使用vim /etc/libvirt/qemu/<name of virtual machine>.xml修改文件
    • <domain type='kvm'> 更改为<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    • 为命令行参数添加标签
    <qemu:commandline>
        <qemu:arg value='-chardev'/>
        <qemu:arg value='socket,path=/tmp/ivshmem_socket,id=ivshmem_socket'/>
        <qemu:arg value='-device'/>
        <qemu:arg value='ivshmem,chardev=ivshmem_socket,size=1m'/>
    </qemu:commandline>
    

    这样做之后,qemu会尝试访问/tmp/ivshmem_socket,由于apparmor(libvirt在我的情况下使用apparmor,它还不如使用SeLinux),访问将被拒绝,并出现类似以下的错误将显示出来。

    error starting domain: internal error: process exited while connecting to monitor:
      ...
    virt-manager Failed to connect socket: Permission denied
    

    AppArmor

    要修复此错误,需要执行以下两个步骤。

    1.让qemu以root身份运行(这一步是optional,你可能不需要,继续第二步)

    • vim /etc/libvirt/qemu.conf
    • user =group = 行更改为以下内容

    用户 =“根”
    组=“根”

    重启 PC 或 libvirt 守护进程。

    2. AppArmor

    • 从guest的xml配置文件中找到guest的uuid(使用virsh编辑并查找tag)
    • cd /etc/apparmor.d/libvirt
    • 检查libvirt-&lt;uuid&gt;文件是否存在,将&lt;uuid&gt;替换为vm的uuid
    • 将 AppArmor 模式更改为抱怨,而不是强制执行,这将允许 VM 的所有操作,并记录那些应该被阻止的操作。

      sudo aa-complain libvirt-&lt;uuid&gt; //replace &lt;uuid&gt; with uuid of vm

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      相关资源
      最近更新 更多