Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Half-Life (Steam) #55

Open
ghost opened this issue Sep 15, 2019 · 18 comments
Open

Half-Life (Steam) #55

ghost opened this issue Sep 15, 2019 · 18 comments

Comments

@ghost
Copy link

ghost commented Sep 15, 2019

Note 1: This test was run on Ubuntu 19.04 with box86 built in a 32 bit chroot, and multilib enabled on the host system

Note 2: before testing Steam games, set your status to Offline/Invisible to save your friends messaging you asking why you started one game 20+ times...

This seems to require a lot of dependencies:
libopenal1:i386 libfontconfig1:i386 libgtk2.0-0:i386 libnss3:i386 and libpng12 from https://packages.ubuntu.com/xenial-updates/libpng12-0
Also, symlink libgcrypt.so.20 to libgcrypt.so.11.

Then, a lot of missing symbols, followed by a crash. I wonder how much of this is Steam related, and if I could get a non-Steam version of the game it'd run...

log.txt

@mittorn
Copy link
Contributor

mittorn commented Jan 5, 2020

try analyze dependencies with ldd and minimize it before running it under box86, half-life does not have too much direct dependencies. maybe need rebuild some depended libraries in minimal configuration or try versions from steam runtime

@PrcoKillerSK
Copy link

I would like to ask, if there is anything new about running Half-Life on Box86.

I would like to start Half-Life Dedicated Server and try to connect to it from other devices. It would be really great if that was possible, to install SteamCMD, download HL, HLDS and launch it.

If this is possible, could someone please tell me, how to do it? I am completely new to Raspberry Pi4. I tried to install SteamCMD in other emulator, but did not have any luck with it. And I see, that this project is active.

@ptitSeb
Copy link
Owner

ptitSeb commented Apr 23, 2020

I have started experimenting with the full steam client now. I too had very little success with SteamCMD, especialy since to switch to python.
HL client crash for now, but I have tried a server yet.

@PrcoKillerSK
Copy link

PrcoKillerSK commented Apr 25, 2020

Okay, so... I actually WAS able to launch SteamCMD and install HLDS. I also WAS able to launch HLDS! :) Here are some things I've noticed

  1. Installing HLDS in SteamCMD (also with validation) was successful on my second attempt. But
    this could actually be, that I wrote something wrongly in my app_update command. (Steam also has a note, that sometimes you have to use that command multiple times so it would successfully install the application/game, so it could also be this case :) ).

  2. After launching HLDS it was missing file steamclient.so.

Cannot dlopen("/home/pi/.steam/sdk32/steamclient.so"/0xb6c6fbb0, 2)

