Files
Button/winDeployScripts/README-deploy.md
T
2026-06-25 15:28:46 +03:00

116 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Деплой 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/<ver>,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://<ip>:8080`, логин `admin` + пароль из
`settings.password` (по умолчанию `admin` — смените).