alliedmodders / amxmodx

AMX Mod X - Half-Life 1 Scripting and Administration
http://www.amxmodx.org/
489 stars 197 forks source link

Crash when loading amxmodx under Sven Coop (Linux) #1046

Open KometFox opened 2 years ago

KometFox commented 2 years ago

Environment

Description

The amxmodx causes crash when I'm trying to start a listen server in Sven Co-op. Metamod-p itself works fine.

Problematic Code (or Steps to Reproduce)

  1. Start a listen server in Sven Co-op
  2. Game immediately crashes

Logs

SvenCoopCrash.txt

xLeviNx commented 2 years ago

What Amxmodx version are you running?

KometFox commented 2 years ago

What Amxmodx version are you running?

I have tried 1.8.0, 1.9.0 (Unstable) and the 1.10 (Unstable) versions from the amxmodx sites and they all caused crashes for me, see the attached log from the initial post.

KometFox commented 2 years ago

pls respond, I want to use RPGMod on singleplayer modo which is for me atm impossible to do due to aforementioned crashes.

xLeviNx commented 2 years ago

What you attached is not visible

KometFox commented 2 years ago

What you attached is not visible

Weird, it worked when I was initially posting it. It's not a important picture anyway, it was just a image of a anime where a girl is crying.

xLeviNx commented 2 years ago

Notoriously amxmodx has had issues running with a listen server. Have you tried it outside of a listen server?

KometFox commented 2 years ago

Notoriously amxmodx has had issues running with a listen server. Have you tried it outside of a listen server?

You mean as in a dedicated server? I need to look it up first how I can do it without resorting to a virtual machine, I tried once to run a dedicated server on my same account but Steam then didn't let me play Sven co-op while the server is running, so I'm pretty much a noob when it comes to that.

Edit: Well I managed to a dedicated server running now locally and I don't have any better luck with it, its even worse because for some reason config.ini does not load plugins.ini which is all placed under sven_ds/addons/metamod/ directory. The dedicated server only loads the metamod-p addon.

When I try to run meta refresh and meta require amxmodx the server gets crashed: SvenDS_TerminalLog.txt also github for some reason won't let me upload zip files so I cannot upload the asserted dump file.

xLeviNx commented 2 years ago

Can you post what you have in the plugins.ini? Also check this thread out and see if you're having the same issue: https://github.com/alliedmodders/amxmodx/issues/1005

KometFox commented 2 years ago

For my plugins.ini I only have the amxmodx loaded and nothing else:

linux addons/amxmodx/dlls/amxmodx_mm_i386.so

reading on issue #1005 the OP of that issue fixed it by deleting duplicate keys at his config files which on my end is not the case as I have only one gamedll and gamedll_linux entry:

game "Sven Co-op"
url_info "http://www.svencoop.com/"
url_dl "http://www.svencoop.com/"
manual "http://www.svencoop.com/manual/"
developer "http://www.svencoop.com/"
developer_url "http://www.svencoop.com/"
icon "svencoop"
version "5.25"
secure "1"
type "multiplayer_only"
mpentity "info_player_deathmatch"
gamedll "dlls/server.dll"
gamedll_linux "dlls/server.so"
edicts "8192"
crcclientdll "1"
largemap_aware "1"
vertical_fov "1"
scale_credits_font "1"
ignore_event_files "1"
event_system "1"

For game launch parameter I use this: -console -heapsize 1512M -showheap -dll ../addons/metamod/dlls/metamod.so +localinfo mm_configfile dlls/metaconfig.ini +localinfo mm_gamedll dlls/server.so

xLeviNx commented 2 years ago

Can you remove the last parameter on your launch? mm_gamedll dlls/server.so

KometFox commented 2 years ago

Can you remove the last parameter on your launch? mm_gamedll dlls/server.so

Running the server with this parameter ./svends_run -console -port 27015 +maxplayers 5 -debug -insecure +sv_lan 0 +map stadium4 -dll addons/metamod/dlls/metamod.so Results in this:

Using Intel Optimised binary.
Enabling debug mode
Server will auto-restart if there is a crash.

Console initialized.
Using breakpad crash handler
Setting breakpad minidump AppID = 225840
Forcing breakpad minidump interfaces to load
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit
Threaded networking started successfully.
Protocol version 48
Engine version 5.0.1.7 (svencoop)
Engine build: 10:27:30 Jun 12 2021 (8997)
STEAM Auth Server
Initializing IP networking
Local IP address: , SV port: 27015, CL port: -1
Steam P2P networking disabled.

   Metamod version 1.21p38 Copyright (c) 2001-2013 Will Day
     Patch: Metamod-P (mm-p) v38 Copyright (c) 2004-2018 Jussi Kivilinna
   Metamod comes with ABSOLUTELY NO WARRANTY; for details type `meta gpl'.
   This is free software, and you are welcome to redistribute it
   under certain conditions; type `meta gpl' for details.