With this problem, I still could see my HLDS Pi4 server on PC, but when I tried to connect, the server crashed with segmentation fault. I was able to fix this by creating folder sdk32 in folder .steam and linking that file with ln command. After that, I relaunched my server. When I tried to connect after this fix, I was successfully on the server. I could play there as on any regular server! :) After I disconnected and tried to shut down server, I got segmentation fault again, but... well, I was meaning to shut it down anyway so... same effect... :D

  1. Only I could connect to my server from my PC. No other devices from any other network could see it. This isn't acutally problem of box86, but of my IP address, so it doesn't matter. :)

  2. When I am launching HLDS server now, I still get some errors, but am still able to connect to the server without problems (shutting down still ends with segmentation fault though :( ).

Here is my console log from running server:

pi@raspberrypi:~/Downloads/steamcmd/HLDS $ ./hlds_linux -game valve +maxplayers 16 +map crossfire
Dynarec for ARM, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/
Using default BOX86_PATH: ./:bin/
Counted 45 Env var
Looking for ./hlds_linux
Using emulated libstdc++.so.6
Using native(wrapped) libm.so.6
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using emulated libgcc_s.so.1
Using native(wrapped) libdl.so.2
Error: Symbol _ZSt11__once_call not found, cannot apply R_386_TLS_DTPOFF32 @0xb6457d5c ((nil))
Using emulated /home/pi/Downloads/steamcmd/HLDS/engine_i486.so
Using emulated libsteam_api.so
Using emulated /home/pi/Downloads/steamcmd/HLDS/filesystem_stdio.so

Console initialized.
Using breakpad crash handler
Setting breakpad minidump AppID = 70
Forcing breakpad minidump interfaces to load
Using emulated /home/pi/.steam/sdk32/steamclient.so
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit
Using emulated /home/pi/Downloads/steamcmd/HLDS/crashhandler.so
scandir failed:/home/pi/Downloads/steamcmd/HLDS/./valve/SAVE
Protocol version 48
Exe version 1.1.2.2/Stdio (valve)
Exe build: 15:16:04 Jul 24 2019 (8308)
STEAM Auth Server
Server IP address _<here is my IP address>_
Using emulated /home/pi/Downloads/steamcmd/HLDS/./valve/dlls/hl.so
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
CAppInfoCacheReadFromDiskThread took 43 milliseconds to initialize
CApplicationManagerPopulateThread took 10 milliseconds to initialize (will have waited on CAppInfoCacheReadFromDiskThread)
Warning: Cannot dlopen("/home/pi/Downloads/steamcmd/HLDS/steamservice.so"/0xa6a3d2f0, 2)
Warning: Cannot dlopen("steamservice.so"/0xa6a3d2f0, 2)
Using native(wrapped) libSDL2-2.0.so.0
RecordSteamInterfaceCreation (PID 2210): SteamGameServer011 / GameServer
RecordSteamInterfaceCreation (PID 2210): SteamUtils005 / Utils
RecordSteamInterfaceCreation (PID 2210): STEAMAPPS_INTERFACE_VERSION005 / Apps
RecordSteamInterfaceCreation (PID 2210): STEAMHTTP_INTERFACE_VERSION002 / HTTP
RecordSteamInterfaceCreation (PID 2210): SteamNetworking005 / Networking
RecordSteamInterfaceCreation (PID 2210): SteamGameServerStats001 / GameServerStats
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit

couldn't exec listip.cfg
couldn't exec banned.cfg
Could not establish connection to Steam servers.
say TEST
<Half-Life> TEST
Reconnected to Steam servers.
   VAC secure mode is activated.
PrcoKillerSK: Connected! So I came here, and I got here, and I wrote here, and here I aaaam! :)
Dropped PrcoKillerSK from server
Reason:  Client sent 'drop'
say Time to shut down
<Half-Life> Time to shut down
shutdownserver
configstore.cpp (121) : Assertion Failed: ConfigStore (InstallConfigStore) is dirty, and being destroyed, we're discarding data
configstore.cpp (121) : Assertion Failed: ConfigStore (InstallConfigStore) is dirty, and being destroyed, we're discarding data
Segmentation fault

As you can see in this log, it can not find some symbol _ZSt11__once_call. Any ideas, what it is please? Maybe some missing or outdated library?

It is also missing file steamservice.so for some reason. This is something I've actually didn't notice yesterday, so either I didn't notice it or it appeared just today.

Segmentation fault at the end... :(

But still, was able to connect, was able to play! :)

  1. About performance. Many friends who knew I was going to try this, were afraid, that when I connect to this box86 HLDS server, it is gonna be lagging as hell... NOPE! :) My ping was about 5, 9, 10... Only sometimes it went up to 100 for a moment (could be because I am connected to Wi-Fi on my Raspberry). So at least for now, I don't worry about performance problem. (Great job box86 team! :) )

As for my next steps, I am going to try AMX Mod X and some simple plugins as Sank sounds and so on. If it works (or even if it won't :D ) I will let you know! :)

Again, great job on this project! A huge respect to all of you! :)

EDIT!
So I've tried adding Metamod, Dproto and AMXX. I tried to launch HLDS with this command:

pi@raspberrypi:~/Downloads/steamcmd/HLDS $ ./hlds_linux -game valve +maxplayers 16 +map crossfire -dll addons/metamod/dlls/metamod.so

It started to launch normally (just that _Symbol ZSt11__once_call not found error). But then, I got this:

Using emulated /home/pi/Downloads/steamcmd/HLDS/./valve/addons/metamod/dlls/metamod.so
Using emulated /home/pi/Downloads/steamcmd/HLDS/hlds_linux
   
   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.
   
