README.md

Инструменты подготовки и оптимизации гостевой ОС Termidesk

Инструменты предназначены для подготовки «золотого» образа гостевой ОС Astra Linux SE 1.7/1.8 для использования в инфраструктуре виртуальных рабочих мест Termidesk VDI. Инструменты работают на самой гостевой ВМ (oVirt/QEMU), выполняют все операции и формируют отчёт.

Документация рассчитана на инженера: ниже — назначение, запуск, параметры конфигурации, описание функций и файлов.


Содержание

  1. Требования
  2. Состав и назначение скриптов
  3. Быстрый старт
  4. Интерактивная работа (start.sh)
  5. Неинтерактивный / GUI режим
  6. Профили оптимизации
  7. Функции (пункты меню) 1–22
  8. Конфигурационный файл config
  9. Каталог files/ и списки
  10. Взаимоисключения протокола и домена
  11. Резервные копии и восстановление
  12. Журналы и отчёты
  13. Оценка готовности образа (assess-optimization.sh)
  14. Видеоподсистема QXL / TERA-QXL
  15. Локализация (i18n)
  16. Сборка и упаковка
  17. Бренд 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 последовательно:

  1. Показывает EULA (текст из README).
  2. Спрашивает протокол доставки: SPICE или TERA (взаимоисключающие).
  3. Спрашивает способ входа в домен: AD, FreeIPA или ALD Pro (взаимоисключающие; можно «никакой»).
  4. Предлагает профиль оптимизации (см. раздел 6); в профиле «вручную» показывает чек-лист функций.
  5. Запускает выбранные функции (см. раздел 7).
  6. Формирует отчёт-таблицу на весь терминал и сохраняет 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-supportbackup/etc/acpi/events/powerbtn-acpi-support.backup
  • /usr/share/fly-wm/theme/default.themercbackup/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 безопасно: они читаются построчно с учётом комментариев (#).
Описание
Инструмент оптимизации гостевой ОС Astra Linux SE
Конвейеры
0 успешных
0 с ошибкой
Разработчики