Files
2026-08-24 16:40:48 +03:00

130 lines
7.0 KiB
Markdown
Raw Permalink 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 -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`.