Локальная виртуализация с использованием qemoo

Утилита qemoo представляет собой обёртку для запуска виртуальных машин с использованием эмулятора QEMU. Скрипт предназначен для упрощения командной строки QEMU и автоматизации типовых операций, таких как:

  • запуск ISO-образов и виртуальных дисков;
  • автоматическое создание дисков в формате qcow2;
  • эмуляция загрузки в режиме EFI;
  • проброс физических устройств и каталогов;
  • работа через systemd и поддержка демон-режима SPICE;
  • настройка сетевых интерфейсов виртуальных машин;
  • управление конфигурацией виртуальных машин через конфигурационные файлы.

Утилита входит в состав дистрибутива ОС и предназначена для использования администраторами при отладке, тестировании, развёртывании и сопровождении виртуальных инсталляций ОС.

Для запуска виртуальной машины с использованием qemoo достаточно передать путь к ISO-образу, блочному устройству или файлу виртуального диска. Примеры:

  qemoo Rosa.iso
  qemoo /dev/sda
  qemoo ./Rosa.qcow2

При необходимости загрузки в режиме EFI используется ключ -e:

  qemoo -e Rosa.qcow2

Дополнительные ключи и параметры позволяют расширить функциональность скрипта и адаптировать его под конкретные задачи виртуализации. Все параметры передаются в одной командной строке, а конфигурация может задаваться как явно, так и через конфигурационные файлы, размещённые локально или глобально.

Запуск виртуальных машин с помощью qemoo

Для запуска виртуальных машин с использованием qemoo необходимо передать в качестве аргумента путь к ISO-образу, блочному устройству или образу виртуального диска в формате .qcow2. Утилита самостоятельно определяет параметры запуска на основе переданного файла и применяет настройки по умолчанию или из конфигурационных файлов.

Примеры запуска:

qemoo Rosa.iso
qemoo /dev/sda
qemoo ./Rosa.qcow2

Загрузка в режиме EFI

При необходимости загрузки в режиме EFI используется ключ -e:

qemoo -e Rosa.qcow2

Также может быть применена комбинированная команда:

qemoo -i -e /dev/sdb

В этом случае будет произведена установка с ISO в EFI-режиме на указанный диск или образ.

Добавление дополнительных устройств и параметров

Для подключения дополнительных устройств (например, второго диска или USB) используется ключ -a. Пример запуска ISO-образа с подключением второго устройства:

qemoo Rosa.iso -a /dev/sdb

Параметры, поддерживаемые эмулятором QEMU, могут передаваться напрямую после двойного дефиса "--". Например, передача параметра количества виртуальных процессоров:

qemoo -e Rosa.iso -- -smp 4

Загрузка в режиме, имитирующем запись ISO-образа на носитель

Скрипт поддерживает режим, в котором ISO-образ загружается так, как если бы он был записан побайтово на флеш-накопитель. Для этого используется ключ -l:

qemoo -l Rosa.iso
qemoo -l -e Rosa.iso

Проброс USB-устройств

Для проброса физических USB в виртуальную машину используется ключ -L, за которым следует путь к устройству:

qemoo -L /dev/sdb

Такая схема может быть использована, например, для загрузки виртуальной машины с USB-модема или токена, содержащего ОС.

Установка ОС на виртуальный диск

Скрипт qemoo поддерживает автоматизированную установку ОС с ISO-образа на виртуальный диск в формате .qcow2. Для этого используется ключ -i.

При запуске с данным ключом в текущем каталоге создаётся файл виртуального диска, который автоматически подключается к виртуальной машине при запуске.

Примеры установки:

qemoo -i Rosa.iso

В режиме EFI:

qemoo -i -e Rosa.iso

Также возможно указание целевого устройства (например, реального диска /dev/sdb):

qemoo -i -e /dev/sdb

После завершения установки возможно использование ранее созданного .qcow2-образа для загрузки, передав его в qemoo как аргумент:

qemoo _qemoo1_ROS.qcow2

Имена создаваемых образов формируются автоматически, но могут быть заданы и вручную.

Также поддерживается установка с ISO-образа на физический диск. В этом случае используется ключ -a, указывающий дополнительное устройство для записи:

qemoo Rosa.iso -a /dev/sdb

Во всех режимах установки применяется типовая конфигурация QEMU, достаточная для корректной загрузки и установки ОС РОСА "ХРОМ".

Сетевые режимы и проброс устройств

При запуске виртуальных машин с использованием qemoo автоматически настраивается сетевое подключение, обеспечивающее взаимодействие гостевой системы с хостом и другими машинами в сети.

Автоматическое подключение к подсети virbr0

Если на хост-системе установлена и запущена служба libvirtd, виртуальные машины, запущенные с помощью qemoo, автоматически получают IP-адрес из подсети 192.168.122.0/24, связанной с виртуальным интерфейсом virbr0.

Такая конфигурация обеспечивает полноценную сетевую связность и доступ к интернету через NAT. В случае отсутствия интерфейса virbr0 (например, если libvirtd не установлен или не активен) для каждой виртуальной машины создаётся собственная NAT-сеть, что может ограничивать взаимодействие между гостевыми системами и внешней средой.

Настройка собственного сетевого моста

Для получения большей гибкости возможно создание и использование собственного сетевого моста с именем qemoobr0. При наличии такого моста утилита qemoo игнорирует интерфейс virbr0 и использует qemoobr0 для подключения виртуальных машин.

Настройка моста производится средствами Системы. Конкретные действия зависят от используемой сетевой конфигурации хоста.

Проброс каталогов в гостевую систему

При запуске виртуальной машины с помощью qemoo может быть автоматически проброшен каталог с хоста внутрь гостевой системы. По умолчанию пробрасывается текущий каталог (./), из которого выполняется запуск. При старте виртуальной машины в консоль выводится инструкция по подключению каталога внутри гостевой ОС на базе Linux.

Проброс USB-устройств

Для проброса USB-устройства в виртуальную машину используется ключ -L. Указывается путь к устройству:

qemoo -L /dev/sdb

Этот режим может быть использован, например, для загрузки с 4G-модема с SD-картой, токена с предустановленной Системой или иных внешних накопителей.

Работа в демон-режиме (SPICE)

Утилита qemoo поддерживает запуск виртуальной машины в виде фонового демона с выводом графического интерфейса через протокол SPICE. Это позволяет подключаться к экрану гостевой ОС с помощью внешних клиентов, таких как virt-viewer или Remmina.

Запуск в SPICE-режиме

Для запуска виртуальной машины в демон-режиме используется ключ -d. При этом qemoo автоматически выделяет свободный порт и сообщает его в вывод консоли:

qemoo -d Rosa.iso

Вывод будет содержать номер порта, на который можно подключиться из клиента SPICE. Подключение выполняется вручную с указанием IP-адрес хоста и полученного порта.

Управление виртуальной машиной через systemd

При запуске виртуальной машины с ключом -i (установка ОС) qemoo создаёт рядом с образом файл конфигурации с расширением .conf. Этот файл содержит параметры запуска и может использоваться для интеграции с systemd.

Пример содержимого конфигурационного файла:

ACTION=run
RAM="auto"
ADD=""
EFI="-bios /usr/share/OVMF/OVMF_CODE.fd"
PORT=""
REDIRUSB=""
LOSETUP=""
SPICE=""
SHARE="/home/user/Downloads"
QEMOOADD=""

Для запуска виртуальной машины от имени пользователя root через systemd применяется следующая команда:

sudo systemctl start qemoo@$(systemd-escape\ /путь/к/образ.qcow2)

Проверка статуса виртуальной машины:

systemctl status qemoo@$(systemd-escape /путь/к/образ.qcow2)

Для включения автозапуска виртуальной машины при старте хост-системы:

sudo systemctl enable qemoo@$(systemd-escape\ /путь/к/образ.qcow2)

Отключение автозапуска:

sudo systemctl disable qemoo@$(systemd-escape\ /путь/к/образ.qcow2)

Запуск от имени текущего пользователя с использованием user-юнитов:

sudo systemctl --user enable qemoo@$(systemd-escape\ /путь/к/образ.qcow2)

Команда systemd-escape используется для корректного экранирования символов "/" в путях файловой системы при создании unit-имен.

Конфигурация и приоритет параметров

Скрипт qemoo поддерживает использование конфигурационных файлов, в которых могут задаваться параметры запуска виртуальных машин. Эти параметры могут быть как общими для всех запусков, так и специфичными для отдельных образов. Это позволяет централизованно управлять поведением qemoo без необходимости передавать параметры вручную в командной строке при каждом запуске.

При запуске qemoo учитываются конфигурационные файлы в следующем порядке приоритета (от меньшего к большему):

  1. глобальный файл – /etc/qemoo.cfg. Используется по умолчанию, если переменная окружения $QEMOOCFG не задана;
  2. локальный файл в текущем каталоге – ./qemoo.cfg;
  3. индивидуальный конфигурационный файл для образа: если виртуальная машина запускается из файла образа example.qcow2, то приоритет будет иметь файл example.qcow2.conf, расположенный рядом с ним;
  4. конфигурационный файл, явно указанный в параметре: при запуске с опцией --config – /путь/к/файлу.cfg.

Если в конфигурационных файлах заданы одинаковые параметры, приоритет имеет значение из файла с более высоким уровнем.

Типовые параметры конфигурации

В конфигурационном файле могут быть заданы следующие переменные:

  • ACTION – тип действия (run, install и др.);
  • RAM – объём оперативной памяти, выделяемой виртуальной машине;
  • ADD – путь к дополнительному устройству (например, дополнительный диск);
  • EFI – параметры для запуска в режиме EFI;
  • PORT – порт для SPICE-подключения;
  • SPICE – активация вывода видео через SPICE (yes / no);
  • REDIRUSB – проброс USB-устройств;
  • LOSETUP – использование losetup при работе с образом;
  • SHARE – каталог, пробрасываемый в гостевую ОС;
  • QEMOOADD – дополнительные параметры командной строки для qemu-system-*.

Пример конфигурационного файла:

  ACTION=run
  RAM=2048
  ADD=/dev/sdb
  EFI="-bios /usr/share/OVMF/OVMF_CODE.fd"
  SPICE=yes
  PORT=6001
  SHARE=/home/user/Projects