Using emulated /home/pi/Downloads/steamcmd/HLDS/valve/dlls/hl.so
Warning, ignoring unsupported Int 3 call
Segmentation fault

Sometimes at the end I also get error like this:
Unimplemented Opcode

Any ideas, what could go wrong please?

Using:
Metamod 1.21p38
AMXX 1.8.2 (tried to comment it in metamod plugins.ini)
dproto 0.4.8 (tried to comment it in metamod plugins.ini)

EDIT 2!
A friend just told me not to launch server with hlds_linux but hlds_run, so my launch command now looks like this:

pi@raspberrypi:~/Downloads/steamcmd/HLDS $ ./hlds_run -game valve +maxplayers 16 +map crossfire -dll addons/metamod/dlls/metamod.so

No Segmentation fault so far, BUT I still keep getting this Warning, ignoring unsupported Int 3 call and after that Unsupported Int 8Ah error (the number changes after every restart). It keeps restarting itself every 10 seconds thanks to HLDS feature.

@PrcoKillerSK
Copy link

After new commit (with Int3 calls) I was hoping, that it would fix this issue. Still no luck and now it gives me Segmentation fault even if I run it with ./hlds_run file. (No luck with ZSt11__once_call not found either).

@mittorn
Copy link
Contributor

mittorn commented Apr 30, 2020

metamod-p rewrites dlsym, so it will not work. You need original metamod which uses big linkent table. I do not know if it work with dproto

@PrcoKillerSK
Copy link

I tried metamod 1.20 a few minutes ago, but had no luck.

Symbol _DYNAMIC not found, cannot apply R_386_GLOB_DAT .... {{nil}}
Segmentation fault

I also tried metamod am version, but no luck there either. It didn't even launch it with these two.

So the best success so far was with Metamod P when it actually did launch, but crashed on that Int3 call. It seems that it is trying to send hexa number to Int function.

@mittorn
Copy link
Contributor

mittorn commented Apr 30, 2020

Try build metamod-hl1 with modern compiler, gcc-2.95 version does not seems to work with box86

@PrcoKillerSK
Copy link

My friend compiled it for me, because I don't have x86 linux installed.

He compiled MetamodP and MetamodAM, because compiling original Metamod threw a lot of errors. Still no success.

Metamod AM launch console log ended with this:

Using emulated /home/pi/Downloads/steamcmd/HLDS/./valve/addons/metamod/dlls/metamod.so
Error: Symbol _ZdlPvj not found, cannot apply R_386_JMP_SLOT @0xab85f2d0 (0x2db46)
Segmentation fault

Metamod P launch console log ended with this:

Using emulated /home/pi/Downloads/steamcmd/HLDS/./valve/addons/metamod/dlls/metamod.so
Using emulated /home/pi/Downloads/steamcmd/HLDS/hlds_linux
   
   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.
   
Using emulated /home/pi/Downloads/steamcmd/HLDS/valve/dlls/hl.so
Warning, ignoring unsupported Int 3 call
Segmentation fault

In both logs, again this error appeared in beginning part:
Error: Symbol _ZSt11__once_call not found, cannot apply R_386_TLS_DTPOFF32 @0xb6434d5c ((nil))

