130 lines
7.0 KiB
Markdown
130 lines
7.0 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 -Version 2.5 -MasterPassword 'ваш-аварийный-секрет'
|
||
```
|
||
→ появится `buttontask-deploy-2.5.tgz` (бинарник + webconfig + пакеты +
|
||
device-install.sh, все скрипты уже в LF). Бинарник по умолчанию берётся из
|
||
`.\software\ButtonTask` (иначе задайте `-BinPath`).
|
||
|
||
Перед сборкой обновите `.\software\`: свежий `ButtonTask` (arm64) и актуальный
|
||
`webconfig\` из репозитория (OTA теперь синхронизирует `/opt/buttontask/scripts/`
|
||
и sudoers из пакета при staging).
|
||
PNG/JPG/SVG/GIF из `.\software\` и `.\software\icons\` попадут в
|
||
`/opt/buttontask/icons/`. Дефолтный конфиг уже содержит кнопку
|
||
`Вызов клининга` с иконкой `cleaner1Crop.png`.
|
||
Сеть: отредактируйте `.\software\config\network.json` перед сборкой
|
||
(по умолчанию `eth0` static `192.168.1.60/24`).
|
||
|
||
---
|
||
|
||
## Развёртывание на устройства (шаг 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` **по умолчанию не трогает**
|
||
(upgrade-safe). Для полного сброса: `BUTTONTASK_RESET_CONFIG=1` или
|
||
`deploy-adb.ps1 -ResetConfig`, либо галочка в sshDeploy GUI.
|
||
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 buttontask-network`; старт — после ребута.
|
||
UI (`buttontask`) не ждёт поднятия IP — сеть настраивается параллельно с коротким таймаутом.
|
||
9. Если в бандле есть `config/.master` — кладёт аварийный мастер-пароль (web + Qt).
|
||
|
||
Идемпотентен: повторный прогон безопасен.
|
||
|
||
---
|
||
|
||
## Грабли
|
||
|
||
- **Версия 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` / пароль `admin` (из
|
||
`settings.password`, смените в вебе). Аварийный мастер-пароль — из `-MasterPassword`
|
||
при сборке бандла или `sudo /opt/buttontask/scripts/bt-set-master`.
|