Перейти к содержанию

Space Agent VM, драйверы и утилиты для SPICE

Space Agent VM - это набор системных утилит в формате ISO-образа, который улучшает взаимодействие пользователя с ВМ и автоматизирует технологические процессы.

Состав образа

  • Spice guest tools -- этот установщик содержит некоторые дополнительные драйверы и службы, которые можно установить в гостевой системе Windows для повышения производительности и интеграции SPICE. Это включает видеодрайвер qxl и гостевой агент SPICE (для копирования и вставки, автоматического переключения разрешения и т.д.). Все драйверы, которые будут доступны при установке, указаны ниже в Virtio guest tools.

  • Spice vdagent -- необязательный компонент, улучшающий интеграцию окна гостевой системы с графическим интерфейсом удалённого пользователя. SPICE-протокол поддерживает канал связи между клиентом и агентом на стороне сервера. Агент работает внутри гостевой системы. Для связи с Space Agent VM в гостевой системе также используется специальное устройство, так называемый VDI-порт.

  • 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 -- Qemu Guest Agent 32bit and 64 bit MSI installers;
    • qemupciserial -- драйвер QEMU PCI;

Другие варианты скачивания Virtio Drivers

Обычно драйверы довольно стабильны, поэтому сначала следует попробовать самый последний выпуск.

Последние драйверы virtio можно скачать по ссылке.

Стабильные драйверы virtio можно скачать по ссылке.

Монтирование образа

После загрузки образа в SpaceVM необходимо примонтировать образ к ВМ и, используя стандартные установщики, поставить требуемое ПО на ВМ.

Установка qemu-guest-agent на Linux ВМ

В 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-сокетом, в который можно писать текстовые команды. Для каждой ВМ создается отдельный канал взаимодействия гипервизора с гостевым агентом (не зависящий от наличия сети у ВМ).

Пример:

<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, а от ранее созданной учетной записи.

При блокировании пароля данной учетной записи, служба гостевого агента не будет работать.

image

Примечание

Необходимо для автоматического ввода ВМ в AD.

Проверка связи SpaceVM c qemu-guest-agent

Удостоверьтесь, что связь с qemu_guest_agent есть во вкладке Информация ВМ. image

Также в CLI сервера есть команды работы с гостевым агентом: vm guest_info.

Установка hostname

В ВМ во вкладке ВМ/Шаблон при активном гостевом агенте можно установить hostname ВМ.

Примечание

Для разных ОС установка hostname происходит по-разному. Для Windows через powershell командой Rename-Computer с последующей перезагрузкой для принятия изменений. Для Linux командой /usr/bin/hostnamectl при включенной ВМ. Для Linux утилитой virtsysprep с сервера при выключенной ВМ.

Для установки hostname из веб-интерфейса SpaceVM в Alt Linux и РЕД ОС, при активном гостевом агенте, необходимо:

В Alt Linux:

  • Перейти во вкладку ВМ/Шаблон;
  • Внесите необходимые данные в поле hostname;
  • Сохранить изменения.

В РЕД ОС:

  • Отредактировать конфигурационный файл qemu-guest-agent (/etc/sysconfig/qemu-ga) и включить настройку BLACKLIST_RPC;
  • Отредактировать конфигурационный файл selinux (/etc/selinux/config), найти SELINUX=enforcing и отредактировать на SELINUX=disabled;

    Если строки нет, добавьте ее в конец файла.

  • Перейти во вкладку ВМ/Шаблон;
  • Внести необходимые данные в поле hostname;
  • Сохранить настройки и выполнить команду sudo reboot;

После выполнения указанных шагов, "hostname" будет успешно установлен из веб-интерфейса.

Windows Sysprep

Для подготовки шаблона с ОС Windows можно использовать утилиту Sysprep. Для этого необходимо:

  • в ВМ во вкладке ВМ/Шаблон при включенной ВМ и активном гостевом агенте нажать кнопку SysPrep;

  • в открывшемся окне выбрать стандартные опции утилиты Sysprep из раскрывающегося списка;

  • после настройки нажать кнопку ОК.

Linux Virt-sysprep

Для подготовки шаблона с ОС Linux можно использовать утилиту Virt-sysprep. Для этого необходимо:

  • в ВМ во вкладке ВМ/Шаблон при выключенной ВМ нажать кнопку VirtSysPrep;

  • в открывшемся окне выбрать загрузочный диск и стандартные опции утилиты Virt-sysprep из раскрывающегося списка;

  • после настройки нажать кнопку ОК.

В ВМ во вкладке ВМ/Шаблон при активном гостевом агенте можно добавить ВМ в AD, указав:

  • hostname (необязательный параметр);
  • имя домена;
  • логин;
  • пароль;
  • опция рестарта после применения параметров (по умолчанию -- включено).

Примечание

Не забудьте прописать 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 в конфиге гостевого агента (/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, указав:

  • логин;
  • пароль.
  • имя домена (только для Linux систем).

Добавление SSH-ключей

Условия корректного добавления SSH-ключей в ВМ:

  • ОС Linux;
  • ВМ выключена или ВМ включена и активен Space Agent VM.

В ВМ во вкладке ВМ/Шаблон при активном гостевом можно добавить SSH-ключи, указав:

  • SSH-пользователя;
  • SSH-ключ.

image

Запуск пользовательских скриптов через Space Agent VM

Условия для запуска пользовательских скриптов через Space Agent VM:

  • ОС Linux;
  • ВМ включена и активен 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 гостевым агентом

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 гостевым агентом

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 гостевым агентом

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;
  • дождаться сообщения "Оптимизация завершена, требуется перезагрузка".

Во время работы могут выдаваться сообщения типа "Отказ в доступе" или ошибки определения экрана. Это штатная ситуация, вызванная архитектурными различиями дистрибутивов.

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

Логирование гостевого агента для Linux ВМ

В файл /etc/qemu/qemu-ga.conf надо поправить:

[general]
verbose = 1
logfile = /var/log/qemu-ga.log

После этого перезапустить агент командой systemctl restart qemu-guest-agent

Файл логов

Без ключа -v (verbose) Space Agent VM логирует только ошибки. Но с verbose лог-файл растёт очень быстро.

Логирование гостевого агента для 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.

Файл логов

Ключ -l как раз указывает куда писать лог. В Windows stderr, в который лог пишется по-умолчанию, в Журналы не заносится.