Skip to content

feat(linux): comprehensive Linux port, Wine/Proton proxy, EOS MITM & system recovery - #11

Closed
oypi wants to merge 1 commit into
bitsfdb:mainfrom
oypi:feat/linux-port
Closed

oypi wants to merge 1 commit into
bitsfdb:mainfrom
oypi:feat/linux-port

Conversation

@oypi

@oypi oypi commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Description

This PR introduces a comprehensive, native Linux port of VelocityRL supporting Rocket League running through Steam (Proton), Heroic Games Launcher (Wine/Proton), Lutris, and Bottles.

Key Additions & Architectural Highlights

1. Linux Execution Model & Elevated Privilege Handling

  • Enforced Root Execution (sudo): Running VelocityRL as an unprivileged user displays an explicit notice ([-] Error: You must run VelocityRL as root (sudo). [-] Please run: sudo ./velocity-rl) and exits with code 1.
  • Automatic Setup on Launch: Running with sudo automatically configures unprivileged port 443 capability, installs the VelocityRL Root CA to system trust anchors (update-ca-trust / update-ca-certificates), and adds the /etc/hosts loopback redirect for PsyNet and EOS domains.
  • GUI Environment Preservation: Automatically forwards $SUDO_USER's $HOME, XAUTHORITY, XDG_CONFIG_HOME, and XDG_DATA_HOME so user configurations and custom presets are preserved under sudo. Sets WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS=1 to allow WebKitGTK rendering under root without container sandbox conflicts.

2. System Recovery CLI (--recover / --restore / --clean)

  • Provides a dedicated CLI argument to revert all system modifications so Rocket League can run independently with official servers:
    • Cleans all loopback redirects (config.psynet.gg, api.rlpp.psynet.gg, ws.rlpp.psynet.gg, api.epicgames.dev) from /etc/hosts.
    • Disables Wine/Proton system proxies in user.reg across all detected prefixes.
    • Removes the VelocityRL Root CA certificate and refreshes system trust anchors.
    • Flushes system DNS caches (systemd-resolve, resolvectl, nscd).
    • Removes /etc/sysctl.d/50-velocityrl.conf and cleans temporary proxy directories.

3. EOS Account API Interception & Name Spoofing

  • Port 443 MITM for Proton/Wine: Under Proton and Wine, the Epic Online Services SDK bypasses WinINET proxy settings and connects directly to api.epicgames.dev:443.
  • Redirects api.epicgames.dev via /etc/hosts and terminates TLS with leaf_epic.crt.
  • Public DNS Upstream Resolution: Resolves api.epicgames.dev via UDP queries to public DNS (1.1.1.1 / 8.8.8.8) with hardcoded fallback and in-memory caching to prevent loopback poisoning when proxying upstream.
  • Account Query Patching: Intercepts POST /epic/id/v2/sdk/accounts to seamlessly spoof player names and clan tags in-game.

4. Multi-Prefix Wine & Proton Detection

  • Automatically scans and provisions Wine/Proton prefixes across:
    • Steam Proton: Default directories, secondary library folders (libraryfolders.vdf), and Flatpak Steam.
    • Heroic Games Launcher: Standard prefix directories and dynamic GamesConfig/*.json configurations.
    • Lutris & Bottles: Default and Flatpak bottle directories.
  • Injects HTTP proxy configuration (ProxyEnable=1, ProxyServer="127.0.0.1:8080") into user.reg.
  • Configures TAStatsAPI.ini and DefaultStatsAPI.ini in Wine document paths for the Tracker WebSocket.

5. Multi-Platform CI/CD & Build Infrastructure

  • Updated .github/workflows/ci.yml with ubuntu-22.04 and cargo test to continuously validate Linux compilation on pull requests.
  • Updated .github/workflows/release.yml with an OS matrix (windows-latest, ubuntu-22.04) to generate .AppImage and .deb packages with SHA256 checksums alongside Windows installers.
  • Added build-release.sh mirroring build-release.ps1 for synchronized versioning and builds.

Verification & Testing

  • [✓] cargo test: 52 passed, 0 failed (0.00s)
  • [✓] cargo build --release: Clean build with zero warnings or errors
  • [✓] Unprivileged execution check: Correctly exits with actionable sudo instruction
  • [✓] System recovery check: --recover cleanly restores /etc/hosts, trust anchors, and Wine configs
  • [✓] Verified backwards compatibility on Windows builds (pure conditional compilation guards)

@coderabbitai

coderabbitai Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 12cb5ee8-0a80-412f-a563-5c0a2c90d3c8


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@oypi
oypi force-pushed the feat/linux-port branch 4 times, most recently from 406c409 to 8c1d670 Compare September 25, 2026 20:33
@oypi oypi changed the title feat(linux): full Linux port (Wine/Proton, Steam, Heroic, Lutris) and Name Spoofer/Tracker stability fixes feat(linux): comprehensive Linux port, Wine/Proton proxy, EOS MITM & system recovery Sep 25, 2026
@oypi
oypi force-pushed the feat/linux-port branch 7 times, most recently from c0083e4 to 17e158c Compare September 27, 2026 13:17
…adout and PRI_TA replication guard

- Implement dual export expansion in Chunk 0 for ConvertToClientLoadout (#78) and Car_TA::SetLoadout (#16587)
- Add emit_car_set_loadout_bytecode to enforce client-side loadout products directly on the spawned vehicle actor
- In Chunk 2, patch LoadoutValidation_TA::CorrectOnlineData (#47859) to return true
- In Chunk 2, patch PRI_TA::ValidateReplicatedLoadout (#57832) with early return to eliminate match replication resets
- Maintain 19-byte export trailers intact to prevent name table index corruption
- Preserve material paint overrides and custom decal compatibility
- Add unit test coverage for Car_TA::SetLoadout bytecode emitter
@oypi oypi closed this Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant