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

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

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

Образ Space Agent VM для скачивания доступен в данном репозитории.


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

Состав коменентов образа может отличаться в зависимости от используемой ОС.

  1. Spice vdagent

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

  2. Spice webdavd

    Служба, которая использует протокол WebDAV для предоставления общего доступа к файлам ВМ.

  3. 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.

  4. QEMU Guest Agent

    Утилита для взаимодействия с гипервизором SpaceVM.

  5. LoudPlay server

    Утилита для работы по протоколу LoudPlay.

  6. 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 работать не будет.

image

Примечание

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


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

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

Также в 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 из раскрывающегося списка;

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


В ВМ во вкладке ВМ/Шаблон при активном 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

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

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

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

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

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

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

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

image


Запуск пользовательских скриптов через 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 не заносится.