PhlexPlexico / G5API

An express API for CS2 Servers using MatchZy and PugSharp to record and manage matches.
MIT License
98 stars 32 forks source link

[BUG] Steamworks doesn't seem to work properly on Debian 10 #172

Closed DigitalFriends closed 2 years ago

DigitalFriends commented 2 years ago

Describe the bug Steamworks doesn't seem to work properly on Debian 10, i understand that this is not an issue with the G5API itself, however i'm hoping that you have a better understanding of how Steamworks work togheter with the API in order to give me some information on how to mitigare this problem, if it's even possible.

To Reproduce Try to do a get5_loadmatch_url on a debian server, it will return Steamworks GET request failed, HTTP status code = 0 even though there is connectivity and everything is working with a curl.

Server info

Somehow i cant get steamworks to work properly in Debian 10, but it works perfectly fine on CentOS 8.

From the game-console: } get5_loadmatch_url http://play.fpslynx.se/api/matches/105/config Match config loading initialized. L 02/28/2022 - 14:42:14: [get5.smx] Failed to load match config: Steamworks GET request failed, HTTP status code = 0 L 02/28/2022 - 14:42:14: get5_event: { "matchid": "", "params": { "reason": "Steamworks GET request failed, HTTP status code = 0" }, "event": "match_config_load_fail" }

From the server console (debian): csgoserver@lynxcomp:~/cs-server$ curl https://play.fpslynx.se/api/matches/105/config {"matchid":"105","match_title":"Map {MAPNUMBER} of {MAXMAPS}","side_type":"standard","veto_first":"team1","skip_veto":false,"min_players_to_ready":1,"players_per_team":1,"team1":{"name":"FPSLynx A","tag":"FPSL A","flag":"SE","matchtext":"FPSLynx A","players":{"76561198088427552":"","76561198845488820":"","76561197979473483":""}},"team2":{"name":"FPSLynx B","tag":"FPSL B","flag":"SE","matchtext":"FPSLynx B","players":{"76561198083579452":"","76561198012885336":""}},"cvars":{"get5_web_api_url":"play.fpslynx.se/api","get5_check_auths":"1"},"spectators":{"players":[]},"maplist":["de_inferno","de_ancient","de_nuke","de_overpass","de_dust2","de_vertigo"],"min_spectators_to_ready":0,"num_maps":1}csgoserver@lynxcomp:~/cs-server$

Connectivity wise, it seems to be working. Please help me out if you have any ideas about this issue, i would prefer to run everything on Debian.

PhlexPlexico commented 2 years ago

So this is more of a SteamWorks issue then a G5API issue... I think the way around this is to just compile SteamWorks on that machine and use your own compiled extension. Usually I don't really offer support, but I can do the bare minimum right now. What's the version of SourceMod you're running? If you're on 1.11 it may require a different build - it looks like someone did it here https://github.com/hexa-core-eu/SteamWorks/releases. Other than that, I'm not too sure. Just last week I was able to use a temp DatHost server and run everything just fine.

Thanks!

PhlexPlexico commented 2 years ago

Also, it looks like get5 is trying to load http and not https, any reason for that specifically? Did you set your configs to use HTTP? I would suggest using HTTPS :)

DigitalFriends commented 2 years ago

Hi again,

Thank you for helping out with this even though it's not related to the G5API.

I'm running everything behind HAProxy, i can run both http and https, same issue when i run a get with https } get5_loadmatch_url https://play.fpslynx.se/api/matches/105/config Match config loading initialized. L 02/28/2022 - 14:57:05: [get5.smx] Failed to load match config: Steamworks GET request failed, HTTP status code = 0 L 02/28/2022 - 14:57:05: get5_event: { "matchid": "", "params": { "reason": "Steamworks GET request failed, HTTP status code = 0" }, "event": "match_config_load_fail" }

I'm running SourceMod Version: 1.10.0.6529 and SteamWorks Extension (1.2.3) Get5 Web API Integration" (0.8.0-dev+543) & Get5 (0.8.0-dev+543)

It's so weird, everything works fine on CentOS 8...

PhlexPlexico commented 2 years ago

Hmmm I'm not too sure then, sorry! As an aside - if you're using this tool you should use https://GitHub.com/phlexplexico/G5WS instead, which gives more functionality for these tools (but you need one more extension - Rest In PAWN).

