feat(node): ship managed environment startup and USB recovery

This commit is contained in:
DCCONSTRUCTIONS
2026-09-25 16:37:56 +03:00
parent 45fb14b206
commit 53818230f9
25 changed files with 900 additions and 21 deletions
@@ -219,7 +219,33 @@ def tailscale_install():
return "Tailscale установлен; системная служба запущена. Вход проверяется отдельно."
OPERATIONS = {"platform": platform, "packages": packages, "node-service": node_service, "network-inventory": network_inventory, "usb-inventory": usb_inventory, "ssh-service": ssh_service, "tailscale-install": tailscale_install}
def desktop_autostart():
owned_config(Path('/usr/share/mission-core-node/mission-core-node-autostart.desktop'),
Path('/etc/xdg/autostart/org.nodedc.MissionCoreNode.desktop'))
return "Окно приложения открывается при входе в рабочий стол. Служба БК работает и без входа."
def usb_startup():
# Enabling the next boot is distinct from executing recovery now. This
# workflow never resets devices in a running operator session.
owned_config(Path('/usr/share/mission-core-node/usb-startup.json'),
Path('/etc/mission-core-node/usb-startup.json'))
command(['/usr/bin/systemctl', 'daemon-reload'])
command(['/usr/bin/systemctl', 'enable', 'mission-core-node-usb-startup.service'])
command(['/usr/bin/systemctl', 'is-enabled', 'mission-core-node-usb-startup.service'])
report = json.loads(command(['/usr/bin/python3', '-I', '-B', '/usr/lib/mission-core-node/usb_startup_recovery.py', '--inspect'], timeout=75))
if report.get('state') != 'inspected':
raise SetupError("Не удалось проверить поддержку восстановления USB. Повторите настройку.")
supported = sum(h.get('individual_power') is True for h in report.get('hubs', []))
if not supported:
return "Проверка при загрузке включена. Поддержка отдельного переключения USB-портов не подтверждена; они будут пропущены."
return "Восстановление при загрузке включено для поддерживаемых USB-портов. Обнаруженные устройства сохраняют подключение."
OPERATIONS = {"platform": platform, "packages": packages, "node-service": node_service,
"desktop-autostart": desktop_autostart, "usb-startup": usb_startup,
"network-inventory": network_inventory, "usb-inventory": usb_inventory,
"ssh-service": ssh_service, "tailscale-install": tailscale_install}
def run_steps(profile, operations, save):