staging.inyokaproject.org

Für diese Funktion musst du eingeloggt sein.

Ausführen der minqlx python Skripte auf Gameserver

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

DsdL

Anmeldungsdatum:
5. Februar 2008

Beiträge: 170

Hallo zusammen,

wir haben kürzlich einen vServer mit Ubuntu 20.04 Server gemietet und wollen einen Quakelive Gameserver darauf aufsetzen. Hierzu habe ich Quake bereits über die Steamkonsole Installiert, und alleinstehend läuft der Server soweit schonmal. Zusätzlich sollen auf dem Server noch die Python Addons von minqlx laufen, und bei deren Ausführung bekomme ich im Moment leider Probleme. Ich habe minqlx entsprechend der Anleitungen auf dem Git installiert (https://github.com/MinoMino/minqlx), d.h. den Redis Server installiert, minqlx kompilliert, sowie die Plugins und die Abhängigkeiten installiert. Das hat soweit alles funktioniert, ich habe lediglich eine Warnung beim Kompillieren erhalten:

python_embed.c: In function ‘PyMinqlx_ReplaceItems’:
python_embed.c:1513:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
 1513 |         entity_classname = PyUnicode_AsUTF8(arg1);
      |                          ^
python_embed.c:1523:24: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
 1523 |         item_classname = PyUnicode_AsUTF8(arg2);

Alle zum ausführen des Skripts benötigten Dateien wurden aber erstellt, und von mir in das Gameverzeichnis kopiert. Leider bekomme ich beim Ausführen des Startscripts eine Fehlermeldung:

./run_server_x64_minqlx.sh
./qzeroded.x64: symbol lookup error: ./minqlx.x64.so: undefined symbol: PyExc_ValueError

Das 64 bit Startscript sieht folgendermaßen aus:

1
2
3
4
5

#!/bin/bash
cd "$(dirname "$0")"
export LD_PRELOAD=$LD_PRELOAD:./minqlx.x64.so
LD_LIBRARY_PATH="./linux64:$LD_LIBRARY_PATH" exec ./qzeroded.x64 "$@"

Hier noch die Ausgabe von ldd für die minqlx.x64.so

 ldd minqlx.x64.so
        linux-vdso.so.1 (0x00007fff06d37000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1b2849a000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1b28494000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1b28345000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1b28153000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1b284e9000)

Auf dem System hatte ich eine vorinstallierte Version von Python 3.8. Nachdem ich zwischenzeitlich einen Fehler erhielt, der auf eine fehlende Python 3.5 lib hingewiesen hat, habe ich zusätzlich noch ein Python3.5 nachinstalliert:

/home/steam/.steam/steamcmd/steamapps/common/qlds$ python3 -V
Python 3.8.2
/home/steam/.steam/steamcmd/steamapps/common/qlds$ python3.5 -V
Python 3.5.9

Hat jemand irgendeine Idee was da passiert (oder nicht passiert)?

Vielen Dank schonmal!

DsdL

(Themenstarter)

Anmeldungsdatum:
5. Februar 2008

Beiträge: 170

Update: Ich bin nun dazu übergegangen statt der selbst kompillierten .so Objekte, die fertigen aus dem tar release von minqlx zu benutzen (https://github.com/MinoMino/minqlx/releases/download/v0.5.2/minqlx_v0.5.2.tar.gz). Leider liefert das Ausführen des Startskripts immernoch einen Fehler, allerdings zumindest einen mit dem ich etwas mehr anfangen kann:

./qzeroded.x64: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

Diese Bibliothek habe ich bereits:

locate libpython3.5m
/usr/local/lib/libpython3.5m.a
/usr/local/lib/python3.5/config-3.5m/libpython3.5m.a
/usr/src/Python-3.5.9/libpython3.5m.a

Ich habe daraufhin das Startscript dahingehend modifiziert, dass ich den Pfad zur Pythonlib manuell zur $LD_LIBRARY_PATH variable hinzufüge:

$ cat run_server_x64_minqlx.sh
#!/bin/bash
cd "$(dirname "$0")"
export LD_PRELOAD=$LD_PRELOAD:./minqlx.x64.so
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
echo $LD_LIBRARY_PATH
LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
exec ./qzeroded.x64 "$@"

Damit widerum findet er jedoch die libsteam_api.so nicht, welche jedoch direkt im ./linux64 Unterverzeichnis vorhanden ist:

$ ./run_server_x64_minqlx.sh
:/usr/local/lib
./qzeroded.x64: error while loading shared libraries: libsteam_api.so: cannot open shared object file: No such file or directory

Ich habe schon verschiedenste Varianten des Setzens der LD_LIBRARY_PATH variable durchprobiert und für den ./linux64 Unterordner der die libsteam_api Bibliothek enthält auch den absoluten Pfad angegeben. Jedoch findet er egal welche Variante ich setze entweder die pythonlib3.5 oder die steam lib nicht.. Weiß jemand was ich falsch mache?

Antworten |