But yeah I'm not sure why it's giving that. Try using get5_debug 32 and see if anything else pops out at you for the logs.

Thanks!

DigitalFriends commented 2 years ago

I'll try using the G5WS instead!

Here is the debug output: get5_loadmatch_url https://play.fpslynx.se/api/matches/105/config L 02/28/2022 - 15:09:13: [get5] cleanedUrl (SteamWorks) = http://https: Match config loading initialized. L 02/28/2022 - 15:09:13: [get5.smx] Failed to load match config: Steamworks GET request failed, HTTP status code = 0 L 02/28/2022 - 15:09:13: [get5] get5_event: { "matchid": "", "params": { "reason": "Steamworks GET request failed, HTTP status code = 0" }, "event": "match_config_load_fail" } L 02/28/2022 - 15:09:13: get5_event: { "matchid": "", "params": { "reason": "Steamworks GET request failed, HTTP status code = 0" }, "event": "match_config_load_fail" } L 02/28/2022 - 15:09:13: [get5] Calling Get5_OnEvent(event name = match_config_load_fail) L 02/28/2022 - 15:09:13: [get5] Calling Get5_OnLoadMatchConfigFailed(reason=Steamworks GET request failed, HTTP status code = 0)

PhlexPlexico commented 2 years ago

Innnnteresting. I just tried loading it from another server here, and I'm running into the same issue. I tried using my public web panel and it seems to work. It may be something on the networking side that isn't allowing connections. Do you have UFW or IPTables setup in such a way that RCON would not be able to establish a connection?

Specifically, you'll need to allow connections from/to TCP port 27015.

DigitalFriends commented 2 years ago

This is just getting weirder and weirder...

`hostname: FPSLynx Competetive version : 1.38.2.0/13820 1437/8461 secure [G:1:4765552] udp/ip : 172.16.1.10:27015 (public ip: XXXXXXXXXXXX) os : Linux type : community dedicated map : de_iris gotv[0]: port 27020, delay 30.0s, rate 64.0 players : 0 humans, 1 bots (10/0 max) (hibernating)

userid name uniqueid connected ping loss state rate adr

2 "GOTV" BOT active 64

end

L 02/28/2022 - 15:22:07: rcon from "172.16.1.8:34780": command "status" { "gamestate": 0, "available": 1, "plugin_version": "0.8.0-dev+543" } L 02/28/2022 - 15:22:07: rcon from "172.16.1.8:34782": command "get5_web_available" L 02/28/2022 - 15:22:07: [get5] cleanedUrl (SteamWorks) = https://play.fpslynx.se/api/matches/107/config Match config loading initialized. L 02/28/2022 - 15:22:07: rcon from "172.16.1.8:34784": command "get5_loadmatch_url "https://play.fpslynx.se/api/matches/107/config"" L 02/28/2022 - 15:22:07: [G5WS] get5_web_api_url now set to https:/ L 02/28/2022 - 15:22:07: rcon from "172.16.1.8:34786": command "get5_web_api_key XXXXXXXXXXXXXXXXXXXXXXXXX" L 02/28/2022 - 15:22:15: [get5.smx] Failed to load match config: Steamworks GET request failed, HTTP status code = 0 L 02/28/2022 - 15:22:15: [get5] get5_event: { "matchid": "", "params": { "reason": "Steamworks GET request failed, HTTP status code = 0" }, "event": "match_config_load_fail" } L 02/28/2022 - 15:22:15: get5_event: { "matchid": "", "params": { "reason": "Steamworks GET request failed, HTTP status code = 0" }, "event": "match_config_load_fail" } L 02/28/2022 - 15:22:15: [get5] Calling Get5_OnEvent(event name = match_config_load_fail) L 02/28/2022 - 15:22:15: [get5] Calling Get5_OnLoadMatchConfigFailed(reason=Steamworks GET request failed, HTTP status code = 0)`

RCON seems to work fine.. I was hoping that there was a connectivity issue.

PhlexPlexico commented 2 years ago

Odd question, but do you have GSLT for your server? That may be an issue where it can't contact steam due to that.

DigitalFriends commented 2 years ago

Yes, i have a GSLT token, a valid one to.

I can connect to the server and it seems to be connecting to steam servers properly. I completely understand if you dont got the time or will to help me further, but thanks for all of this so far. I am completely clueless :D!

