2016-08-06 5 views
0

Использование ivshmem в qemu требует следующих шагов.Использование IVSHMEM с libvirt virt-manager

  1. Start ivshmem сервер в хосте ./ivshmem_server который создаст домен Сокет /tmp/ivshmem_socket
  2. Start QEMU с помощью следующей командной строки options- -chardev socket,path=/tmp/ivshmem_socket,id=ivshmem_socket -device ivshmem,chardev=ivshmem_socket,size=1m

Теперь, если мы делаем lspci в госте, ivshmem PCI в нем показано устройство.

Как я могу сделать то же самое в virt-manager? В частности, я хочу сделать 2 вещи.

  • Пропустите выше параметр командной строки в Qemu, когда вирт-менеджер начинает это
  • Libvirt вирт-менеджер использует AppArmor изолировать гости, как убедиться в том, что доступ к /tmp/ivshmem_socket не отрицается в VM ?

ответ

0

Попутных параметров командной строки

Попутных параметр командной строки для 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 работать как корень (Этот шаг optional, и не может быть потребовано для вас, переходите ко второму шагу)

  • ВИМ /etc/libvirt/qemu.conf
  • изменение линии user = и group =, к следующему

пользователь = "корень"
группа = "корень"

Перезагрузите компьютер или демон libvirt.

2. AppArmor

  • найти UUID гостя из конфигурационного файла XML (использование virsh редактировать и искать тег)
  • кд /etc/apparmor.d/libvirt
  • проверить, если libvirt-<uuid> файл присутствует , заменить <uuid> на uuid vm
  • Изменить режим AppArmor, чтобы жаловаться, а не enfo rcing, который позволит выполнять все действия виртуальной машины и регистрировать те, которые должны были быть заблокированы.

    sudo aa-complain libvirt-<uuid> //replace <uuid> with uuid of vm