116 lines
5.7 KiB
Markdown
116 lines
5.7 KiB
Markdown
# Деплой 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` — смените).
|