Массовый деплой ButtonTask по SSH (без adb)
Заменяет deploy-adb.ps1 там, где adb на устройстве отключён. Вместо USB
использует Ethernet: инструмент сам выдаёт устройствам IP (мини-DHCP-сервер)
и заливает бандл по SSH. Можно подключать сразу несколько устройств через
свитч — каждое обрабатывается параллельно.
После установки в конфиг устройства пишется static final_ip (по умолчанию
192.168.1.60), затем устройство выключается (halt), чтобы на свитче
не поднималось несколько девайсов с одним и тем же IP.
Важно про сеть
Инструмент работает только в изолированной сети.
Используйте отдельный свитч, к которому подключены:
- один сетевой адаптер компьютера;
- пустые устройства ButtonTask.
На этом сегменте не должно быть других устройств и внешних аплинков.
Что нужно один раз настроить
-
Python 3 — установить с python.org (обычная установка, ничего дополнительно ставить не нужно — скрипт не использует сторонние библиотеки).
-
Если в
config.jsonстоит"auth": "password"— скачайтеplink.exeиpscp.exeс putty.org и положите их в эту же папку, рядом сmass_deploy.py. Если"auth": "key"— ничего докачивать не нужно, используется встроенный в Windows 10/11ssh.exe/scp.exe. -
На сетевом адаптере, подключённом к выделенному свитчу, задать статический IP (Панель управления -> Сеть -> Свойства адаптера -> IPv4): например
192.168.1.201, маска255.255.255.0, без шлюза. Этот адрес должен совпадать сserver_ip/bind_ipвconfig.json. -
Если на этом адаптере когда-либо включали "Общий доступ к подключению к интернету" (Internet Connection Sharing) — отключить. Он тоже слушает DHCP-порт и будет конфликтовать с нашим сервером.
-
Скопировать
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.
Порядок работы:
- Настроить сетевой адаптер компьютера.
- Включить GUI.
- Выбрать сетевой интерфейс.
- Выбрать
.tgzбандл. - При переустановке на уже настроенное устройство — включить «Полный сброс конфига».
- Нажать
Start. - Вставить устройство в изолированную сеть.
- Дождаться статуса
ГОТОВО. - Вынуть устройство и повторить для следующего.
Windows спросит права администратора — нужно согласиться.
Вариант 2 — старый CLI
Дважды кликнуть run.bat.
- Windows спросит права администратора — нужно согласиться (иначе DHCP-порт может быть занят системными службами).
- Windows Firewall может спросить "разрешить программе доступ к сети" — разрешить.
- Появится таблица статусов, обновляющаяся раз в секунду.
Подключайте устройства к свитчу — по одному или сразу все. Каждое появится в таблице (по MAC-адресу) и пройдёт стадии:
discover -> acked -> ждём ssh -> заливаю -> устанавливаю -> сеть -> halt -> ГОТОВО
Общий алгоритм деплоя:
- Устройство получает IP по DHCP.
- Бандл копируется по SSH.
- Устанавливаются пакеты и файлы из бандла.
- Применяются
sudoersи служебные скрипты. - Записывается итоговая сеть устройства.
- Устройство выключается, чтобы избежать конфликтов после установки.
Если где-то ОШИБКА, детали видны в таблице; полный вывод 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 -ExecutionPolicy Bypass -File .\build-gui.ps1
В результате появится папка dist\sshDeploy-gui\ с:
sshDeploy-gui.execonfig.jsonconfig.example.jsonREADME.mdplink.exepscp.exe
Оператору можно отдавать именно эту папку.