==================
Game DLL version mismatch
DLL version is 140, engine version is 140
The game DLL for svencoop appears to be outdated, check for updates
==================
Host_Error: 

FATAL ERROR (shutting down): Host_Error: 

Uh oh it seems the server has crashed or failed to run (╯°□°)╯︵ ┻━┻
Support available on our Discord server: https://discord.gg/svencoop
Di 7. Jun 16:02:16 CEST 2022: Server restart in 10 seconds
Di 7. Jun 16:02:20 CEST 2022: Server Quit
djearthquake commented 2 years ago

No you can't remove the last parameter.

xLeviNx commented 2 years ago

Not sure why you're running into this issue. Server was installed using steamcmd as well right?

I put up an instance on Ubuntu 20.04.4 LTS and the server connected, along with metamod and amxmodx

KometFox commented 2 years ago

Not sure why you're running into this issue. Server was installed using steamcmd as well right?

Yeah for the dedicated server I used steamcmd. Well right now with the dedicated server the metamod-p somehow refuses to load the amxmodx plugin so I can only get to run on my end with the listen server variant. Maybe amxmodx relies on some kind of library or even 32bit version of something that I don't have it installed on my system?

xLeviNx commented 2 years ago

What about your liblist.gam. Can you provide the contents in that?

KometFox commented 2 years ago

Sorry for the late response, here it is:

game "Sven Co-op"
url_info "http://www.svencoop.com/"
url_dl "http://www.svencoop.com/"
manual "http://www.svencoop.com/manual/"
developer "http://www.svencoop.com/"
developer_url "http://www.svencoop.com/"
icon "svencoop"
version "5.25"
secure "1"
type "multiplayer_only"
mpentity "info_player_deathmatch"
gamedll "dlls/server.dll"
gamedll_linux "dlls/server.so"
edicts "8192"
crcclientdll "1"
largemap_aware "1"
vertical_fov "1"
scale_credits_font "1"
ignore_event_files "1"
event_system "1"
xLeviNx commented 2 years ago

Remove the startup load on metamod on your startup line

Remove the following in liblist.gam

gamedll_linux "dlls/server.so"

and then add

gamedll_linux "addons/metamod/dlls/metamod.so"

In the metamod folder, there is a config.ini, you can add the gamedll

gamedll dlls/cs.so

R4to0 commented 2 years ago

Actually we do recommend using the -dll parameter rather than editing liblist.gam directly. Since we do update versioning in this file it gets overwritten on every game update.

Checking first post I see there's a traversal path (../) in the -dll parameter. I don't remember that being needed when doing internal testing, I just put metamod and AMXX at svencoop dir (not the _addon or any other mounted folder) then just run the game with -dll addons/metamod/dlls/metamod.so, however I only tested dedicated servers and never tried a listen server with metamod ever (even with vanilla HL1!).

Because the search path is broken in the latest available compiled metamod-p at https://github.com/Bots-United/metamod-p I've compiled the latest code which has fixes for not finding the right server.so library and needing to use +localinfo mm_gamedll "dlls/server.so" parameter or in the config.ini file. Here's a quote I left at the official Sven Co-op Discord:

R4to0 — 29/12/2020
Metamod-p for Linux compiled on Debian 9 Stretch x86 from source, GitHub revision 97 (43a86cb).

Source: https://github.com/Bots-United/metamod-p

For loading with Sven without editing liblist.gam, point -dll parameter to where you put the file, for example -dll addons/metamod/dlls/metamod.so. In case metamod still looks for hl_i386.so file instead of server.so, add the parameter +localinfo mm_gamedll "dlls/server.so" to tell Metamod to use the right game binary. 
https://cdn.discordapp.com/attachments/206502440013529089/793617485550190642/metamod.so

If the binary here is considered unsafe for distribution the same can be removed by mods if needed. It's been a long time since I've tested AMXX so I don't know if something has changed and if AMXX needs updated headers/offsets to work.

KometFox commented 2 years ago

Checking first post I see there's a traversal path (../) in the -dll parameter. I don't remember that being needed when doing internal testing, I just put metamod and AMXX at svencoop dir (not the _addon or any other mounted folder) then just run the game with -dll addons/metamod/dlls/metamod.so, however I only tested dedicated servers and never tried a listen server with metamod ever (even with vanilla HL1!).

I used that because using the recommended installation instruction did not worked for me, which caused the metamod-p not to get loaded.

Remove the startup load on metamod on your startup line

Remove the following in liblist.gam

gamedll_linux "dlls/server.so"

and then add

gamedll_linux "addons/metamod/dlls/metamod.so"

