Files
Button/sshDeploy/README.md
T
2026-07-28 15:33:07 +03:00

140 lines
7.7 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`;
- при необходимости — диапазон `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`
Оператору можно отдавать именно эту папку.