Files
XC_VM/tools/test-install
Divarion_D 94702edff0 feat(ffmpeg): one folder per build, labelled by what the binary says
Folders in bin/ffmpeg_bin/ were named by a two-number label that did not
say what was inside: the rebuilt "4.0" is FFmpeg 4.4.5, and XUI's 4.0 and
ours could only ever share the one folder.

- A folder name is a build id: <major>.<minor> is ours and names the
  build's real minor version (labels 4.4, 7.1, 8.1); <major>.<minor>-<vendor>
  is someone else's and never touched. XUI's 4.0 moves to 4.0-xui.
- place() refuses an archive whose BUILD_INFO is another version than its
  label.
- A setting naming a build the node lacks takes the same minor, then the
  newest of its major, then the newest build there is, so no stored value
  needs rewriting; the dts_legacy_ffmpeg path asks FfmpegPaths::legacy()
  (XUI's 4.0, else the newest 4.x) instead of a fixed 4.0 path.
- -nofix_dts goes only to XUI's build (4.0-xui, or 4.0 before it moves),
  read from the folder actually used.
- Settings: builds listed from the folder (no hard-coded fallback list),
  labelled and sorted by the version the binary prints; the ffmpeg logic
  moved from the view to SettingsController; ffmpeg_cpu/ffmpeg_gpu that
  are no build id are not saved.
2026-10-12 19:04:16 +03:00
..

Test Install Container

Тестовый Docker-контейнер Ubuntu 24.04 для проверки установки XC_VM из dist/XC_VM.zip.

Требования

  • Docker + Docker Compose
  • Собранный dist/XC_VM.zip (через make main)

Структура

tools/test-install/
├── Dockerfile                   # образ Ubuntu 24.04 + systemd + встроенный install-скрипт
├── docker-compose.yml           # runtime-конфиг (volumes, ports, privileged, cgroup)
├── test_release.sh              # управляющий скрипт (install / clean / logs / sync / streamtest*)
├── streamtest_in_container.sh   # прогон стрим-теста внутри контейнера
├── STREAMTEST.md                # инструкция по e2e стрим-тесту (ручная настройка → бэкап → прогон)
└── README.md

Использование

# Собрать образ, запустить контейнер и выполнить установку (всё сразу)
./tools/test-install/test_release.sh

# Запустить на нестандартном host-порту (пример: HTTP 18080, HTTPS 18443)
XCVM_HTTP_PORT=18080 XCVM_HTTPS_PORT=18443 ./tools/test-install/test_release.sh

# Задать нестандартные внутренние порты панели (те, что пишет install в nginx)
XCVM_INSTALL_HTTP_PORT=8081 XCVM_INSTALL_HTTPS_PORT=4443 ./tools/test-install/test_release.sh

# Комбинированно: внешние и внутренние порты одновременно
XCVM_HTTP_PORT=18080 XCVM_HTTPS_PORT=18443 XCVM_INSTALL_HTTP_PORT=8081 XCVM_INSTALL_HTTPS_PORT=4443 ./tools/test-install/test_release.sh

# Удалить контейнер и образ
./tools/test-install/test_release.sh clean

# Посмотреть лог установки
./tools/test-install/test_release.sh logs

# Синхронизировать src/ в работающий контейнер
./tools/test-install/test_release.sh sync

# Войти в контейнер вручную
docker exec -it xcvm-test-install bash

Стрим-тест (e2e)

Сквозная проверка стриминга панели: генератор → рестрим панели → stream_check.py (JSON-лог по каждому каналу). Панель настраивается один раз вручную, конфигурация снимается в дамп БД и восстанавливается для повторяемых прогонов — без прямых SQL-запросов. Полная инструкция: STREAMTEST.md.

./tools/test-install/test_release.sh streamtest-gen        # генератор для ручной настройки
./tools/test-install/test_release.sh streamtest-backup     # снять дамп настроенной БД
./tools/test-install/test_release.sh streamtest            # восстановить дамп и прогнать checker

Что проверяется

Встроенный в Dockerfile install-скрипт:

  1. Распаковывает XC_VM.zip
  2. Запускает python3 install с автоматическими ответами на интерактивные вопросы
  3. Проверяет наличие ключевых файлов после установки:
    • /home/xc_vm/console.php, vendor/autoload.php, bootstrap.php
    • /home/xc_vm/config/config.ini
    • /home/xc_vm/bin/nginx/sbin/nginx
    • /home/xc_vm/bin/php/bin/php
    • /home/xc_vm/bin/redis/redis-server

Порты

  • XCVM_HTTP_PORT (по умолчанию 8880) → container XCVM_INSTALL_HTTP_PORT (или 80)
  • XCVM_HTTPS_PORT (по умолчанию 8443) → container XCVM_INSTALL_HTTPS_PORT (или 443)

Внутренние порты, которые настраивает install в контейнере:

  • XCVM_INSTALL_HTTP_PORT (по умолчанию пусто → 80)
  • XCVM_INSTALL_HTTPS_PORT (по умолчанию пусто → 443)

Важно: маппинг target-порта теперь синхронизирован автоматически с XCVM_INSTALL_HTTP_PORT/XCVM_INSTALL_HTTPS_PORT.

Примечания

  • Контейнер запускается с --privileged и systemd (PID 1) — необходимо для systemctl
  • MariaDB устанавливается и настраивается внутри контейнера