Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
14 KiB
Isolated native Linux dedicated startup diagnostic
Current combined-package check — 2 October 2026
The objective-map package diagnostic runs the exact retained three-file runtime from .build/playtest-2026-10-02-objective-map/packages/core. It loads one successor, seven authorized external addons and two vanilla identities. The normal {C1E20667DCE324ED}Missions/ERR_Everon.conf header and MissionSystems load, Game scripts compile, and prison phase starts without a player or validation overlay. Fifteen seconds of subsequent observation complete before owned SIGTERM shutdown (72.03 seconds total).
There are zero script/runtime failures and eleven retained engine errors: four RHS/WCS localization references, six Parent fields and one SlidingTrackMaterial field. Strict qualification remains failed. This proves current packed empty-server initialization only; genuine clients, authentication, JIP/reconnect, remote interactions, graceful shutdown, full escape and comparative FPS remain untested.
The archived bounded runner uses the previously recorded Linux executable and exact package/dependency hashes. It mounts those inputs read-only inside isolated networking/PID/IPC/UTS namespaces, masks home/tmp/run, clears inherited environment and exposes no display or audio. It checks network isolation before launch and again before exec. The seven external inputs, executable and all 416 package files remain unchanged; a separate host process inventory confirms native and sandbox cleanup. Vanilla files are read-only but their full payload hashes were not captured, so this is not an independently version-locked server distribution. Independent review.
The following September material describes historical snapshots. Its generic dedicated_native.py example does not prepare the combined mission's external dependency closure and must not be treated as a current hosting command. The archived October runner is an evidence-bound empty-server diagnostic, not an authenticated multiplayer hosting tool.
The stable Linux ArmaReforgerServer successfully compiled the frozen successor Core game scripts, loaded its scenario header and native MissionSystems, and reached prison phase during the 2026-09-19 08:32:13 local diagnostic. This establishes server compilation and empty-server mission preparation. It does not establish multiplayer, authentication, client replication, ordinary input, graceful shutdown, comparative performance or release readiness. Four native installed-asset resource errors remain; this was not an entirely error-free run.
Safe diagnostic route
The official startup parameter documentation documents -server with local -addons/-addonsDir, separately from -config. It describes -worldSystemsConfig as diagnostic-executable only. Installed GameStateTransitions.RequestScenarioChangeTransition accepts either a mission header or world resource. The bounded experiment confirmed that this regular dedicated executable also accepts the successor .conf header as the -server value; no special header flag or JSON configuration was necessary.
tools/dedicated_native.py is exclusively a disconnected diagnostic launcher. Its immutable command selections cannot add a JSON configuration, clients, credentials, public hosting, Workshop downloads or validation-disabling options. The native local-server route nevertheless logged 0.0.0.0:2001, fastValidation=false, despite CLI bind hints. These are native local-test defaults, not safe hosting configuration. Never remove the mandatory namespace isolation or repurpose this command for public/authenticated hosting. The separate review-only dedicated preflight plan retains its own fastValidation=true and BattlEye configuration; this experiment does not validate that configuration route.
The runner masks host home, /tmp and /run, clears inherited environment, mounts host root and runtime read-only, and exposes only private source/profile/home/temp paths for engine writes. Networking, PID, IPC and UTS namespaces are isolated. A native namespace-aware Python probe requires a different network namespace, only lo, no IPv4 routes and no non-loopback IPv6 route. It runs both before launch and immediately before exec; any failure prevents server launch. Reading /sys/class/net alone is insufficient because a read-only host sysfs mount can show host interfaces even inside a separate network namespace.
Each run owns a new process group and private PID namespace. It records the exact command, binary hash, source manifest before/after, raw stdout and native logs; its timeout terminates only that owned group. Runtime can be bounded to 1–110 seconds, followed by at most ten seconds cleanup. A lock prevents concurrent instances of this diagnostic. Backend is explicitly disabled and the network namespace independently prevents external traffic. No displays, audio server sockets, Steam account profile or original missions are exposed for writes.
Example after reviewing the source and installed private runtime:
python3 tools/dedicated_native.py \
--source /tmp/frozen-successor \
--runtime /tmp/erri-dedicated-runtime/server \
--archive /tmp/erri-dedicated-attempt-new \
--route header --seconds 90
--project core is the default and preserves the original Core command. Select --project chat --route header to load {FA804F411BDDF2C6} through its existing declared Core/AI/Intel/Map dependencies and start {C1E20667DCE324ED}Missions/ERR_Everon.conf. The regular Linux executable still receives the scenario header; no diagnostic world-system override is added. The packed 13:24:56 run below demonstrates integrated Linux compilation and empty-server preparation for its exact fifteen artifacts, with inherited asset errors retained. It does not establish genuine connected-client or multiplayer behavior.
--route diag-world --project chat selects the diagnostic executable with the same Chat addon and the already-authored {B6C516F86302C679}Worlds/ERR_Everon.ent plus {C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf. Both projects share that Core world; their loaded scripts/resources differ through their dependency closure. Command/result metadata record the selected route and project. All network isolation, private copies, source snapshots, runtime bounds, backend disablement and owned-process cleanup remain unchanged.
--route vanilla-everon remains strictly vanilla: no successor addon or custom system arguments are emitted. Combining it with --project chat is an error before any filesystem preparation or subprocess. Vanilla metadata records no successor project.
Successor input must be runtime-resolvable, not just an authored-source bundle. Before creating the archive or invoking any process, preflight requires addons/core/addon.gproj and a nonempty regular addons/core/resourceDatabase.rdb. Chat additionally requires those two files for ai, intel, map and chat. Project GUIDs must match the selected successor identities; linked addon folders/files are refused. The copied private input is checked again before namespace preflight. A private input containing only addons/<name>/{addon.gproj,data.pak,resourceDatabase.rdb} is permitted: loose scripts are not required. This check proves file presence and project identity only; it does not establish database validity, compatibility with the PAK/source, successful native resource resolution, or a clean build. Native logs remain decisive. Vanilla control requires no successor RDBs.
The 13:14:58 Chat attempt exposed this distinction: the engine listed all five successor GUIDs, then warned that all five resource databases were missing. Game compilation remained at the installed vanilla count of 5660 files; subsequent loading reported unknown ERR_GameMode, wrong resource GUIDs and further errors, with no mission preparation. Its authored-only input had 183 files and zero RDB entries. Before/after manifests matched, the isolated preflight succeeded, and the bounded run ended by supervisor SIGTERM; a read-only host check found its recorded supervisor and all server executable processes absent. The attempt remains failed. This does not demonstrate that Chat's dependency flags are wrong or that integrated Linux scripts compiled. The new early preflight prevents repeating that known incomplete-input launch, and the completed packaged retry below resolves that particular input failure.
The source, archive and runtime must be separate resolved /tmp paths. Archive must be new. Exit zero means bounded diagnostic collection finished, not that compilation or acceptance passed. Inspect raw errors and positive mission evidence. The separately enumerated vanilla-everon control route loads installed Missions/21_GM_Eden.conf without successor addon arguments; see the resource diagnosis. The alternative diag-world route remains available for a different bounded question but was not needed or executed in this result; it cannot establish ordinary-header startup by itself.
Archived observations
Development archive. Native log: profile/logs/logs_2026-09-19_08-32-13/console.log. The engine ran unmodified copied sources: 277 source/resource/document/tool files, all unchanged after the run. Binary SHA-256: 91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f (stable server app 1874900, private installed public payload).
Evidence from the native log:
- Line 61: backend services disabled.
- Line 94: game successfully created after native Game compilation; no
SCRIPT (E)entries captured. - Line 100: native SaveGameManager starts
{AD62322D5213C440}Missions/ERR_Everon_Base.conf. - Line 109: native world systems initialize
{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf. - Line 157: native RPL server starts inside the isolated namespace, with the local-test defaults described above.
- Line 307: successor transitions from preparation phase 0 to prison phase 1.
- Subsequent native statistics report zero players and 36 physical AI characters. The capped empty-server FPS is not a comparative performance benchmark.
The four captured (E) lines concern vanilla editor-helper resources: TransparentMat.emat referenced from installed Calvary content, Gizmo3D/sphere.xob referenced from installed Blast_small_Invisible_Trigger.et, and the resulting material-not-found/default-material pair. Raw surrounding resource stacks remain in the archive. No assets/errors were suppressed or replaced. Core preparation nevertheless completed; whether these packed-runtime resource errors affect any visible or released use still requires investigation.
The 90-second deadline ended via supervisor SIGTERM (exit=-15), not native mission-completion shutdown. A separate read-only host check confirmed the owned supervisor absent and no remaining ArmaReforgerServer executable process. The source manifest did not change. No real participant joined and no direct scripted RplSession.Mode observation was added to this frozen-source run.
Earlier failed isolation checks are preserved. The sandbox-local network namespace attempt returned NETLINK permission denied before any engine; the host namespace-only verification succeeded. Attempt 01 then failed before engine launch because a new mount destination could not be created under read-only root. Attempt 02 corrected destinations beneath private /tmp; both its preflight and immediate pre-exec probe passed. No isolation check was bypassed.
Source-local regression scope
python3 tests/test_dedicated_native.py exercises the actual pre-exec isolation gate with substituted namespace/interface/routes and proves refusal happens before exec, detects source mutation and rejects linked sources, and checks exact Core/Chat identities against authored projects/metadata, their dependency closure, regular header versus diagnostic-world CLI separation, and rejection of Chat plus vanilla before filesystem or process operations, plus missing/empty/linked/wrong-identity addon inputs before archive creation or process launch. Packed-only input is tested without loose scripts; test RDB contents are explicitly synthetic and assert presence checks only. It does not execute a server or simulate multiplayer. The native archive separately establishes that the observed regular server startup accepted the header and initialized the mission.
The subsequent vanilla-only control reproduced all four initial asset errors without successor addons. This attributes those specific errors to the installed vanilla content; it does not make the first run entirely error-free or close other acceptance requirements. Exact stacks and control limitations are recorded in the resource audit.
Current packed Chat retry — 13:24:56
Independent review records the completed 90-second retry from the 1317 package snapshot. The input contains exactly fifteen successor runtime files: five project descriptors, five PAKs and five resource databases, with no loose scripts. Every artifact matches the package snapshot and remains unchanged after execution.
The regular Linux executable loads exactly five successor and two vanilla addon identities, mounts all five PAKs and opens their five databases. Native Game compilation reports 5780 files and 11202 classes; the Chat scenario header and Core MissionSystems load, seven sites and 117 stock entities prepare, and phase 0 transitions to prison phase 1. Native statistics report zero players. No script/VM-pattern failure appears.
Four native console errors remain. Each also occurs in the earlier vanilla 084040 control, whose complete error set is larger; this is subset attribution, not equality of the two complete runs. No errors are suppressed or waived. The isolated supervisor ends at its 90-second deadline with SIGTERM (exit=-15); a read-only process check confirms it and server executable processes are absent. This is artifact-bound integrated server startup/preparation, not a clean native build, graceful shutdown, connected-client qualification or an FPS comparison.