Клонирование клиентов из единого образа¶
Кейс описывает, как корректно развернуть клиент RuDesktop на множестве машин, созданных из общего образа (VDI, шаблон ВМ, golden-image для PXE, контейнер) — так, чтобы каждая клонированная машина получила уникальную идентификацию на сервере и не конфликтовала с другими клонами
Важно
Кейс применим только при работе с локальным сервером RuDesktop. Используемые команды клиента use-random-uuid и reset-state доступны только в локальной версии клиента — в облачной версии они отключены
В чём проблема¶
Внутренний UUID клиента по умолчанию формируется из machine_uid операционной системы — стабильного идентификатора, привязанного к параметрам железа. Это удобно для физических машин, но в виртуальных средах machine_uid часто совпадает у всех клонов: все они унаследовали одинаковые параметры от исходного образа
Если клиент уже зарегистрирован на сервере в момент снятия образа или просто запущен с одинаковым UUID на разных клонах:
сервер видит клонов как одно и то же устройство, переписывая запись при каждой регистрации
параллельные сессии с разных клонов «смешиваются» под один ID
инвентаризация и логи действий «прыгают» между машинами
в списке устройств часть клонов вообще не появляется
Как решить¶
Связка двух команд клиента:
use-random-uuid — переключает клиент в режим случайного UUID (отвязывает его от
machine_uid)reset-state — обнуляет
id, сертификат и мастер-пароль и инициирует перегенерацию UUID
После их выполнения каждый клон получает:
уникальный случайный UUID
пустой публичный
id— будет выдан сервером при первой регистрациисвежий сертификат, выпускаемый сервером заново
новый мастер-пароль, который клиент тут же отправит на сервер
Подготовка базового образа¶
Вариант, при котором клиент в образе ещё не зарегистрирован на сервере. Это самый чистый сценарий — на сервере не появляется лишних «фантомных» записей
Установить клиент RuDesktop обычным способом, дождаться завершения установки
Не запускать клиент, либо сразу после первого запуска выполнить:
rudesktop services stopВключить режим случайного UUID, чтобы последующая перегенерация UUID сразу выдала случайный, не привязанный к
machine_uid:rudesktop --use-random-uuid trueУдалить состояние, которое клиент мог сохранить за время установки и тестирования, и перегенерировать UUID в случайный:
rudesktop --reset-stateСнять образ системы (sysprep на Windows, очистка
machine-idна Linux при необходимости — отдельный шаг ОС, не относящийся к RuDesktop)
Подсказка
Если клиент во время подготовки образа всё-таки успел зарегистрироваться на сервере — после снятия образа удалите эту «эталонную» запись на странице Устройства, чтобы её ID не «занимал место»
Применение на клонированной машине¶
После того как клон загружен и получил уникальные сетевые параметры (имя хоста, MAC, IP), на нём нужно один раз выполнить связку команд:
rudesktop --use-random-uuid true
rudesktop --reset-state
Что произойдёт:
--use-random-uuid trueсразу выдаст случайный UUID, не зависящий отmachine_uidОС--reset-stateобнулитid, сертификат и мастер-пароль, после чего клиент при следующем подключении к серверу пройдёт новую регистрацию и получит собственныйid
Дальше клиент работает как обычно — на сервере появляется свежая запись, не пересекающаяся с другими клонами
Важно
Порядок важен. Сначала --use-random-uuid true (включает режим), затем --reset-state (использует включённый режим при перегенерации UUID). При обратном порядке --reset-state сгенерирует UUID из machine_uid — то есть тот же самый, что и у других клонов
Важно
Флаги нельзя передать в одной команде (rudesktop --use-random-uuid true --reset-state) — клиент обработает только первый флаг и завершит работу, второй будет проигнорирован. Связка должна выполняться двумя отдельными вызовами rudesktop в указанном порядке
Автоматизация запуска связки¶
Команды нужно выполнять только один раз — при первой загрузке клона. Удобные способы это автоматизировать:
Linux — добавить связку в cloud-init (
runcmd), в скриптrc.localс однократным маркером, или вsystemd-юнит типаoneshotс условием существования файла-флагаWindows — выполнить связку из
setupcomplete.cmdпослеsysprepили из задания планировщика, отключающего себя после выполненияVDI — встроить связку в скрипт первой загрузки сессии (например, в шаблоне Citrix/VMware Horizon)
Контейнеры — выполнить связку в ENTRYPOINT перед запуском основной службы клиента
Также для разовой ручной раскатки на уже стоящих клонах годится политика Выполнить команду — её можно запустить на группе устройств, но только если клиенты до этого уже корректно зарегистрировались на сервере под разными id (иначе политика не сможет их различить)
Проверка¶
Запустить на каждой клонированной машине:
rudesktop --get-uuidПолученные значения должны отличаться между всеми клонами
Открыть в веб-интерфейсе сервера страницу Устройства и убедиться, что:
каждая клонированная машина присутствует отдельной записью
idвсех записей различаютсяв свойствах устройства поле UUID уникально для каждой записи
Подключиться к одному из клонов по ID — сессия должна установиться именно к нему, без «прыжка» на другую машину
Примечание
Если на сервере всё равно остаются дубликаты, проверьте:
что
--use-random-uuid trueотработал ДО--reset-state;что в исходном образе клиент не успел зарегистрироваться под общим
id(если успел — удалите эталонную запись на сервере и повторите связку на клонах)
См. также
Если в инфраструктуре имена хостов уникальны (например, доменные устройства), альтернативой может быть назначение устройствам hostname в качестве идентификатора — см. кейс Использование hostname в качестве ID устройства