In the metamod folder, there is a config.ini, you can add the gamedll

gamedll dlls/cs.so

as R4to0 already pointed out on Sven Co-op I'm supposed to use the command line parameter instead to add the additional dlls not by editing the liblist.gam because Sven Co-op uses a modified proprietary Gold source engine and is not related to Counter Strike.

djearthquake commented 1 year ago

Simple 'make it work' bash example.

#!/bin/bash
CFG="+mapchangecfgfile server.cfg"
EDI="-num_edicts 8192"
ID=`whoami`
LOC="+localinfo mm_gamedll dlls/server.so"
LOG="+log on +localinfo mm_debug 10"
META="-dll addons/metamod/dlls/metamod.so"
NAME=`hostname`

PORT="-port 27017"
MAP="+map uplink"
NET="-tos -tcp -debug +condebug"
SERVER_IP=`hostname  -I | cut -f1 -d' '`
SERVICE="server.so"

ZONE="-zone 8192"

if pgrep "$SERVICE"
then echo "Sven found/ Not running"
else
    cd /home/$ID/Steam/steamapps/common/Sven\ Co-op\ Dedicated\ Server/
    nohup screen -A -m -d -S SVEN_COOP ./svends_run $EDI $ZONE $META $LOC $NET $MAP $PORT $CFG +maxplayers 32  +hostname $NAME$ID &
fi
KometFox commented 1 year ago

Thanks for the script but I had to do some changes for it to get it to work on my end. I also disabled temporarily loading metamod mod just to see if I can connect to my own server that way and it doesn't work, I entered various ip and the port being used and Sven Co-op couldn't connect to my server.

Sorry for my dumbness but I also just noticed I dumped the scripts and mods stuff to "Sven Co-op" directory and not under "Sven Co-op/svencoop" which would explain why I had some troubles getting metamod and others working.

Here is my modified script:

#!/bin/bash
CFG="+mapchangecfgfile server.cfg"
EDI="-num_edicts 8192"
ID=`whoami`
LOG="+log on +localinfo mm_debug 10"
METACFG="+localinfo mm_execcfg addons/metamod/exec.cfg"
META="-dll addons/metamod/dlls/metamod.so"

PORT="-port 27015"
MAP="+map abandoned"
NET="-tos -tcp -debug +condebug"
SERVER_IP=`hostname  -I | cut -f1 -d' '`
SERVICE="server.so"

ZONE="-zone 8192"

if pgrep "$SERVICE"
then echo "Sven found/ Not running"
else
    cd "~/.steam/debian-installation/steamapps/common/Sven Co-op/Sven Co-op Dedicated Server/"
    #nohup screen -A -m -d -S SVEN_COOP ./svends_run $EDI $ZONE $META $METACFG $NET $MAP $PORT $CFG +maxplayers 2  +hostname Serb &
    nohup screen -A -m -d -S SVEN_COOP ./svends_run $EDI $ZONE $NET $MAP $PORT $CFG +maxplayers 32  +hostname $ID &
fi

Just checked it out again and I'm getting this error:

Couldn't load game library "~/.steam/debian-installation/steamapps/common/Sven Co-op/svencoop/dlls/server.so"
Reason: libssl.so.1.1: cannot open shared object file: No such file or directory
Host_Error: No valid game library could be found!
FATAL ERROR (shutting down): Host_Error: No valid game library could be found!

Uh oh it seems the server has crashed or failed to run (╯°□°)╯︵ ┻━┻
Support available on our Discord server: https://discord.gg/svencoop

I fixed the issue now, had to download the libssl version 1.1 (x86) package from here: http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/?C=M;O=D

now I can start the server and connecting to it.

KometFox commented 1 year ago

Simple 'make it work' bash example. nohup screen -A -m -d -S SVEN_COOP ./svends_run $EDI $ZONE $META $LOC $NET $MAP $PORT $CFG +maxplayers 32 +hostname $NAME$ID &

There is something wrong with the nohup or screen programs. It seems those process still runs in the background somewhere whenever I kill the dedicated server. Because I had the issues when I often restarted my server because I had to fix bugs or doing changes to angle scripts mods my computer is getting much slower and I am getting even poorer performance on Sven Coop despite I usually get at a capped 144 FPS on most maps. It can't be the problem of my Computer Hardware since its pretty powerful with ray tracing capabilities.

djearthquake commented 10 months ago

That's what it is designed to do. Must go into screen and type exit or kill the screen process. I got good fps on an old i3. It was capped until I increased sys_ticrate. Meta and Amxx are working. I uploaded a newer start up script to make sure process is not running. Can use it or that part of script in yours. I used to have it in a script that checked if port was in use first then the process. Original script still works I just update over time. I do not use cpulimit these days but I left it in the script to check for it.