# Деплой ButtonTask по ADB (offline, RK3566, хост — Windows) Голое устройство по USB → adb → один прогон → ребут → работает. Пакеты ставятся офлайн; зависимости берутся с референс-устройства. Хост — Windows, PowerShell, **без WSL и без docker**. `adb.exe` (и `AdbWinApi.dll`, `AdbWinUsbApi.dll` рядом с ним) лежит в `.\bin\`. Скрипты сами его оттуда подхватывают — ничего в PATH прописывать не нужно. --- ## Раскладка папки ``` deploy\ bin\ adb.exe AdbWinApi.dll AdbWinUsbApi.dll packages.list collect-on-device.sh device-install.sh collect-debs.ps1 make-adb-bundle.ps1 deploy-adb.ps1 deploy.cmd <- двойной клик для не-специалиста (шаг 4) ``` --- ## Подготовка (один раз, делаете ВЫ) Нужно: ваш собранный бинарник `ButtonTask` под **arm64** (собранный на том же релизе Debian, что и устройства), репозиторий ButtonTask, и два устройства — **target** (голое) и **reference** (на столе, с интернетом). ### Шаг 1 — снять список пакетов с голого устройства Подключите по USB **только target**. В папке `deploy` откройте PowerShell (Shift+ПКМ по папке → «Открыть окно PowerShell здесь») и выполните: ``` powershell -ExecutionPolicy Bypass -File collect-debs.ps1 -Step target ``` → появится `target-installed.txt`. ### Шаг 2 — скачать недостающие пакеты на референсе Отключите target. Подключите **только reference** (с интернетом): ``` powershell -ExecutionPolicy Bypass -File collect-debs.ps1 -Step fetch ``` → скачает нужные `.deb` в `.\debs`. Если оба устройства — один и тот же чистый образ, шаг 1 можно пропустить. ### Шаг 3 — собрать бандл ``` powershell -ExecutionPolicy Bypass -File make-adb-bundle.ps1 -RepoRoot C:\src\ButtonTask -Version 2.1 ``` → появится `buttontask-deploy-2.1.tgz` (бинарник + webconfig + пакеты + device-install.sh, все скрипты уже в LF). Бинарник по умолчанию берётся из `C:\src\ButtonTask\build\ButtonTask` (иначе задайте `-BinPath`). --- ## Развёртывание на устройства (шаг 4) Это можно отдавать **не специалисту**. Достаточно отдать папку с: `bin\`, `deploy-adb.ps1`, `deploy.cmd` и одним файлом `buttontask-deploy-2.1.tgz`. Инструкция для него — три строчки: 1. Подключи устройство к ноутбуку USB-кабелем. 2. Двойной клик по **deploy.cmd**. 3. Дождись зелёного «ГОТОВО», отключи устройство. Следующее — так же. `deploy.cmd` сам найдёт единственный `.tgz` рядом, дождётся появления устройства (до 60 c), зальёт, поставит офлайн, перезагрузит и проверит, что сервисы поднялись. Если что-то не так — покажет понятную ошибку и не закроется сразу. --- ## Что делает device-install.sh на устройстве 1. `dpkg -i debs/*.deb` офлайн (два прохода), `ldconfig`. 2. Создаёт пользователя `buttontask`, группы `video render input`. 3. Раскладывает `/opt/buttontask/{versions/,config,icons,run,scripts}`, симлинк `current`. Существующий `config.json` не трогает. 4. Хелперы `bt-*` + `sudoers` (+`visudo -c`). 5. `/tmp/runtime-buttontask` через `tmpfiles.d` (переживает ребут). 6. Авто-детект тачскрина → `override.conf` с нужным `eventN`. 7. Выключает `display-manager` (eglfs забирает KMS/DRM). 8. `systemctl enable buttontask buttontask-web`; старт — после ребута. Идемпотентен: повторный прогон безопасен. --- ## Грабли - **Версия Qt.** Бинарник и пакеты — одного релиза Debian, иначе рантайм-Qt не совпадёт с линковкой. Собирайте бинарник на том же релизе, что устройства. - **reference без интернета.** Шаг 2 требует интернет на референсе. - **adb не root.** На Rockchip обычно root. Если нет — скрипт идёт через `sudo` (нужен пассвордлесс-sudo для adb-пользователя). - **Драйвер ADB на Windows.** Для первого подключения может понадобиться установить USB-драйвер (Google USB Driver / производителя платы), иначе устройство в `adb devices` не появится. ## Диагностика (если зелёного «ГОТОВО» нет) ``` bin\adb.exe shell systemctl status buttontask buttontask-web bin\adb.exe shell journalctl -u buttontask -b --no-pager bin\adb.exe shell ls -l /opt/buttontask/current ``` Веб-конфигуратор: `http://:8080`, логин `admin` + пароль из `settings.password` (по умолчанию `admin` — смените).