PhlexPlexico commented 2 years ago

Me too haha. Just looking at some other tickets on the old get5-web repo from splewis due to some people having the issue as well, but I can't seem to find a reasonable explanation. The next best bet would be to compile SteamWorks yourself on that server and try using that instead. Could be an OS issue present with the extension.

Thanks!

DigitalFriends commented 2 years ago

Okay, hmm.

I replaced the dns url in the production.json and it seems to be working now...!

{ "server": { "port": 3301, "hostname": "https://play.fpslynx.se", "dbKey": "", "steamAPIKey": "", "sharedSecret": "", "clientHome": "https://play.fpslynx.se", "useRedis": true, "apiURL": "http://172.16.1.8/api", <------ THIS "uploadDemos": true }, "production": { "driver": "mysql", "user": "", "password": "", "database": "", "multipleStatements": true, "flags": { "get5": "MYSQL_FLAGS" }, "host": "127.0.0.1", "port": 3306, "connectionLimit": 15, "redisHost": "localhost", "redisPort": , "redisTTL": , "redisPass": "" }, "admins": { "steam_ids": "" }, "super_admins": { "steam_ids": "" } }

L 02/28/2022 - 15:51:44: rcon from "172.16.1.8:35178": command "get5_web_available" Match config loading initialized. L 02/28/2022 - 15:51:44: rcon from "172.16.1.8:35180": command "get5_loadmatch_url "http://172.16.1.8/api/matches/110/config"" L 02/28/2022 - 15:51:44: rcon from "172.16.1.8:35184": command "get5_web_api_key XXXXXXXXXXXXXXXXXXX" [FPSLynx] Loaded match config. L 02/28/2022 - 15:51:44: get5_event: { "matchid": "110", "params": { "team1_name": "FPSLynx A", "team2_name": "FPSLynx B" }, "event": "series_start" } L 02/28/2022 - 15:51:44: [G5WS.smx] Failed to create logo directory: resource/flash/econ/tournaments/teams L 02/28/2022 - 15:51:44: server_cvar: "mp_autoteambalance" "0" L 02/28/2022 - 15:51:44: server_cvar: "mp_limitteams" "0" L 02/28/2022 - 15:51:44: server_cvar: "sv_alltalk" "1" L 02/28/2022 - 15:51:44: server_cvar: "sv_competitive_official_5v5" "1" Can't use cheat cvar sv_grenade_trajectory in multiplayer, unless the server has sv_cheats set to 1. Server waking up from hibernation L 02/28/2022 - 15:51:44: World triggered "Round_Start" L 02/28/2022 - 15:51:44: server_cvar: "sm_nextmap" "de_dust" -> Reservation cookie 98154e4cffa62659: reason [R] Connect from xxxxxxxxxx:9262 L 02/28/2022 - 15:52:00: server_cvar: "nextlevel" "de_iris" L 02/28/2022 - 15:52:00: [META] Loaded 0 plugins (1 already loaded) ---- Host_Changelevel ----

PhlexPlexico commented 2 years ago

I mean, that looks like to be an internal IP, so if it's working that's good then I suppose!

But trying to contact your previous API URLs, it seems to be offline as well (not sure if intentional). So that may be the cause as well. But yeah, it could be something to do with your reverse proxy settings. Glad to see it's working with internal IPs at least!

DigitalFriends commented 2 years ago

I mean, that looks like to be an internal IP, so if it's working that's good then I suppose!

But trying to contact your previous API URLs, it seems to be offline as well (not sure if intentional). So that may be the cause as well. But yeah, it could be something to do with your reverse proxy settings. Glad to see it's working with internal IPs at least!

Everything is air-gapped, i'm running all of this behind multiple firewalls, so that's why.

If you want to have a look at the setup i can give you access though, i bet you got better things to do though!

So yes, it's working for now atleast. So weird that Steamworks cant make get requests, but i can issue a get request from the same server console and get a different response. Probably something related to HAProxy for sure.

I'll have a look at it!

PhlexPlexico commented 2 years ago

Sounds good, glad you got it worked out for the most part!

Sadly, server configuration isn't exactly my strong suit, so I think you'd be better off debugging it yourself at this point 😅 apologies, but glad to see it's still kind of working (and that internal IPs work!). If you run into anymore G5API specific problems, feel free to create a new issue as well, will close this one for now :)

Thanks!