Инструменты подготовки и оптимизации гостевой ОС Termidesk
Инструменты предназначены для подготовки «золотого» образа гостевой ОС Astra Linux SE 1.7/1.8 для использования в инфраструктуре виртуальных рабочих мест Termidesk VDI. Инструменты работают на самой гостевой ВМ (oVirt/QEMU), выполняют все операции и формируют отчёт.
Документация рассчитана на инженера: ниже — назначение, запуск, параметры конфигурации, описание функций и файлов.
Содержание
- Требования
- Состав и назначение скриптов
- Быстрый старт
- Интерактивная работа (start.sh)
- Неинтерактивный / GUI режим
- Профили оптимизации
- Функции (пункты меню) 1–22
- Конфигурационный файл config
- Каталог files/ и списки
- Взаимоисключения протокола и домена
- Резервные копии и восстановление
- Журналы и отчёты
- Оценка готовности образа (assess-optimization.sh)
- Видеоподсистема QXL / TERA-QXL
- Локализация (i18n)
- Сборка и упаковка
- Бренд Termidesk
1. Требования
- Гостевая ОС Astra Linux Special Edition 1.7 / 1.8 (рабочий стол Fly).
- Привилегии root (скрипты сами вызывают
sudo, если запущены непривилегированным пользователем). - Пакеты:
whiptail(для текстового интерфейса) /zenity(для GUI),util-linux(findmnt,fstrim),shc(только для сборки). - Выполнение — в терминале на самой ВМ (не headless, без реальной ВМ Astra инструмент не запускается).
2. Состав и назначение скриптов
| Файл | Назначение |
|---|---|
termidesk-<версия>.bin |
Единый скомпилированный бинарник (ELF, shc): объединяет start.sh, start-gui.sh, restore-backup.sh, assess-optimization.sh и все модули src/*. Конфиги (config, files/*, locale/, README, brand/) — внешние, читаются из каталога .bin. Результат ci/build.sh --build. Имя включает версию (например, termidesk-1.2.bin). |
start.sh |
Исходник основного интерактивного инструмента (TUI на whiptail); в дистрибутив не входит — инлайнится в termidesk-<версия>.bin. |
start-gui.sh |
Исходник графической обёртки на zenity; в дистрибутив не входит — инлайнится в termidesk-<версия>.bin. |
assess-optimization.sh |
Исходник оценки, насколько образ оптимизирован для VDI (в процентах); в дистрибутив не входит — инлайнится в termidesk-<версия>.bin. |
restore-backup.sh |
Исходник восстановления файлов из резервной копии backup/; в дистрибутив не входит — инлайнится в termidesk-<версия>.bin. |
ci/build.sh |
Служебный: сборка, упаковка, локализация; в дистрибутив не входит. |
termidesk-optimization.desktop |
Шаблон ярлыка Рабочего стола для GUI-запуска. |
config |
Параметры путей и файлов (см. раздел 8). |
src/* |
Исходники модулей функций оптимизации; в дистрибутив не входят — инлайнятся в termidesk-<версия>.bin. |
files/* |
Конфигурационные списки (см. раздел 9). |
brand/termidesk.svg/.png |
Логотип Termidesk для GUI. |
locale/ru/* |
Русская локализация (gettext). |
3. Быстрый старт
# Сборка дистрибутива (на машине разработчика):
./ci/build.sh --build # → _build/termidesk-<версия>.bin + вся структура (config, files, locale, ...)
./ci/build.sh --tar # → termidesk-optimization-tools-astra-<версия>.tar.gz
После работы инструмента гостевую ОС нужно перезагрузить и протестировать.
Единый бинарник termidesk-<версия>.bin
Результат ci/build.sh --build — единый скомпилированный бинарник termidesk-<версия>.bin (ELF, shc), объединяющий все 4 скрипта и модули в один файл. Имя включает версию из config (например, termidesk-1.2.bin). Конфиги остаются внешними — читаются из каталога .bin.
Версия определяется в порядке приоритета: переменная окружения VERSION → файл config (VERSION="...") → git tag → fallback 0.0.0.
# Использование (конфиги config/, files/, locale/, brand/ — рядом с .bin):
./termidesk-1.2.bin # основной TUI (start.sh)
./termidesk-1.2.bin --gui # графический режим (start-gui.sh)
./termidesk-1.2.bin --restore # восстановление из backup (restore-backup.sh)
./termidesk-1.2.bin --assess # оценка оптимизации (assess-optimization.sh)
./termidesk-1.2.bin --version
./termidesk-1.2.bin --help
4. Интерактивная работа (start.sh)
start.sh последовательно:
- Показывает EULA (текст из
README). - Спрашивает протокол доставки:
SPICEилиTERA(взаимоисключающие). - Спрашивает способ входа в домен:
AD,FreeIPAилиALD Pro(взаимоисключающие; можно «никакой»). - Предлагает профиль оптимизации (см. раздел 6); в профиле «вручную» показывает чек-лист функций.
- Запускает выбранные функции (см. раздел 7).
- Формирует отчёт-таблицу на весь терминал и сохраняет CSV в
report/.
Во время работы:
- изменяемые системные файлы копируются в
backup/(зеркалирование абсолютного пути); - вывод дублируется в журнал
logs/tdsk-optimize<дата-время>.log(и.err).
5. Неинтерактивный / GUI режим
start.sh умеет работать без диалогов (используется обёрткой start-gui.sh и удобен для автоматизации):
export NONINTERACTIVE=1
export PROTOCOL=spice # spice | tera
export DOMAIN=ad # ad | freeipa | aldpro | none
export PROFILE=office # office | advanced | graphics | custom
export SELECTIONS="3 11 18" # перечень пунктов функций, если PROFILE=custom (или не задан)
./start.sh
Правила неинтерактивного режима:
- если задан
PROFILEнеcustom— functions берутся из профиля (profile_set); - иначе функции берутся из
SELECTIONS(номера через пробел); - все whiptail-диалоги пропускаются;
- внутренние запросы «Да/Нет» автоматически отвечают «Да» (ввод перенаправляется из
yes Y).
start-gui.sh (zenity) сама собирает протокол/домен/профиль/функции и передаёт их в start.sh именно так, с элевацией pkexec/sudo.
6. Профили оптимизации
При запуске выбирается профиль (в GUI это отдельный шаг). Профиль — это предустановленный набор пунктов функций (profile_set в start.sh):
| Профиль | Номера функций | Смысл |
|---|---|---|
office — офисная нагрузка |
1 2 3 4 6 8 9 10 11 12 13 14 15 18 19 20 22 |
Максимум производительности и минимум сетевого трафика: останавливает сетевые/фоновые службы, автообновление, включён fly low-perf, отключает диалог «сессия не завершена», выполняет дефрагментацию. |
advanced — продвинутый пользователь |
1 2 3 6 11 12 13 14 18 21 22 |
Сбалансированный набор: установка/удаление пакетов, службы, очистка, sysctl, видео QXL/TERA-QXL, диалог сессии. |
graphics — работа с графикой |
1 6 11 13 18 21 |
Видео/3D: оптимизация видеоподсистемы QXL/TERA-QXL, sysctl, базовая очистка. Не отключает эффекты Fly. |
custom — вручную |
чек-лист | Пользователь отмечает любые пункты. |
Для графического профиля терминал-CPU-оптимизации fly (low-perf) намеренно не используется — нужны эффекты рабочего стола.
7. Функции (пункты меню) 1–22
| № | Пункт меню | Модуль / функция | Что делает |
|---|---|---|---|
| 1 | Установка требуемых пакетов | src/pkgoperation / pkginstall |
Ставит pkg_required_common.txt + список выбранного протокола; удаляет пакеты противоположного протокола и противоположных доменов. |
| 2 | Остановка рекомендованных служб | src/services / services_stop |
Останавливает/отключает активные astra_opt_services.txt. |
| 3 | Удаление рекомендованных пакетов | src/pkgoperation / pkgremove |
Удаляет установленные пакеты из pkg_remove.txt. |
| 4 | Удаление больших файлов | src/usershome / bigfiles |
Ищет файлы крупнее $FILESIZE в /home. |
| 5 | Очистка логов пользователей | src/usershome / ulog_clean |
Обнуляет *.log в домашних каталогах. |
| 6 | Очистка системных логов | src/systems / slog_clean |
Обнуляет/удаляет логи в /var/log. |
| 7 | Очистка кеша браузеров | src/usershome / webbrowsers_clean |
Удаляет кеш, историю, куки, пароли и закладки в Firefox и Chromium-браузерах (chromium, google-chrome, yandex-browser). |
| 8 | Очистка истории bash | src/usershome / baqshhistory |
Удаляет ~/.bash_history. |
| 9 | Оптимизация Fly | src/flydesktop / flydesktop |
Применяет fly-optimization.conf к *.themerc (системные и ~/.fly). |
| 10 | Очистка временных файлов | src/systems / tmpclean |
Чистит /tmp, /var/tmp. |
| 11 | Очистка кеша apt | src/systems / aptclean |
Очищает локальный репозиторий apt. |
| 12 | Очистка журнала (journal) | src/systems / purgejournal |
journalctl --rotate, --vacuum-time=1s. |
| 13 | Кнопка питания | src/systems / powerbutton |
Патчит /etc/acpi/events/powerbtn-acpi-support (немедленное выключение). |
| 14 | Отключение автообновления | src/services / stopautoupgreade |
Останавливает/отключает apt-daily*.timer. |
| 15 | Удаление NetworkManager (SE 1.7) | src/systems / nmremove |
Маскирует и удаляет NetworkManager (только SE 1.7). |
| 16 | Компонент TERA | src/tera / teraconfig |
Включает службы TERA, добавляет fly-dm в группу sasl, перенастраивает tera-vdagent. Только для TERA. |
| 17 | TERA USB | src/tera / terausb |
Ставит tera-usb и модуль ядра tera-usb-<uname -r> для проброса USB. Только для TERA. |
| 18 | Оптимизация системы для VDI | src/desktop / sysopt |
Отключает службы astra_opt_services.txt (только установленные), пишет /etc/sysctl.d/99-vdi-performance.conf (vm.swappiness=10, vm.vfs_cache_pressure=50). |
| 19 | Optimize Fly (hard mode) | src/desktop / flyopt |
Углублённая оптимизация .themerc: LowPerf, обнуление скоростей, выравнивание цветов *Color2 = *Color, добавление отсутствующих ключей. |
| 20 | Дефрагментация | src/systems / defrag |
fstrim по реальным ФС (ext2/3/4, xfs, btrfs) до и после обнуления свободного места (dd if=/dev/zero, запас 256 МиБ) — подготовка к тонкому выделению. |
| 21 | Видеоподсистема QXL / TERA-QXL | src/desktop / qxlopt |
Ставит драйвер QXL/TERA-QXL, пишет /etc/X11/xorg.conf.d/30-termidesk-qxl.conf (glamor/DRI3, TeraAccel для TERA). Ориентиры TERA-QXL: задачи WP/REQT Termidesk. |
| 22 | Отключение диалога «сессия не завершена» | src/usershome / nosessiondialog |
Удаляет состояние восстановления сессии Fly (~/.config/fly/session, ~/.local/share/fly/session, startupconfig*, ~/.cache/fly*, ICE/Xauthority) у всех пользователей и в /etc/skel. |
Пункты 15–17 зависят от выбранного протокола/релиза. Пункты 16/17 доступны только при PROTOCOL=tera.
8. Конфигурационный файл config
| Параметр | Назначение |
|---|---|
TEXTDOMAIN, TEXTDOMAINDIR |
Домен/каталог gettext-локализации. |
PKGFILE_COMMON |
Общие пакеты для установки (не зависят от протокола). |
PKGFILE_SPICE / PKGFILE_TERA |
Пакеты протокола SPICE / TERA. |
PKGFILE_AD / PKGFILE_FREEIPA / PKGFILE_ALDPRO |
Пакеты входа в домен AD / FreeIPA / ALD Pro. |
SRVFILE |
Список отключаемых служб (теперь files/astra_opt_services.txt). |
RMPKGFILE |
Список удаляемых пакетов. |
FLYFILE |
Параметры оптимизации Fly. |
BACKUPDIR |
Каталог резервных копий (backup). |
FILESIZE |
Порог для поиска «больших файлов» (по умолчанию 500M). |
LOGFILE, ERRFILE |
Имена журналов (создаются в logs/). |
9. Каталог files/ и списки
Все списки читаются построчно и поддерживают комментарии: строки, начинающиеся с #, и пустые строки игнорируются; ведущие/хвостовые пробелы снимаются (общий хелпер _clean_line в src/helpers). Новое значение — просто новая строка; закомментировать — поставить #.
| Файл | Содержимое |
|---|---|
pkg_required_common.txt |
Обязательные пакеты при любом протоколе (qemu-guest-agent, davfs2, termidesk-agent, termidesk-pcsc-vscard, termidesk-video-agent). |
pkg_required_spice.txt |
Пакеты SPICE: xserver-xorg-video-qxl, spice-vdagent, spice-webdavd. |
pkg_required_tera.txt |
Пакеты TERA: termidesk-tera, tera-vdagent, tera-qxl, tera-audio, tera-record, tera-folder-redirection, tera-router, tera-usb. |
pkg_domain_ad.txt |
Пакеты входа в AD (astra-ad-sssd-client). |
pkg_domain_freeipa.txt |
Пакеты входа в FreeIPA (astra-freeipa-client). |
pkg_domain_aldpro.txt |
Пакеты входа в ALD Pro (aldpro-client). |
pkg_remove.txt |
Пакеты, удаляемые в образе (локальная виртуализация, RDP/VNC-серверы, средства отладки, игры). |
astra_opt_services.txt |
Службы, отключаемые в гостевой VDI (читаются и пунктом 2, и пунктом 18). cups намеренно не входит — нужна для редиректа принтеров TERA. |
fly-optimization.conf |
Пары Ключ = Значение для *.themerc Fly (LowPerf, скорости, эффекты, анимации и т.д.). |
10. Взаимоисключения протокола и домена
- Протокол: SPICE и TERA не могут работать совместно. Устанавливаются пакеты выбранного протокола; пакеты противоположного удаляются.
- Домен: AD, FreeIPA и ALD Pro не могут сосуществовать. Устанавливаются пакеты выбранного домена; пакеты остальных доменов удаляются.
Поэтому у новой ВМ выбирается один протокол и один домен.
11. Резервные копии и восстановление
Инструмент перед изменением системного файла сохраняет его копию в backup/, зеркалируя абсолютный путь:
/etc/acpi/events/powerbtn-acpi-support→backup/etc/acpi/events/powerbtn-acpi-support.backup/usr/share/fly-wm/theme/default.themerc→backup/usr/share/fly-wm/theme/default.themerc.backup
Пути созданных копий попадают в отчёт (консоль + CSV, секция «Резервные копии»).
Восстановление:
./restore-backup.sh # покажет список, спросит подтверждение, восстановит файлы
Скрипт находит все *.backup под backup/, восстанавливает их в исходные абсолютные пути и требует root.
12. Журналы и отчёты
- Журналы:
logs/tdsk-optimize<дата-время>.logи.err;logs/в.gitignore. - Отчёт: распечатывается таблицей на весь терминал (правый столбец Pass/Failed прижат к правой границе, ширина по байтам,
_pad_b), плюс сохраняется CSV:report/termidesk-report-<дата-время>.csv— заголовок, строки"Секция";"Действие";"Результат", секция «Резервные копии».- CSV с BOM UTF-8 и разделителем
;— открывается в русском Excel.
13. Оценка готовности образа
./assess-optimization.sh (root) читает состояние системы и считает уровень (0–100%) по трём категориям:
- Память / ядро —
vm.swappiness(цель 10),vm.vfs_cache_pressure(цель 50), свободная RAM по/proc/meminfo; - Диск — занятость
/, размер журнала, кеша apt и/var/log; - Службы / Fly / автозапуск — активность служб из
astra_opt_services.txt, таймерыapt-daily*, статус NetworkManager,LowPerfв.themerc.
Итог = 35%·память + 35%·диск + 30%·прочее. Вывод — цветной (гугл-шкала + расшифровка «хорошо/частично/не оптимизирован»), плюс CSV report/termidesk-assessment-<дата>.csv.
Критерии совпадают с тем, что делает инструмент оптимизации, поэтому оценку можно использовать как чек после прогона.
14. Видеоподсистема QXL / TERA-QXL
Пункт 21 (qxlopt) настраивает видеоадаптер в зависимости от протокола:
- SPICE (QXL): пакеты
xserver-xorg-video-qxl+qxl-dri-driver; - TERA (TERA-QXL): пакет
tera-qxl+qxl-dri-driver(TERA-QXL — форк QXL из задач WP/REQT); - в обоих случаях пишется
/etc/X11/xorg.conf.d/30-termidesk-qxl.conf: включаютсяdri3,glamoregl, драйверqxlсAccelMethod=glamor(для TERA — дополнительноTeraAccel=true).
Для графики важно, чтобы был установлен соответствующий пакет драйвера (SPICE — через pkg_required_spice.txt, TERA — через pkg_required_tera.txt), а Xorg-конфиг подключал ускорение.
15. Локализация (i18n)
Интерфейсные строки обёрнуты в gettext $"...". Исходник — locale/ru/termidesk.po, скомпилированный locale/ru/LC_MESSAGES/termidesk.mo в репозитории.
Обновление перевода:
./ci/build.sh --pot # слияние новых строк в termidesk.po
./ci/build.sh --mo # компиляция termidesk.mo
Важно: у .po должен быть корректный gettext-заголовок (charset=UTF-8), иначе msgmerge испортит кириллицу. Если --pot падает с «повторное определение сообщения» (одинаковый текст в разных модулях) — нужные блоки добавляются вручную.
16. Сборка и упаковка
./ci/build.sh --build # собирает _build/: копирует структуру + компилирует termidesk-<версия>.bin (shc)
./ci/build.sh --tar # пакует _build/ в termidesk-optimization-tools-astra-<версия>.tar.gz
--build создаёт чистый каталог _build/, копирует туда рабочие файлы (config, files, locale, src, скрипты, brand и т.д.), затем генерирует единый termidesk-<версия>.bin: инлайнит все модули src/* и 4 скрипта в один bash-скрипт (обёртка в функции main/gui/restore/assess + диспетчер режимов), компилирует его через shc в ELF-бинарник. Если shc недоступен — fallback: остаётся нескомпилированный скрипт.
Подробная пошаговая инструкция по сборке, упаковке и проверке дистрибутива — в файле ci/BUILD.md.
17. Бренд Termidesk
brand/termidesk.svg/.png— логотип Termidesk; используется GUI (start-gui.shпередаёт его в--window-icon) и ярлыком.desktop(Icon=termidesk; для подстановки иконки зарегистрируйтеbrand/termidesk.pngкак иконкуtermideskчерезxdg-icon-resourceили укажите абсолютный путь).- Консольный баннер и отчёт используют фирменную палитру Termidesk (фиолетовый/синий; см.
brand_violet/brand_blue/brand_dimвstart.sh).
Примечания
- После окончания работы обязательно перезагрузите гостевую ВМ и проверьте: вход, сеть, разрешение экрана, звук, перенаправление принтеров/USB.
- Не удаляйте каталог
backup/до тех пор, пока образ не протестирован — через него возможен откат (restore-backup.sh). - Изменять списки в
files/иconfigбезопасно: они читаются построчно с учётом комментариев (#).