Space Agent VM
Space Agent VM — это набор системных утилит в формате ISO-образа, который улучшает взаимодействие пользователя с ВМ и автоматизирует технологические процессы.
Образ Space Agent VM для скачивания доступен в данном репозитории.
Состав образа
Состав компонентов образа может отличаться в зависимости от используемой ОС.
-
Spice vdagent
Компонент, улучшающий интеграцию окна гостевой системы с графическим интерфейсом удаленного пользователя. SPICE-протокол поддерживает канал связи между клиентом и агентом на стороне сервера. Агент работает внутри гостевой системы.
-
Spice webdavd
Служба, которая использует протокол WebDAV для предоставления общего доступа к файлам ВМ.
-
Virtio guest tools
Дополнительные драйверы и службы для установки в гостевую систему.
-
NetKVM
Virtio сетевой драйвер.
-
Viostor
Virtio блочный драйвер.
-
vioscsi
Virtio драйвер интерфейса SCSI.
-
viorng
Virtio RNG драйвер (генератор случайных чисел).
-
vioser
Virtio serial driver (предоставляет несколько портов гостю в виде простых символьных устройств для простого ввода-вывода между гостевым и хостовым пользовательскими пространствами).
-
Balloon
Virtio memory balloon driver ("Баллонное устройство" virtio позволяет гостям KVM уменьшать объем своей памяти (тем самым освободив память для хоста) и увеличивать ее обратно (тем самым забрав память у хоста)).
-
qxl
QXL графический драйвер для Windows 7 и ниже.
-
qxldod
QXL графический драйвер для Windows 8 и выше.
-
pvpanic
Драйвер устройства QEMU pvpanic (устройство pvpanic - это смоделированное устройство ISA).
-
guest-agent
Утилита для взаимодействия с гипервизором SpaceVM.
-
qemupciserial
Драйвер QEMU PCI.
-
-
QEMU Guest Agent
Утилита для взаимодействия с гипервизором SpaceVM.
-
LoudPlay server
Утилита для работы по протоколу LoudPlay.
-
GLINT server
Утилита для работы по протоколу GLINT.
Другие варианты скачивания Virtio Drivers
Обычно драйверы довольно стабильны, поэтому сначала следует попробовать самый последний выпуск.
Последние драйверы virtio можно скачать по ссылке.
Стабильные драйверы virtio можно скачать по ссылке.
Монтирование образа
После загрузки образа в SpaceVM необходимо примонтировать образ к ВМ и, используя стандартные установщики, поставить требуемое ПО на ВМ.
Установка qemu-guest-agent
В Linux ВМ необходимо установить qemu-guest-agent из стандартных репозиториев. За дополнительной информацией следует обратиться к документации используемой ОС.
Для систем на базе Debian/Ubuntu (с apt-get) запустите команду:
apt-get install qemu-guest-agent
Для систем на базе RedHat (с yum) запустите команду:
yum install qemu-guest-agent
При отсутствии доступа к репозиториям можно установить агент с образа. Для этого перейдите в образы по пути "/linux/qemu-guest-agent/" и установите нужную версию, например:
dpkg -i qemu-guest-agent_5.2+dfsg-9_amd64.deb
В зависимости от дистрибутива Space Agent VM может не запуститься автоматически после установки. Тогда
запустите его командой systemctl start qemu-guest-agent
(для дистрибутивов, использующих systemd),
или перезагрузите ВМ.
Взаимодействие гипервизора с qemu-guest-agent
qemu-guest-agent - утилита, которая принимает команды от хоста через virtio-канал с именем org.qemu.guest_agent.0 и исполняет их в контексте гостя. На стороне гипервизора канал заканчивается unix-сокетом, в который можно записать текстовые команды. Для каждой ВМ создается отдельный канал взаимодействия гипервизора с Space Agent VM (не зависящий от наличия сети у ВМ).
Пример:
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-89-d1134f72-2b4e-41c4-a/org.qemu.guest_agent.0'/>
<target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
<alias name='channel3'/>
<address type='virtio-serial' controller='0' bus='0' port='4'/>
</channel>
В SpaceVM qemu-guest-agent используется для:
-
получения сетевых адресов, hostname;
-
корректного выключения ВМ вместо отправки ACPI-команд;
-
"замораживания" файловой системы перед созданием снимка (то есть и при создании резервных копий ВМ);
-
ввода/вывода из AD;
-
установки hostname;
-
добавления SSH-ключей;
-
любых пользовательских команд и скриптов при необходимости.
Подробности работы qemu-guest-agent смотрите в QEMU Features/GuestAgent.
Настройка qemu-guest-agent
После установки qemu-guest-agent создайте административную локальную учетную запись, откройте службы Windows и настройте запуск службы qemu агентa не от local system, а от ранее созданной учетной записи.
При блокировании пароля данной учетной записи служба Space Agent VM работать не будет.
Примечание
Необходимо для автоматического ввода ВМ в AD.
Проверка связи SpaceVM c qemu-guest-agent
Удостоверьтесь, что связь с qemu_guest_agent есть во вкладке Информация ВМ.
Также в CLI сервера есть команды работы с Space Agent VM: vm guest_info.
Установка hostname
В ВМ во вкладке ВМ/Шаблон при активном Space Agent VM можно установить hostname ВМ.
Примечание
Для разных ОС установка hostname происходит по-разному.
Для Windows через powershell командой Rename-Computer
с последующей перезагрузкой для принятия изменений.
Для Linux командой /usr/bin/hostnamectl
при включенной ВМ или
утилитой virtsysprep
с сервера при выключенной ВМ.
Для установки hostname из Web-интерфейса SpaceVM в Alt Linux и РЕД ОС при активном Space Agent VM необходимо:
В Alt Linux:
- Перейти во вкладку ВМ/Шаблон.
- Внести необходимые данные в поле hostname.
- Сохранить изменения.
В РЕД ОС:
- Отредактировать конфигурационный файл qemu-guest-agent (
/etc/sysconfig/qemu-ga
) и включить настройку BLACKLIST_RPC. - Отредактировать конфигурационный файл selinux (
/etc/selinux/config
), найтиSELINUX=enforcing
и заменить наSELINUX=disabled
.Если строки нет, добавьте ее в конец файла.
- Перейти во вкладку ВМ/Шаблон.
- Внести необходимые данные в поле hostname.
- Сохранить настройки и выполнить команду
sudo reboot
.
После выполнения указанных шагов hostname будет успешно установлен из Web-интерфейса.
Windows Sysprep
Для подготовки шаблона с ОС Windows можно использовать утилиту Sysprep. Для этого необходимо:
-
в ВМ во вкладке ВМ/Шаблон при включенной ВМ и активном Space Agent VM нажать кнопку SysPrep;
-
в открывшемся окне выбрать стандартные опции утилиты Sysprep из раскрывающегося списка;
-
после настройки нажать кнопку ОК.
Linux Virt-sysprep
Для подготовки шаблона с ОС Linux можно использовать утилиту Virt-sysprep. Для этого необходимо:
-
в ВМ во вкладке ВМ/Шаблон при выключенной ВМ нажать кнопку VirtSysPrep;
-
в открывшемся окне выбрать загрузочный диск и стандартные опции утилиты Virt-sysprep из раскрывающегося списка;
-
после настройки нажать кнопку ОК.
Добавление в AD
В ВМ во вкладке ВМ/Шаблон при активном Space Agent VM можно добавить ВМ в AD по кнопке Ввод в домен, указав:
- новое название (необязательный параметр);
- имя домена;
- логин;
- пароль;
- организационная единица (полный DN)
- опция рестарта после применения параметров (по умолчанию -- включено).
Примечание
Не забудьте прописать DNS домена или настроить DHCP. Домен должен быть доступен по имени.
Список операционных систем Linux, которые могут быть добавлены в домен AD автоматически:
- РЕД ОС 7
- CentOS 4-8, Stream
- RHEL 4-9
- AltLinux 9, 10
- Astra Смоленск, Орёл
- Rosa, Rosa Cobalt
Необходимые условия (настройки ВМ) для автоматического ввода Linux ВМ в домен
- домен доступен по имени без дополнительных записей в /etc/hosts;
- установлены необходимые пакеты (списки для разных типов Linux ниже) или предоставлен доступ в Интернет;
- отключена система контроля доступа, если таковая присутствует (например, Selinux в Centos);
- отключена или отсутствует настройка BLACKLIST_RPC в конфигурационном файле Space Agent VM (/etc/sysconfig/qemu-ga);
- выполнена необходимая подготовка/настройка используемой ОС (Alt, Rosa, RedOS, Astra).
Список необходимых пакетов для Linux-систем семейства Red Hat:
- adcli
- realmd
- sssd
- krb5-workstation
- krb5-libs
- oddjob
- oddjob-mkhomedir
- samba-common-tools
Список необходимых пакетов для Linux-систем семейства Alt Linux:
- task-auth-ad-sssd
Список необходимых пакетов для Linux-систем семейства Astra:
- ssh
- astra-ad-sssd-client
Список необходимых пакетов для Linux-систем семейства Rosa:
- adcli
- realmd
- sssd
- krb5-workstation
- krb5-libs
- oddjob
- oddjob-mkhomedir
- samba-common-tools
Список необходимых пакетов для Linux-систем семейства Rosa Cobalt:
- adcli
- realmd
- sssd
- krb5-workstation
- krb5-libs
- oddjob
- oddjob-mkhomedir
- samba-common-tools
Удаление из AD
В ВМ во вкладке ВМ/Шаблон при активном Space Agent VM можно убрать ВМ из AD по кнопке Вывод в домен, указав:
- логин;
- пароль;
- имя домена (только для Linux-систем);
- опция рестарта после применения параметров (по умолчанию -- включено).
Добавление SSH-ключей
Условия корректного добавления SSH-ключей в ВМ:
- ОС Linux;
- ВМ выключена или ВМ включена и активен Space Agent VM.
В ВМ во вкладке ВМ/Шаблон при активном Space Agent VM можно добавить SSH-ключи, указав:
- SSH-пользователя;
- SSH-ключ;
- опция Ввести ключ SSH.
Запуск пользовательских скриптов через Space Agent VM
Условия для запуска пользовательских скриптов через Space Agent VM:
- ОС Linux;
- ВМ включена и активен Space Agent VM.
Получение вариантов команд к Space Agent VM
VM_GUEST_CMDS=$(curl -s -f -S -H "Content-Type: application/json" \
-H "Authorization: jwt ${TOKEN}" \
https://${VEIL_ADDRESS}/api/domains/${VM_ID}/available-guest-cmds/
echo ${VM_GUEST_CMDS}
{
"qemu_available_cmds": [
"guest-ssh-remove-authorized-keys",
"guest-ssh-add-authorized-keys",
"guest-ssh-get-authorized-keys",
"guest-get-devices",
"guest-get-osinfo",
"guest-get-timezone",
"guest-get-users",
"guest-get-host-name",
"guest-exec",
"guest-exec-status",
"guest-get-memory-block-info",
"guest-set-memory-blocks",
"guest-get-memory-blocks",
"guest-set-user-password",
"guest-get-fsinfo",
"guest-get-disks",
"guest-set-vcpus",
"guest-get-vcpus",
"guest-network-get-interfaces",
"guest-suspend-hybrid",
"guest-suspend-ram",
"guest-suspend-disk",
"guest-fstrim",
"guest-fsfreeze-thaw",
"guest-fsfreeze-freeze-list",
"guest-fsfreeze-freeze",
"guest-fsfreeze-status",
"guest-file-flush",
"guest-file-seek",
"guest-file-write",
"guest-file-read",
"guest-file-close",
"guest-file-open",
"guest-shutdown",
"guest-info",
"guest-set-time",
"guest-get-time",
"guest-ping",
"guest-sync",
"guest-sync-delimited"
]
}
Исполнение команды guest-get-time Space Agent VM
VM_GUEST_RESPONSE=curl -s -f -S -XPOST -H "Content-Type: application/json" \
-H "Authorization: jwt ${TOKEN}" \
-d "{\\"qemu_cmd\\":"guest-get-time", \\"fargs\\":{}}" \
https://${VEIL_ADDRESS}/api/domains/${VM_ID}/guest-command/
echo ${VM_GUEST_RESPONSE}
{"guest-get-time": 1638259995198604000}
Исполнение команды guest-get-osinfo Space Agent VM
VM_GUEST_RESPONSE=curl -s -f -S -XPOST -H "Content-Type: application/json" \
-H "Authorization: jwt ${TOKEN}" \
-d "{\\"qemu_cmd\\":"guest-get-osinfo", \\"fargs\\":{}}" \
https://${VEIL_ADDRESS}/api/domains/${VM_ID}/guest-command/
echo ${VM_GUEST_RESPONSE}
{
"guest-get-osinfo": {
"name": "Fedora Linux",
"kernel-release": "5.14.10-300.fc35.x86_64",
"version": "35 (Cloud Edition)",
"variant": "Cloud Edition",
"pretty-name": "Fedora Linux 35 (Cloud Edition)",
"version-id": "35",
"variant-id": "cloud",
"kernel-version": "#1 SMP Thu Oct 7 20:48:44 UTC 2021",
"machine": "x86_64",
"id": "fedora"
}
}
Исполнение команды guest-exec Space Agent VM
VM_GUEST_RESPONSE=curl -s -f -S -XPOST -H "Content-Type: application/json" \
-H "Authorization: jwt ${TOKEN}" \
-d "{\\"qemu_cmd\\":"guest-exec", \\"fargs\\":{ {\\"path\\": \\"ls\\", \\"arg\\": [\\"-la\\", \\"/\\"]} }" \
https://${VEIL_ADDRESS}/api/domains/${VM_ID}/guest-command/
echo ${VM_GUEST_RESPONSE}
{
"guest-exec": {
"exitcode": 0,
"out-data": "total 18\ndr-xr-xr-x. 1 root root 132 Oct 26 05:38 .\ndr-xr-xr-x. 1 root root 132 Oct 26 05:38 ..\nlrwxrwxrwx. 1 root root 7 Jul 21 23:47 bin -> usr/bin\ndr-xr-xr-x. 7 root root 1024 Oct 26 05:40 boot\ndrwxr-xr-x. 19 root root 3980 Nov 29 05:31 dev\ndrwxr-xr-x. 1 root root 2634 Nov 29 05:33 etc\ndrwxr-xr-x. 1 root root 20 Nov 29 05:32 home\nlrwxrwxrwx. 1 root root 7 Jul 21 23:47 lib -> usr/lib\nlrwxrwxrwx. 1 root root 9 Jul 21 23:47 lib64 -> usr/lib64\ndrwxr-xr-x. 1 root root 0 Jul 21 23:47 media\ndrwxr-xr-x. 1 root root 0 Jul 21 23:47 mnt\ndrwxr-xr-x. 1 root root 0 Jul 21 23:47 opt\ndr-xr-xr-x. 197 root root 0 Nov 29 05:30 proc\ndr-xr-x---. 1 root root 158 Nov 29 05:32 root\ndrwxr-xr-x. 31 root root 820 Nov 29 05:35 run\nlrwxrwxrwx. 1 root root 8 Jul 21 23:47 sbin -> usr/sbin\ndrwxr-xr-x. 1 root root 0 Jul 21 23:47 srv\ndr-xr-xr-x. 13 root root 0 Nov 29 05:30 sys\ndrwxrwxrwt. 12 root root 280 Nov 30 06:51 tmp\ndrwxr-xr-x. 1 root root 100 Oct 26 05:38 usr\ndrwxr-xr-x. 1 root root 170 Nov 29 05:31 var\n",
"exited": true
}
}
Изменить шаблон
Способ изменить шаблон без ручного пересоздания всех клонов -- это воспользоваться операцией вливания снимка тонкого клона в шаблон.
Для этого требуется подготовить тонкие клоны с панели SpaceVM, выполнив:
-
на всех тонких клонах не должно быть сохраненных состояний. При необходимости требуется зайти в снимки и Удалить все состояния;
-
внести нужные изменения в имеющийся тонкий клон или создать новый тонкий клон и произвести там изменения;
-
отключить все включенные тонкие клоны от родительского шаблона;
-
для ОС Windows рекомендуется перед вливанием подготовить тонкий клон через Sysprep, если это использовали для шаблона;
-
произвести операцию в тонком клоне, который подготовили для вливания в шаблон, нажав во вкладке ВМ/Шаблон кнопку Изменить шаблон и подтвердив свои намерения в открывшемся окне.
Эти действия внесут изменения из подготовленного тонкого клона в диски шаблона, и от них пересоздадутся диски во всех остальных тонких клонах.
Внимание
Изменение шаблона напрямую при наличии тонких клонов запрещено, так как это приведет в нерабочее состояние все тонкие клоны.
Оптимизатор работы Windows 10 / Windows Server 2019 в виртуальной среде
Для оптимизации работы Windows в виртуальной среде необходимо:
- запустить файл install-menu в образе диска guest-utils;
- запустить пункт optimize guest tools;
- дождаться сообщения "Оптимизация завершена, требуется перезагрузка".
Во время работы могут выдаваться сообщения типа "Отказ в доступе" или ошибки определения экрана. Это штатная ситуация, вызванная архитектурными различиями дистрибутивов.
Некоторые модификации применяются исключительно для новых пользователей, и окружение, созданных ранее до модификации пользователей, не изменяется, чтобы не возникало проблем с изменением окружения.
Логирование Space Agent VM для Linux ВМ
Файл /etc/qemu/qemu-ga.conf необходимо поправить следующим образом:
[general]
verbose = 1
logfile = /var/log/qemu-ga.log
После этого перезапустить агент командой systemctl restart qemu-guest-agent
Log-файл
Без ключа -v (verbose) Space Agent VM записывает в журнал только ошибки. Следует принять во внимание, что с ключом -v log-файл заполняется очень быстро.
Логирование Space Agent VM для Windows ВМ
Проверка в ВМ
Проверить состояние агента через PowerShell можно, введя Get-Service QEMU-GA
.
Ответом должно быть: Running QEMU-GA QEMU Guest Agent.
Необходимо модифицировать сервис:
HKLM/SYSTEM/CCS/Services/QEMU-GA/ImagePath = “"C:\Program Files\Qemu-ga\qemu-ga.exe" -d --retry-path -v -l c:\users\user\qga.log
Лог будет записываться в c:\users\user\qga.log.
Log-файл
Ключ -l указывает, куда записывать журнал событий. В Windows stderr, в который журнал записывается по умолчанию, в Журналы SpaceVM не заносится.