This commit is contained in:
2026-07-21 22:06:10 +00:00
parent afc64b83c1
commit 5215560ede
25 changed files with 4364 additions and 333 deletions
@@ -0,0 +1,287 @@
# Conduit Linux Entity Re-run - 2026-06-14
## Scope
- Pulled latest Conduit commits from `origin/main`.
- Inspected the Phase 2 entity/event bridge diff and updated `docs/linux-bringup.md` steps.
- Rebuilt on Linux with GCC 12.
- Deployed to CS2 server `Test Sunucusu`.
- Verified normal startup arming, lazy entity-system resolution, Linux RTTI vtable lookup, event-to-entity bridge, schema-backed health read/write, cleanup, and final server state.
- Satisfactory server was not modified.
## Git
Latest commits:
```text
de4bda2 (HEAD -> main, origin/main, origin/HEAD) Phase 2: schema-backed Entity + Player access, with event bridge
4b79d33 Close out Linux verification of the Phase 2 GameEvents slice
a5c1c13 docs: Linux re-test steps for the Phase 2 GameEvents slice
ffb57f3 Phase 2 start: dispatch core + GameEvents, with an RTTI vtable finder
4078ab7 PLAN: close the Linux memscan question — M1 fully done on both platforms
```
Pulled range:
```text
Updating a5c1c13..de4bda2
Fast-forward
PLAN.md | 4 +-
core/CMakeLists.txt | 1 +
core/src/conduit/commands.cpp | 61 ++++++-
core/src/conduit/entity.cpp | 380 ++++++++++++++++++++++++++++++++++++++++
core/src/conduit/entity.h | 89 ++++++++++
core/src/conduit/gameevents.cpp | 9 +
core/src/conduit/gameevents.h | 9 +
core/src/conduit/memscan.cpp | 52 ++++++
core/src/conduit/memscan.h | 6 +
core/src/plugin.cpp | 5 +
docs/linux-bringup.md | 53 +++++-
```
Working tree after run:
```text
## main...origin/main
```
## Build
Command:
```sh
cmake -S /root/codex/Conduit -B /root/codex/Conduit/build/linux-rerun -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_C_COMPILER=gcc-12 \
-DCMAKE_CXX_COMPILER=g++-12
cmake --build /root/codex/Conduit/build/linux-rerun
```
Result: build succeeded.
```text
-- Configuring done
-- Generating done
-- Build files have been written to: /root/codex/Conduit/build/linux-rerun
[1/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/memscan.cpp.o
[2/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/commands.cpp.o
/root/codex/Conduit/core/src/conduit/commands.cpp: In function int {anonymous}::DetourTestTarget(int):
/root/codex/Conduit/core/src/conduit/commands.cpp:338:13: warning: compound assignment with volatile-qualified left operand is deprecated [-Wvolatile]
338 | acc += x;
| ~~~~^~~~
[3/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/gamedata.cpp.o
[4/7] Building CXX object core/CMakeFiles/conduit.dir/src/plugin.cpp.o
[5/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/entity.cpp.o
[6/7] Building CXX object core/CMakeFiles/conduit.dir/src/conduit/gameevents.cpp.o
[7/7] Linking CXX shared library package/addons/conduit/bin/conduit.so
```
No failed CMake/Ninja output exists because the build passed.
## Deploy
Package source:
```text
/root/codex/Conduit/build/linux-rerun/package/.
```
Destination:
```text
/var/lib/gamepanel/servers/c2b47a90/game/csgo/
```
CS2 container restarted:
```text
gp_c2b47a90
```
Satisfactory container state during deploy:
```text
/gp_d8f13411 exited running=false exit=130 oom=false
```
## Load Check
RCON:
```text
rcon: authenticated
--- meta list ---
Listing 1 plugin:
[01] Conduit (0.1.0-dev) by Conduit Contributors
--- conduit_status ---
Conduit 0.1.0-dev
uptime : 45.8 s
game frames : 2220
log file : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log
crash report: armed (use conduit_crash_test to verify)
```
Startup log:
```text
2026-06-14 13:48:50 [INFO] gamedata: 1 files loaded: 0 signatures, 0 offsets, all valid
2026-06-14 13:48:50 [INFO] entity: armed via CGameEntitySystem vtable 0x7f2eed759fd8 — entity system not created yet, will resolve on first use after map load
2026-06-14 13:48:51 [INFO] gameevents: armed via CGameEventManager vtable 0x7f2eed75af50 — instance captured on next LoadEventsFromFile
2026-06-14 13:48:51 [INFO] core: Conduit 0.1.0-dev loaded — crash reporter armed, profiler on
2026-06-14 13:48:51 [INFO] gameevents: game event manager connected (0x7f2eedada460) — event listening live
2026-06-14 13:49:01 [INFO] core: first GameFrame observed — hook dispatch confirmed
```
Result: normal startup did not crash. Entity acquisition armed at load and deferred resolution until map/entity system was available.
## Entity RTTI and Lazy Resolve
RCON:
```text
rcon: authenticated
--- conduit_vtable server CGameEntitySystem ---
[Conduit] CGameEntitySystem vtable @ 0x7f2eed759fd8 first method -> 0x7f2eec92aec0
--- conduit_entity ---
[Conduit] [INFO] entity: entity system connected (0x7f2ee9124000) via GameResourceServiceServerV001+0x50 — vtable matches CGameEntitySystem
entity system: connected
slot 0 cs_player_controller team=2 pawn=player health=100
slot 1 cs_player_controller team=3 pawn=player health=100
```
Result: Linux Itanium RTTI path found `CGameEntitySystem`. Lazy resource-service scan found the entity system at `GameResourceServiceServerV001+0x50`. This differs from Windows `+0x58`, as expected, and was found by vtable matching.
## Event to Entity Bridge
Commands:
```text
conduit_event_stop
conduit_event_listen player_spawn
mp_warmup_end
mp_restartgame 1
```
RCON / console-reported Conduit lines:
```text
[Conduit] [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (pre)
[Conduit] [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (post)
[Conduit] listening to 'player_spawn' (pre+post) — watch the log
[Conduit] [INFO] event_test: [pre] player_spawn userid=0 pawn=player idx=256 health=100 team=2
[Conduit] [INFO] event_test: [post] player_spawn userid=0 pawn=player idx=256 health=100 team=2
[Conduit] [INFO] event_test: [pre] player_spawn userid=1 pawn=player idx=260 health=100 team=3
[Conduit] [INFO] event_test: [post] player_spawn userid=1 pawn=player idx=260 health=100 team=3
```
Conduit log:
```text
2026-06-14 13:50:11 [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (pre)
2026-06-14 13:50:11 [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (post)
2026-06-14 13:50:11 [INFO] event_test: [pre] player_spawn userid=0 pawn=player idx=256 health=100 team=2
2026-06-14 13:50:11 [INFO] event_test: [post] player_spawn userid=0 pawn=player idx=256 health=100 team=2
2026-06-14 13:50:11 [INFO] event_test: [pre] player_spawn userid=1 pawn=player idx=260 health=100 team=3
2026-06-14 13:50:11 [INFO] event_test: [post] player_spawn userid=1 pawn=player idx=260 health=100 team=3
2026-06-14 13:50:12 [INFO] event_test: [pre] player_spawn userid=0 pawn=player idx=256 health=100 team=2
2026-06-14 13:50:12 [INFO] event_test: [post] player_spawn userid=0 pawn=player idx=256 health=100 team=2
2026-06-14 13:50:12 [INFO] event_test: [pre] player_spawn userid=1 pawn=player idx=260 health=100 team=3
2026-06-14 13:50:12 [INFO] event_test: [post] player_spawn userid=1 pawn=player idx=260 health=100 team=3
```
Result: event carried player reference resolved to live pawn entities in both pre and post phases. Schema-backed reads returned health/team.
## Health Read / Write
RCON:
```text
rcon: authenticated
--- conduit_ent_health 0 ---
[Conduit] slot 0 pawn=player health=100 team=2
--- conduit_ent_health 0 45 ---
[Conduit] slot 0 health 100 -> 45 (read back 45; networked write)
--- conduit_ent_health 0 ---
[Conduit] slot 0 pawn=player health=45 team=2
```
Cleanup / restore:
```text
rcon: authenticated
--- conduit_ent_health 0 100 ---
[Conduit] slot 0 health 45 -> 100 (read back 100; networked write)
--- conduit_ent_health 0 ---
[Conduit] slot 0 pawn=player health=100 team=2
--- conduit_event_stop ---
[Conduit] removed 2 test subscription(s)
--- conduit_events ---
game events: manager connected, 0 subscription(s), 1 event(s) registered, FireEvent detour off
--- conduit_prof ---
owner callsite calls avg p50 p99 max total
engine GameFrame 6851 2.44ms 4.19ms 8.39ms 33.34ms 16.74s
event_test player_spawn 8 42.6us 65.5us 131.1us 77.7us 341.2us
core SchemaFindField 3 12.7us 8.2us 32.8us 29.3us 38.0us
```
Result: schema-backed setter wrote `m_iHealth`, readback returned the written value, then health was restored to 100.
## Final State
RCON:
```text
rcon: authenticated
--- conduit_status ---
Conduit 0.1.0-dev
uptime : 162.5 s
game frames : 9648
log file : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log
crash report: armed (use conduit_crash_test to verify)
--- conduit_events ---
game events: manager connected, 0 subscription(s), 1 event(s) registered, FireEvent detour off
```
Docker:
```text
/gp_c2b47a90 running running=true exit=0 oom=false
/gp_d8f13411 exited running=false exit=130 oom=false
```
Panel DB:
```text
uuid | name | status | slug | port
----------+----------------+---------+--------------+-------
c2b47a90 | Test Sunucusu | running | cs2 | 27015
d8f13411 | MukemmelSunucu | stopped | satisfactory | 7777
(2 rows)
```
## Odd Warnings / Notes
No Conduit/Metamod/signal load failure or crash was observed.
The `conduit_vtable` / `conduit_entity` window produced one watchdog sample:
```text
2026-06-14 13:49:57 [WARN] watchdog: game thread has not advanced a frame for 521 ms (outside GameFrame)
2026-06-14 13:49:57 [WARN] watchdog: no Conduit context on the game thread — the stall is in engine/game code or an untracked path
2026-06-14 13:49:57 [WARN] watchdog: #00 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xcff99) [0x7f2ee4b0ef99]
2026-06-14 13:49:57 [WARN] watchdog: #01 /lib/x86_64-linux-gnu/libc.so.6(+0x3c050) [0x7f2f31cc2050]
2026-06-14 13:49:57 [WARN] watchdog: #02 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xcd020) [0x7f2ee4b0c020]
2026-06-14 13:49:57 [WARN] watchdog: #03 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xcd160) [0x7f2ee4b0c160]
2026-06-14 13:49:57 [WARN] watchdog: #04 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xcd523) [0x7f2ee4b0c523]
2026-06-14 13:49:57 [WARN] watchdog: #05 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xcd60f) [0x7f2ee4b0c60f]
2026-06-14 13:49:57 [WARN] watchdog: #06 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xcdecd) [0x7f2ee4b0cecd]
2026-06-14 13:49:57 [WARN] watchdog: #07 /home/steam/cs2-dedicated/game/csgo/addons/conduit/bin/conduit.so(+0xc10d5) [0x7f2ee4b000d5]
2026-06-14 13:49:57 [WARN] watchdog: #08 /home/steam/cs2-dedicated/game/bin/linuxsteamrt64/libtier0.so(+0x1e0902) [0x7f2f3173b902]
2026-06-14 13:49:57 [INFO] entity: entity system connected (0x7f2ee9124000) via GameResourceServiceServerV001+0x50 — vtable matches CGameEntitySystem
2026-06-14 13:49:57 [INFO] watchdog: game thread recovered after a ~816 ms stall
```
This looks tied to the diagnostic RTTI/entity scan command window. The server recovered and continued through later event and health tests.
Server console also printed ordinary CS2 map/resource/round warnings such as missing lightmap resources and `Failed to write backup_round00.txt!`; I did not see those tied to Conduit/Metamod/signal failure.