added ssh deploy

This commit is contained in:
2026-07-28 15:33:07 +03:00
parent 6644fd07c1
commit e7996a15ed
38 changed files with 18797 additions and 46 deletions
+139
View File
@@ -0,0 +1,139 @@
# Массовый деплой 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`;
- при необходимости — диапазон `pool_start`/`pool_end` (адрес `final_ip`
из пула исключается автоматически).
## Запуск
### Вариант 1 — GUI для оператора
Дважды кликнуть `run-gui.bat`.
Порядок работы:
1. Настроить сетевой адаптер компьютера.
2. Включить GUI.
3. Выбрать сетевой интерфейс.
4. Выбрать `.tgz` бандл.
5. Нажать `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`.
Когда устройство показывает `ГОТОВО` — оно выключено. Можно отключать кабель
и включать уже на рабочей сети: поднимется на `final_ip` с сервисами
ButtonTask.
`Ctrl+C` в окне консоли — остановить инструмент.
## Повторный прогон / переустановка того же устройства
IP-адреса привязываются к MAC-адресу и запоминаются в файле `leases.json`
рядом с конфигом — при повторной установке то же устройство снова получит
тот же DHCP-IP. SSH fingerprint'ы аналогично хранятся в `host_keys.json`.
Если нужно "сбросить" привязки/ключи — удалите `leases.json` и/или
`host_keys.json` (файлы создаются заново автоматически).
## device-install.sh менять не нужно
Сам скрипт установки на устройстве (`device-install.sh`) не менялся. На время
install `network.json` из бандла временно прячется, чтобы SSH не оборвался
из‑за смены IP; целевой static `final_ip` записывается уже после `INSTALL-OK`.
Изменился только способ доставки (SSH вместо `adb push`/`adb shell`).
## Сборка в 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`
Оператору можно отдавать именно эту папку.