added ssh deploy
This commit is contained in:
+139
@@ -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`
|
||||
|
||||
Оператору можно отдавать именно эту папку.
|
||||
Reference in New Issue
Block a user