So, still no luck so far :(

@mittorn
Copy link
Contributor

mittorn commented May 1, 2020

libstdc++ is forgotten in metamod makefile. It may be fixed by LD_PRELOAD

@mittorn
Copy link
Contributor

mittorn commented May 1, 2020

try BOX86_LD_PRELOAD=(path to x86 libstdc++)

@PrcoKillerSK
Copy link

PrcoKillerSK commented May 1, 2020

try BOX86_LD_PRELOAD=(path to x86 libstdc++)

Tried it,, but nothing changed. Not even in startup console log. When i chose different version of library (for example the one from box86), this was still in log:

Using emulated libstdc++.so.6
...
Error: Symbol _ZSt11__once_call not found, cannot apply R_386_TLS_DTPOFF32 @0xb6457d5c ((nil))
...
Warning, ignoring unsupported Int 3 call
Segmentation fault

@PrcoKillerSK
Copy link

I was wondering, is it supposed to write something after that BOX86_LD_PRELOAD=(path to x86 libstdc++.so.6) command in console? I mean, something like: Library libstdc++.so.6 successfully preloaded. Because when I used that command, nothing was printed in console, just only line for next command (and as I said, nothing changed in HLDS console startup log).

@PrcoKillerSK
Copy link

PrcoKillerSK commented May 16, 2020

I tried to run the server the simmilar way as in Issue #115, with command:

gdb --args box86 ./hlds_linux -game valve +maxplayers 16 +map crossfire -dll addons/metamod/dlls/metamod.so

This time, the end of console log looked like this:

Program received signal SIGSEGV, Segmentation fault.
0x73855c24 in GetDynablocksFromAddress ()

I tried what was mentioned in the HL2DM issue and tried to print last 20 ARM instructions.

(gdb) x/20i $pc-60
   0x73855be8 <GetTLSPointer+180>:	
    pop	{pc}		; (ldr pc, [sp], #4)
   0x73855bec <GetDynablocksFromAddress>:	str	r11, [sp, #-8]!
   0x73855bf0 <GetDynablocksFromAddress+4>:	str	lr, [sp, #4]
   0x73855bf4 <GetDynablocksFromAddress+8>:	add	r11, sp, #4
   0x73855bf8 <GetDynablocksFromAddress+12>:	sub	sp, sp, #16
   0x73855bfc <GetDynablocksFromAddress+16>:	str	r0, [r11, #-16]
   0x73855c00 <GetDynablocksFromAddress+20>:	
    str	r1, [r11, #-20]	; 0xffffffec
   0x73855c04 <GetDynablocksFromAddress+24>:	
    ldr	r1, [r11, #-20]	; 0xffffffec
   0x73855c08 <GetDynablocksFromAddress+28>:	ldr	r0, [r11, #-16]
   0x73855c0c <GetDynablocksFromAddress+32>:	
    bl	0x73855344 <FindElfAddress>
   0x73855c10 <GetDynablocksFromAddress+36>:	str	r0, [r11, #-8]
   0x73855c14 <GetDynablocksFromAddress+40>:	ldr	r3, [r11, #-8]
   0x73855c18 <GetDynablocksFromAddress+44>:	cmp	r3, #0
   0x73855c1c <GetDynablocksFromAddress+48>:	
    bne	0x73855ccc <GetDynablocksFromAddress+224>
   0x73855c20 <GetDynablocksFromAddress+52>:	
    ldr	r3, [r11, #-20]	; 0xffffffec
=> 0x73855c24 <GetDynablocksFromAddress+56>:	ldrb	r3, [r3]
   0x73855c28 <GetDynablocksFromAddress+60>:	cmp	r3, #204	; 0xcc

I have no idea what those lines mean, but maybe you can figure something out of these.

@ptitSeb
Copy link
Owner

ptitSeb commented May 16, 2020

It's a segfault (SIGSEGV), not a bus error (SIGBUS), so not the same kind of error. Here the last 20 ARM instruction are less usefull, and it would e better to have gdb backtrace (so just "bt" when there is the segfault).
But acording to the position of the segfault, I think it's more like a missing wrapped function. I guess there are still a lot of "Error missing symbols" at start?

@PrcoKillerSK
Copy link

Nope, just this one:

Error: Symbol _ZSt11__once_call not found, cannot apply R_386_TLS_DTPOFF32 @0xb6457d5c ((nil))
...
Warning, ignoring unsupported Int 3 call
Segmentation fault

Sometimes after that Unsupported Int 3 call it did write this: Unsupported Int 8Ah (the number was changing as I was trying it).

@ptitSeb
Copy link
Owner

ptitSeb commented Oct 11, 2022

HalfLife was working fine at some point on steam, but it's broken again, I have to debug what is happening (some libcef madness again, probably)

@hampta
Copy link

hampta commented Feb 28, 2024

Are there those who had/have the same problem as the author of this issue?

I hope there are others like me with Oracle VM.Standard.A1.Flex Free tier VM.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants