Локальная виртуализация с использованием 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 учитываются конфигурационные файлы в следующем порядке приоритета (от меньшего к большему):
- глобальный файл – /etc/qemoo.cfg. Используется по умолчанию, если переменная окружения $QEMOOCFG не задана;
- локальный файл в текущем каталоге – ./qemoo.cfg;
- индивидуальный конфигурационный файл для образа: если виртуальная машина запускается из файла образа example.qcow2, то приоритет будет иметь файл example.qcow2.conf, расположенный рядом с ним;
- конфигурационный файл, явно указанный в параметре: при запуске с опцией --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