Files
Button/sshDeploy/dist/sshDeploy-gui/README.md
T
2026-08-24 16:40:48 +03:00

154 lines
8.8 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 по SSH (без adb)
Заменяет `deploy-adb.ps1` там, где adb на устройстве отключён. Вместо USB
использует Ethernet: инструмент сам выдаёт устройствам IP (мини-DHCP-сервер)
и заливает бандл по SSH. Можно подключать сразу несколько устройств через
свитч — каждое обрабатывается параллельно.
После установки в конфиг устройства пишется static `final_ip` (по умолчанию
`192.168.1.60`), затем устройство **выключается (`halt`)**, чтобы на свитче
не поднималось несколько девайсов с одним и тем же IP.
## Важно про сеть
Инструмент работает только в **изолированной сети**.
Используйте отдельный свитч, к которому подключены:
- один сетевой адаптер компьютера;
- пустые устройства ButtonTask.
На этом сегменте не должно быть других устройств и внешних аплинков.
## Что нужно один раз настроить
1. **Python 3** — установить с [python.org](https://www.python.org/downloads/)
(обычная установка, ничего дополнительно ставить не нужно — скрипт не
использует сторонние библиотеки).
2. Если в `config.json` стоит `"auth": "password"` — скачайте
`plink.exe` и `pscp.exe` с [putty.org](https://www.putty.org/) и положите
их в эту же папку, рядом с `mass_deploy.py`.
Если `"auth": "key"` — ничего докачивать не нужно, используется
встроенный в Windows 10/11 `ssh.exe`/`scp.exe`.
3. На сетевом адаптере, подключённом к выделенному свитчу, задать
**статический IP** (Панель управления -> Сеть -> Свойства адаптера ->
IPv4): например `192.168.1.201`, маска `255.255.255.0`, без шлюза.
Этот адрес должен совпадать с `server_ip` / `bind_ip` в `config.json`.
4. Если на этом адаптере когда-либо включали "Общий доступ к подключению к
интернету" (Internet Connection Sharing) — отключить. Он тоже слушает
DHCP-порт и будет конфликтовать с нашим сервером.
5. Скопировать `config.example.json` в `config.json` и заполнить:
- `bundle_path` — путь к `.tgz` бандлу (можно относительно этой папки,
например `../winDeployScripts/buttontask-deploy-2.33.tgz`);
- `device_user` / `device_password` (на голых платах обычно `linaro`/`linaro`);
- `use_sudo``true` (root не настроен, install идёт через `sudo -S`);
- `final_ip` — static IP, который останется в `network.json` после установки
(по умолчанию `192.168.1.60`);
- `after_install``halt` (рекомендуется) или `reboot`;
- `reset_config``false` (сохранить config на устройстве) или `true`
(перезаписать `config.json` и `.master` из бандла — для переустановки);
- при необходимости — диапазон `pool_start`/`pool_end` (адрес `final_ip`
из пула исключается автоматически).
## Запуск
### Вариант 1 — GUI для оператора
Дважды кликнуть `run-gui.bat`.
Порядок работы:
1. Настроить сетевой адаптер компьютера.
2. Включить GUI.
3. Выбрать сетевой интерфейс.
4. Выбрать `.tgz` бандл.
5. При переустановке на уже настроенное устройство — включить «Полный сброс конфига».
6. Нажать `Start`.
6. Вставить устройство в изолированную сеть.
7. Дождаться статуса `ГОТОВО`.
8. Вынуть устройство и повторить для следующего.
Windows спросит права администратора — нужно согласиться.
### Вариант 2 — старый CLI
Дважды кликнуть `run.bat`.
- Windows спросит права администратора — нужно согласиться (иначе DHCP-порт
может быть занят системными службами).
- Windows Firewall может спросить "разрешить программе доступ к сети" —
разрешить.
- Появится таблица статусов, обновляющаяся раз в секунду.
Подключайте устройства к свитчу — по одному или сразу все. Каждое появится
в таблице (по MAC-адресу) и пройдёт стадии:
```
discover -> acked -> ждём ssh -> заливаю -> устанавливаю -> сеть -> halt -> ГОТОВО
```
Общий алгоритм деплоя:
1. Устройство получает IP по DHCP.
2. Бандл копируется по SSH.
3. Устанавливаются пакеты и файлы из бандла.
4. Применяются `sudoers` и служебные скрипты.
5. Записывается итоговая сеть устройства.
6. Устройство выключается, чтобы избежать конфликтов после установки.
Если где-то `ОШИБКА`, детали видны в таблице; полный вывод install пишется в
`logs/<mac>.log`.
Частая ошибка на шаге `сеть`: `Connection timed out` — SSH оборвался до записи
`network.json`. Устройство после этого остаётся на DHCP; в таблице будет
`ОШИБКА`, не `ГОТОВО`. С новых версий deploy-скрипта запись повторяется до 3
раз и проверяется чтением файла обратно.
Когда устройство показывает `ГОТОВО` — оно выключено. Можно отключать кабель
и включать уже на рабочей сети: поднимется на `final_ip` с сервисами
ButtonTask.
`Ctrl+C` в окне консоли — остановить инструмент.
## Повторный прогон / переустановка того же устройства
IP-адреса привязываются к MAC-адресу и запоминаются в файле `leases.json`
рядом с конфигом — при повторной установке то же устройство снова получит
тот же DHCP-IP. SSH fingerprint'ы аналогично хранятся в `host_keys.json`.
Если нужно "сбросить" привязки/ключи — удалите `leases.json` и/или
`host_keys.json` (файлы создаются заново автоматически).
## device-install.sh
На время install `network.json` из бандла временно прячется, а старый
`/opt/buttontask/config/network.json` на устройстве удаляется — иначе при
переустановке install мог бы применить static во время SSH-сессии и оборвать
связь. Целевой static `final_ip` записывается уже после `INSTALL-OK` и
проверяется чтением файла.
`config.json` и `.master` **по умолчанию сохраняются**, если уже есть на
устройстве (upgrade-safe). Для переустановки «как с завода» включите
`"reset_config": true` в `config.json`, галочку в GUI или переменную
`BUTTONTASK_RESET_CONFIG=1` при запуске install.
## Сборка в exe
Для упаковки GUI в один exe:
```powershell
powershell -ExecutionPolicy Bypass -File .\build-gui.ps1
```
В результате появится папка `dist\sshDeploy-gui\` с:
- `sshDeploy-gui.exe`
- `config.json`
- `config.example.json`
- `README.md`
- `plink.exe`
- `pscp.exe`
Оператору можно отдавать именно эту папку.