Files
2026-07-21 22:06:10 +00:00

288 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.