[devel] qemu и все-все-все

Alexey Shabalin a.shabalin на gmail.com
Ср Янв 12 20:24:23 UTC 2011


День добрый.
Посвятил несколько дней для разборок с нашими qemu, qemu-kvm, libvirt,
virt-manager и остальным.
На первый взгляд вроде ничего, но стоит капнуть поглубже - ужас-ужас :)

Пробую добавить поддержку spice в qemu-kvm. Ок, всё собралось. А
дальше вылазит занятная ситуация:
- изображаю простого пользователя и использую libvirt (для запуска,
создания виртуалок) и GUI - virt-manager + virt-viewer
- qemu-kvm конечно можно поставить самостоятельно, но ещё хочется и
создавать виртуалки, а утилиты qemu-img в пакете qemu-kvm нет - типа
используйте от родного qemu.
- ставим qemu только ради qemu-img
- а теперь самое интересное - как ведёт себя libvirt. Когда говоришь
запустить виртуальную машину - он по чесному запускает через
/usr/bin/kvm или /usr/bin/qemu-kvm
  А вот при создании/настройках виртуалки, libvirt'у надо понимать с
чем он имеет дело и какие возможности имеются. для этого он смотрит
вывод команды с ключём --help и  парсит его. А вот команду с ключём
--help он запускает совсем не /usr/bin/kvm или /usr/bin/qemu-kvm (что
хотелось бы), а /usr/bin/qemu-system-x86_64. А этот файл принадлежит
старому qemu (не qemu-kvm). Как вы помните пакет qemu мы удалить не
можем - нужен qemu-img. А если бы и удалили, то без
/usr/bin/qemu-system-x86_64 libvirt вообще свихнётся.
  В результате получаем, что как бы мы ни модифицировали qemu-kvm,
каких бы фишек не добавили, libvirt нам не даст с ними работать - он
видит фишки от старого qemu.

Конечно бага в libvirt, но мне кажется разработчики libvirt не
подозревают, что на машине пользователя будут/могут одновременно
установлены qemu и qemu-kvm.

В общем посмотрел я на всё это и взялся за напильник.
Я бы предпочел иметь в репо единственную версию qemu (qemu или
qemu-kvm - пока не важно - но единую) - так было бы всем легче. Тем
более что сейчас их апстримы постоянно мержатся между собой. Но не
давно на меня ругались в багзиле, что бы я отстал от всех, разные это
проекты и всё тут. Хорошо пусть будут оба.
Выходов несколько - собирать всё нужное из проектов (и qemu-img тоже)
и раставить конфликты, либо не делать конфликты используя алтернативы.
Я выбрал альтернативы.
На ваш суд предлагается тестовая сборка всего барахла.
Основные изменения:
- везде включена поддержка spice. погонял денёк - работает. Правда  на
карте vga, с qxl пока не получилось.
- для работы spice все проекты собраны из снапшотов.
- некоторые git-репо(virt-manager, virt-viewer,python-virtinst)
переделаны(импорт из апстримного mercurial) - не обижайтесь, если не
устраивает то верну обратно. Вы только скажите :)
- в qemu и qemu-kvm добавлены алтернативы для qemu-img, qemu-io,
qemu-system-x86_64, qemu-nbd
- в них же выделены подпакеты img (хотя можно этого и не делать)
- для тестирования(ещё надо смотреть), в qemu-kvm используются ромы из
внешних пакетов vgabios, seabios, gpxe-roms-qemu
  для qemu пока этого не делал.
- если установлена libcgroup и запущены сервисы, libvirt начинает
использовать cgroup.
- в libvirt включены многие опции.
- разные мелкие фиксы

Заинтересованных прошу посмотреть, высказать мнение/рекомендации. task #36894
Ну и в конечном итоге всё это хочется видеть в сизифе.
Так что давайте договариваться об acl, NMU, approve и т.п. :)

PS: у qemu-kvm в acl @everybody, но без одобрения rider@ обновлять не хочется.
PPS: конечно там всё не идеально и ещё есть чего сделать. например:
возможно "синхронизировать" спеки для qemu и qemu-kvm, убрать
qemu-common - я не понял почему так назвали пакет с документацией и
почему он обязательный а не опциональный. Надо бы сделать общий
control и init-скрипт для модуля kvm, т.к. qemu тоже умеет kvm. Ну и
так далее.

-- 
Alexey Shabalin


Подробная информация о списке рассылки Devel