librelad 20f8ca2eb5 feat(network): detect + heal apps stranded off the docker subnet
Closes the gap behind the vpn-recreate bug: when the shared network is
recreated with a different /24, every app's stored static IP is left
outside it and adoptDockerSubnet only realigns CFG, not the apps.

- networkScanConflicts (network_conflicts.sh): read-only scan diffing each
  active network_resources IP against docker's real subnet (via ipInSubnet).
  Per-service routing-aware — skips gateway-routed services whose ipv4 is
  commented out in the deployed compose, so gluetun apps don't false-positive.
  Distinguishes 'daemon down' (benign) from 'network missing' (real).

- webuiSystemNetworkCheck (webui_system_network.sh): self-throttled generator
  that writes frontend/data/system/network_status.json (modelled on
  verify_status.json). Wired into webuiSystemUpdate AND run unconditionally
  every ~60s from the task-processor poll (regen webui is mtime-gated and
  would never fire on drift, which touches no source file).

- networkHealConflicts (network_heal.sh) + 'libreportal system network
  check|heal [app]': the heal adopts docker's subnet in-process, then re-IPs
  stranded apps with reset_network=ip (ports preserved), gluetun first.
  Mutating path runs only through the task system (dual-mode, like update
  apply); read-only check runs inline.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 16:03:53 +01:00

64 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# This file is auto-generated by generate_arrays.sh
# Do not edit manually - run './scripts/source/files/generate_arrays.sh run' to regenerate
docker_scripts=(
"docker/app/checks/app_installed.sh"
"docker/app/checks/container_health_loop.sh"
"docker/app/checks/container_health.sh"
"docker/app/compose/down_all.sh"
"docker/app/compose/down_app.sh"
"docker/app/compose/up_all.sh"
"docker/app/compose/up_app.sh"
"docker/app/compose/up_down_app.sh"
"docker/app/docker/remove_app.sh"
"docker/app/docker/restart_app.sh"
"docker/app/docker/start_all.sh"
"docker/app/docker/start_app.sh"
"docker/app/docker/stop_all.sh"
"docker/app/docker/stop_app.sh"
"docker/app/functions/function_app_tool.sh"
"docker/app/functions/function_install_app.sh"
"docker/app/functions/function_restart_app.sh"
"docker/app/uninstall/delete_data.sh"
"docker/app/uninstall/down_remove_app.sh"
"docker/app/uninstall/remove_images.sh"
"docker/app/uninstall/uninstall_app.sh"
"docker/checks/app_health_details.sh"
"docker/checks/app_health_status.sh"
"docker/checks/running_for_user.sh"
"docker/command/docker_run_install.sh"
"docker/command/docker_run.sh"
"docker/command/run_privileged.sh"
"docker/compose/copy_build_context.sh"
"docker/compose/restart_after_update.sh"
"docker/compose/setup_compose_yml.sh"
"docker/compose/update_and_start.sh"
"docker/compose/update_compose_yml.sh"
"docker/install/rooted/rooted_docker_check.sh"
"docker/install/rooted/rooted_docker_compose.sh"
"docker/install/rooted/rooted_docker.sh"
"docker/install/rootless/rootless_apparmor.sh"
"docker/install/rootless/rootless_docker.sh"
"docker/install/rootless/rootless_start_setup.sh"
"docker/install/rootless/rootless_uninstall.sh"
"docker/install/rootless/rootless_user.sh"
"docker/network/network_conflicts.sh"
"docker/network/network_heal.sh"
"docker/network/network_prune.sh"
"docker/network/network_randomize_subnet.sh"
"docker/network/network_setup.sh"
"docker/service/start_docker.sh"
"docker/service/stop_docker.sh"
"docker/setup_env.sh"
"docker/type_switcher/scan_container_socket.sh"
"docker/type_switcher/set_socket_permissions.sh"
"docker/type_switcher/swap_docker_type.sh"
"docker/type_switcher/switch_containers_type.sh"
"docker/update_docker_sudo_pass.sh"
"docker/update_docker_user_pass.sh"
"docker/whitelist_port_updater.sh"
)