Skip to content

v3.1

Latest

Choose a tag to compare

@Zerschranzer Zerschranzer released this 11 Jul 20:37
1da04b0

feat: rewrite Docker setup on umu-launcher with health checks and permission fixes

Rewrite the Docker image and manager to match the native
ark_instance_manager.sh, based on umu-launcher 1.4.0 and pinned
GE-Proton10-34.

Dockerfile:

  • Use umu-launcher 1.4.0 zipapp instead of raw Proton binary
  • Pin GE-Proton10-34 (GE-Proton11-1 has a known ASA boot hang
    during static import resolution)
  • Run steamcmd +quit during build to pre-download steamclient.so
  • Add libzstd1 (umu dependency) and procps (health checks)
  • Make /opt/steamcmd world-writable for non-root operation

entrypoint.sh:

  • Rewrite to use umu-run instead of direct proton invocation
  • Add Wine 10 compatibility fixes: disable Sentry plugin, write
    steam_appid.txt (AppID 2430930), symlink Steam SDK to steamclient.so
  • Track prefix Proton version, recreate prefix on mismatch
  • Add first-run prefix init with clear bwrap error message when
    user namespaces are restricted on the host
  • Consume UMASK env (default 0007) so files created in bind
    mounts are group-writable
  • Set PROTON_VERB=run for multi-process prefix compatibility
  • Restore group-write after steamcmd validate resets permissions

ark_docker_manager.sh:

  • Add 30s pgrep health check + 15s stability verification
  • Add graceful shutdown via RCON DoExit with 120s timeout
  • Add --security-opt seccomp=unconfined,apparmor=unconfined for
    bwrap/pressure-vessel inside Docker
  • Run update container with --user to prevent root-owned files
  • Use incremental SETGID + group-write setup (find -exec) on
    host dirs so multiple users can manage the same install
  • Fix cluster parameters: bash array instead of escaped-quote string
  • Add signal trap so Ctrl-C leaves running containers unaffected
  • Add check_userns_restriction() with fix instructions
  • Mount umu-data volume for persistent Steam Runtime cache
  • Write launch command to server.log for diagnostics
  • Resolve all UID/GID values dynamically via id/getent