Files
2026-08-24 16:40:48 +03:00
..
a
2026-08-24 16:40:48 +03:00
a
2026-08-24 16:40:48 +03:00
2026-07-28 15:33:07 +03:00
a
2026-08-24 16:40:48 +03:00
a
2026-08-24 16:40:48 +03:00
2026-07-28 21:29:02 +03:00
2026-07-28 15:33:07 +03:00
a
2026-08-24 16:40:48 +03:00
2026-07-28 15:33:07 +03:00
2026-07-28 15:33:07 +03:00
a
2026-08-24 16:40:48 +03:00
a
2026-08-24 16:40:48 +03:00
2026-07-28 15:33:07 +03:00
2026-07-28 15:33:07 +03:00
2026-07-28 15:33:07 +03:00

Массовый деплой 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 (обычная установка, ничего дополнительно ставить не нужно — скрипт не использует сторонние библиотеки).

  2. Если в config.json стоит "auth": "password" — скачайте plink.exe и pscp.exe с 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_sudotrue (root не настроен, install идёт через sudo -S);
    • final_ip — static IP, который останется в network.json после установки (по умолчанию 192.168.1.60);
    • after_installhalt (рекомендуется) или reboot;
    • reset_configfalse (сохранить 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.
  7. Вставить устройство в изолированную сеть.
  8. Дождаться статуса ГОТОВО.
  9. Вынуть устройство и повторить для следующего.

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 -ExecutionPolicy Bypass -File .\build-gui.ps1

В результате появится папка dist\sshDeploy-gui\ с:

  • sshDeploy-gui.exe
  • config.json
  • config.example.json
  • README.md
  • plink.exe
  • pscp.exe

Оператору можно отдавать именно эту папку.