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

core keeper segment failure fixes #70

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

Osanchez
Copy link

@Osanchez Osanchez commented Sep 1, 2024

Description

The game is now force installed with the windows version. the docker image has been changed to a steam cmd image with wine. some never changing variables have been removed (screen sizes) as well as a new variable that forces windows installation. finally, the startup command has been cleaned up a bit as well as some changes to the configuration of the egg to detect when the server is out of installation and running.

Checklist for all submissions

  • Have you followed the guidelines in our Contributing document?
  • Have you checked to ensure there aren't other open Pull Requests for the same update/change?
  • [X ] Have you tested and reviewed your changes with confidence that everything works?
  • Did you branch your changes and PR from that branch and not from your master branch?
    • If not, why?:
      I forked and pushed to the master branch on the fork. this is a one time fix I did for myself. I dont plan on maintaining this and only want to push the current egg ahead of its current non-working state. hopefully others make improvements where they see fit. It seems the dedicated server for Linux is not working. Also, I'm lazy.
  • You verify that the start command applied does not use a shell script
  • If some script is needed then it is part of a current yolk or a PR to add one
  • The egg was exported from the panel

@hackles
Copy link

hackles commented Sep 4, 2024

Steamworks SDK is already included in the yolk. There is no need to add it again.

It's unclear why the resolution was changed from 1x1x24 to 1024x768x24. I'm not sure if there's a performance impact one way or the other, but it's a change that was made without any explanation.

It's also unclear why there's a switch to Wine when the developers provide a Linux binary.

Lastly, you're overriding a Pelican egg with a Pterodactyl egg.


I'm experiencing the segfault errors as well, and I'm not sure how to resolve them. But I don't think this is the right direction.

@gOOvER
Copy link
Contributor

gOOvER commented Sep 4, 2024

why wine? there is a linuxserver and wine is not needed

@Osanchez
Copy link
Author

Osanchez commented Sep 4, 2024

Thanks for the feedback hackles.

This egg has not been working for a while now. I have looked into using the Linux install already. It is not functional. It works with wine, and there are plenty of games out there using wine. I suspect the issue with the Linux install is issues with Xvfb. I have gone through the process of running this egg in my own docker container so that I can better monitor logs. The game runs in Linux and then Xvfb throws segmentation error because it is crashing and what I assume is a restart is failing because the screen is still running in a failed state.

This is a PR was intended to be for the the pterodactyl egg. I'll change the targeted file and remove the Steamworks sdk in the install script. I went ahead and restored the resolution back to the default used. I dont know how this really effects performance. I also removed the steamworks sdk install and utilize the entrypoint.sh to install the game instead of the startup script.

@Osanchez
Copy link
Author

Osanchez commented Sep 4, 2024

https://discourse.cubecoders.com/t/core-keeper-segmentation-fault/3623

I just read this post that had a similar issue with the segmentation faults occurring on the linux install. might again be because of the version of Xvfb which aligns with the Xvfb issues I was having with the originally included debian image.

ghcr.io/parkervcp/steamcmd:debian

container@a87fb725223d:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
container@a87fb725223d:~$

also checking version of xvfb

container@7a203e7de297:~$ dpkg -s xvfb
Package: xvfb
Status: install ok installed
Priority: optional
Section: x11
Installed-Size: 4423
Maintainer: Debian X Strike Force <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Source: xorg-server
Version: 2:21.1.7-3+deb12u7
Provides: xserver
Depends: xserver-common (>= 2:21.1.7-3+deb12u7), libaudit1 (>= 1:2.2.1), libbsd0 (>= 0.7.0), libc6 (>= 2.35), libgcrypt20 (>= 1.10.0), libgl1, libpixman-1-0 (>= 0.30.0), libselinux1 (>= 3.1~), libsystemd0, libunwind8, libxau6 (>= 1:1.0.9), libxdmcp6, libxfont2 (>= 1:2.0.1)

ghcr.io/parkervcp/yolks:wine_latest

PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@4f1d64e89404:~#

and xvfb version

root@af767ed14273:~# dpkg -s xvfb
Package: xvfb
Status: install ok installed
Priority: optional
Section: x11
Installed-Size: 4423
Maintainer: Debian X Strike Force <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Source: xorg-server
Version: 2:21.1.7-3+deb12u7
Provides: xserver
Depends: xserver-common (>= 2:21.1.7-3+deb12u7), libaudit1 (>= 1:2.2.1), libbsd0 (>= 0.7.0), libc6 (>= 2.35), libgcrypt20 (>= 1.10.0), libgl1, libpixman-1-0 (>= 0.30.0), libselinux1 (>= 3.1~), libsystemd0, libunwind8, libxau6 (>= 1:1.0.9), libxdmcp6, libxfont2 (>= 1:2.0.1)
Recommends: xauth

for whatever reason, wine works. the only hypothesis I can find around this is related to file permissions.

server log on linux install

Mono path[0] = '/home/container/CoreKeeperServer_Data/Managed'
Mono config path = '/home/container/CoreKeeperServer_Data/MonoBleedingEdge/etc'
Preloaded 'discord_game_sdk.so'
Shutdown handler: initialize.
Preloaded 'libEOSSDK-Linux-Shipping.so'
Preloaded 'libPlayFabMultiplayer.so'
Preloaded 'lib_burst_generated.so'
Caught fatal signal - signo:11 code:1 errno:0 addr:0x20
Obtained 24 stack frames.
#0  0x007f1834c64050 in __sigaction
#1  0x007f17f5c5eee0 in BumblelionLogger::TryToLoadConfigurationFile()
#2  0x007f17f5c5ecd8 in BumblelionLogger::BumblelionLogger()
#3  0x007f17f5c5f870 in BumblelionLogger::GetInstance()
#4  0x007f17f5c5ebf6 in DbgLogAreaFlags_FnInOut
#5  0x007f17f5c76d79 in OutstandingPlayFabRequestManager::OutstandingRequest::OutstandingRequest()
#6  0x007f17f5c76bfd in OutstandingPlayFabRequestManager::OutstandingRequestList::OutstandingRequestList()
#7  0x007f17f5c7c6ab in _GLOBAL__sub_I_PlayFabServiceManagerImpl.cpp
#8  0x007f1836f8e9ce in __nptl_change_stack_perm
#9  0x007f1836f8eab4 in __nptl_change_stack_perm
#10 0x007f1834d77024 in _dl_catch_exception
#11 0x007f1836f9521e in _dl_rtld_di_serinfo
#12 0x007f1834d76fca in _dl_catch_exception
#13 0x007f1836f955b8 in _dl_find_dso_for_object
#14 0x007f1834cad438 in dlmopen
#15 0x007f1834d76fca in _dl_catch_exception
#16 0x007f1834d7707f in _dl_catch_error
#17 0x007f1834cacf27 in dlerror
#18 0x007f1834cad4e9 in dlopen
#19 0x007f1835d82f8e in PlayerMain(int, char**)
#20 0x007f1835d7377d in PlayerMain(int, char**)
#21 0x007f1834c4f24a in __libc_init_first
#22 0x007f1834c4f305 in __libc_start_main
#23 0x00000000201029 in (Unknown)

I did have an instance where the server does appear to run, but I am running as root as opposed to the container user

Mono path[0] = '/mnt/server/CoreKeeperServer_Data/Managed'
Mono config path = '/mnt/server/CoreKeeperServer_Data/MonoBleedingEdge/etc'
Preloaded 'discord_game_sdk.so'
Shutdown handler: initialize.
Preloaded 'libEOSSDK-Linux-Shipping.so'
Preloaded 'libPlayFabMultiplayer.so'
Preloaded 'lib_burst_generated.so'
Preloaded 'libparty.so'
Preloaded 'libsentry.so'
Preloaded 'libsteam_api.so'
Display 0 'screen': 1x1 (primary device).
[Physics::Module] Initialized MultithreadedJobDispatcher with 11 workers.
Loading player data from /mnt/server/CoreKeeperServer_Data/data.unity3d
Desktop is 1 x 1 @ 0 Hz
Initialize engine version: 2022.3.20f1 (61c2feb0970d)
[Subsystems] Discovering subsystems at path /mnt/server/CoreKeeperServer_Data/UnitySubsystems
GfxDevice: creating device client; threaded=0; jobified=0
Renderer: llvmpipe (LLVM 15.0.6, 256 bits)
Vendor:   Mesa/X.org
Version:  4.5 (Core Profile) Mesa 22.3.6
GLES:     0
 GL_3DFX_texture_compression_FXT1 GL_AMD_conservative_depth GL_AMD_draw_buffers_blend GL_AMD_gpu_shader_int64 GL_AMD_multi_draw_indirect GL_AMD_pinned_memory GL_AMD_query_buffer_object GL_AMD_seamless_cubemap_per_texture GL_AMD_shader_stencil_export GL_AMD_shader_trinary_minmax GL_AMD_texture_texture4 GL_AMD_vertex_shader_layer GL_AMD_vertex_shader_viewport_index GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ARB_ES2_compatibility GL_ARB_ES3_1_compatibility GL_ARB_ES3_2_compatibility GL_ARB_ES3_compatibility GL_ARB_arrays_of_arrays GL_ARB_base_instance GL_ARB_blend_func_extended GL_ARB_buffer_storage GL_ARB_clear_buffer_object GL_ARB_clear_texture GL_ARB_clip_control GL_ARB_compressed_texture_pixel_storage GL_ARB_compute_shader GL_ARB_conditional_render_inverted GL_ARB_conservative_depth GL_ARB_copy_buffer GL_ARB_copy_image GL_ARB_cull_distance GL_ARB_debug_output GL_ARB_depth_buffer_float GL_ARB_depth_clamp GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_draw_buffers GL_A
RB_draw_buffers_blend GL_ARB_draw_elements_base_vertex GL_ARB_draw_indirect GL_ARB_draw_instanced GL_ARB_enhanced_layouts GL_ARB_explicit_attrib_location GL_ARB_explicit_uniform_location GL_ARB_fragment_coord_conventions GL_ARB_fragment_layer_viewport GL_ARB_fragment_shader GL_ARB_framebuffer_no_attachments GL_ARB_framebuffer_object GL_ARB_framebuffer_sRGB GL_ARB_get_program_binary GL_ARB_get_texture_sub_image GL_ARB_gl_spirv GL_ARB_gpu_shader5 GL_ARB_gpu_shader_fp64 GL_ARB_gpu_shader_int64 GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_indirect_parameters GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_internalformat_query2 GL_ARB_invalidate_subdata GL_ARB_map_buffer_alignment GL_ARB_map_buffer_range GL_ARB_multi_bind GL_ARB_multi_draw_indirect GL_ARB_occlusion_query2 GL_ARB_parallel_shader_compile GL_ARB_pipeline_statistics_query GL_ARB_pixel_buffer_object GL_ARB_point_sprite GL_ARB_polygon_offset_clamp GL_ARB_post_depth_coverage GL_ARB_program_interface_query GL_ARB_provoking_vertex GL
_ARB_query_buffer_object GL_ARB_robust_buffer_access_behavior GL_ARB_robustness GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_seamless_cubemap_per_texture GL_ARB_separate_shader_objects GL_ARB_shader_atomic_counter_ops GL_ARB_shader_atomic_counters GL_ARB_shader_ballot GL_ARB_shader_bit_encoding GL_ARB_shader_clock GL_ARB_shader_draw_parameters GL_ARB_shader_group_vote GL_ARB_shader_image_load_store GL_ARB_shader_image_size GL_ARB_shader_objects GL_ARB_shader_precision GL_ARB_shader_stencil_export GL_ARB_shader_storage_buffer_object GL_ARB_shader_subroutine GL_ARB_shader_texture_image_samples GL_ARB_shader_texture_lod GL_ARB_shader_viewport_layer_array GL_ARB_shading_language_420pack GL_ARB_shading_language_include GL_ARB_shading_language_packing GL_ARB_spirv_extensions GL_ARB_stencil_texturing GL_ARB_sync GL_ARB_tessellation_shader GL_ARB_texture_barrier GL_ARB_texture_buffer_object GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_buffer_range GL_ARB_texture_compression_bptc
GL_ARB_texture_compression_rgtc GL_ARB_texture_cube_map_array GL_ARB_texture_filter_anisotropic GL_ARB_texture_filter_minmax GL_ARB_texture_float GL_ARB_texture_gather GL_ARB_texture_mirror_clamp_to_edge GL_ARB_texture_multisample GL_ARB_texture_non_power_of_two GL_ARB_texture_query_levels GL_ARB_texture_query_lod GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_texture_rgb10_a2ui GL_ARB_texture_stencil8 GL_ARB_texture_storage GL_ARB_texture_storage_multisample GL_ARB_texture_swizzle GL_ARB_texture_view GL_ARB_timer_query GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_transform_feedback_instanced GL_ARB_transform_feedback_overflow_query GL_ARB_uniform_buffer_object GL_ARB_vertex_array_bgra GL_ARB_vertex_array_object GL_ARB_vertex_attrib_64bit GL_ARB_vertex_attrib_binding GL_ARB_vertex_buffer_object GL_ARB_vertex_shader GL_ARB_vertex_type_10f_11f_11f_rev GL_ARB_vertex_type_2_10_10_10_rev GL_ARB_viewport_array GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ATI_blend_equation_separate GL_ATI_te
xture_float GL_ATI_texture_mirror_once GL_EXT_EGL_image_storage GL_EXT_EGL_sync GL_EXT_abgr GL_EXT_blend_equation_separate GL_EXT_debug_label GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_multisample_blit_scaled GL_EXT_framebuffer_object GL_EXT_framebuffer_sRGB GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_packed_depth_stencil GL_EXT_packed_float GL_EXT_pixel_buffer_object GL_EXT_polygon_offset_clamp GL_EXT_provoking_vertex GL_EXT_shader_framebuffer_fetch GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_shader_integer_mix GL_EXT_texture_array GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_EXT_texture_filter_minmax GL_EXT_texture_integer GL_EXT_texture_mirror_clamp GL_EXT_texture_sRGB GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_EXT_texture_sRGB_decode GL_EXT_texture_shadow_lod GL_EXT_texture_shared_exponent GL_EXT_texture_snorm GL_EXT_textu
re_swizzle GL_EXT_timer_query GL_EXT_transform_feedback GL_EXT_vertex_array_bgra GL_EXT_vertex_attrib_64bit GL_IBM_multimode_draw_arrays GL_INTEL_shader_atomic_float_minmax GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_context_flush_control GL_KHR_debug GL_KHR_no_error GL_KHR_parallel_shader_compile GL_KHR_robust_buffer_access_behavior GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_sliced_3d GL_MESA_framebuffer_flip_y GL_MESA_pack_invert GL_MESA_shader_integer_functions GL_MESA_texture_signed_rgba GL_MESA_ycbcr_texture GL_NV_conditional_render GL_NV_copy_image GL_NV_depth_clamp GL_NV_packed_depth_stencil GL_NV_shader_atomic_float GL_NV_texture_barrier GL_OES_EGL_image GL_S3_s3tc
OPENGL LOG: Creating OpenGL 4.5 graphics device ; Context level  <OpenGL 4.5> ; Context handle 13797168
Begin MonoManager ReloadAssembly
- Loaded All Assemblies, in  0.081 seconds
- Finished resetting the current domain, in  0.001 seconds
PlatformConfiguration: loading platform configuration for variant Linux.
PlatformConfiguration: platform configuration for variant Linux was not found.
PlatformConfiguration: loading platform configuration for variant PC.
Fallback handler could not load library /mnt/server/CoreKeeperServer_Data/MonoBleedingEdge/x86_64/data-0x4fd5310.so
Fallback handler could not load library /mnt/server/CoreKeeperServer_Data/MonoBleedingEdge/x86_64/data-0x5118b50.so
Initializing Steamworks with AppID 1621690
Steam server using game port: 25002 query port: 25003 address: 0.0.0.0
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/container/.steam/sdk64/steamclient.so' OK.  (First tried local 'steamclient.so')
CAppInfoCacheReadFromDiskThread took 3 milliseconds to initialize
Setting breakpad minidump AppID = 1621690
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.
Steam API initialized
Logged in with userid:463128583
UnloadTime: 2.068260 ms
Ignoring invalid [Unity.Entities.UpdateAfterAttribute] attribute on InitializaAttackPlayerSpawnedGhostSystem targeting Unity.NetCode.GhostSendSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateBeforeAttribute] attribute on InitializaAttackPlayerSpawnedGhostSystem targeting Unity.NetCode.RpcSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateBeforeAttribute] attribute on WorkaroundForRpcSystemNotDependentOnRpcCommandRequestersSystem targeting Unity.NetCode.RpcSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateAfterAttribute] attribute on InitializaAttackPlayerSpawnedGhostSystem targeting Unity.NetCode.GhostSendSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateBeforeAttribute] attribute on InitializaAttackPlayerSpawnedGhostSystem targeting Unity.NetCode.RpcSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateBeforeAttribute] attribute on WorkaroundForRpcSystemNotDependentOnRpcCommandRequestersSystem targeting Unity.NetCode.RpcSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Checking system requirements: PASS
Manager prelaunch and GO initialization starting...
Initialize global manager
Global manager Resources.Load
Start initializing all managers
Core count is 12
Job worker count is 11
couldn't initialize discord SDK: Ok InternalError
PlatformConfiguration: applying settings for platform variant Linux.
PlatformConfiguration: applying PrefsManager visual quality settings.
PlatformConfiguration: applying PrefsManager audio settings.
PlatformConfiguration: applying PrefsManager session settings.
PlatformConfiguration: applying QualitySettings.
Version: 1.0.0.2-4407
Time (UTC): 2024-09-04T20:23:23Z
Skipping faction mod /mnt/server/CoreKeeperServer_Data/StreamingAssets/Conf/Factions/None.json with faction None (0)
Skipping loot mod /mnt/server/CoreKeeperServer_Data/StreamingAssets/Conf/Loot/Empty.json for loot table Empty (0)
Found 319 converter(s)
Added post converter DropLootPostConverter
Added post converter DealDamagePostConverter
Added post converter RotationPostConverter
Added post converter BoatRidingColliderVariationPostConverter
Added post converter ReceivePushbackPostConverter
Added post converter ModPostConverter
Added post converter PugConversion.GhostPostConverter
Added post converter DisablePhysicsRestoreConverter
ECSManager.Init: converting PugDatabase prefab list.
ECSManager.Init: converting mods extra authoring.
ECSManager.Init: converting server authoring prefab.
PugDatabase initialized 2357 prefabs
ECSManager.Init: post conversion for server authoring prefab.
Ignoring invalid [Unity.Entities.UpdateAfterAttribute] attribute on Unity.Entities.CompanionGameObjectUpdateTransformSystem targeting Unity.Transforms.TransformSystemGroup.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateAfterAttribute] attribute on InitializaAttackPlayerSpawnedGhostSystem targeting Unity.NetCode.GhostSendSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateBeforeAttribute] attribute on InitializaAttackPlayerSpawnedGhostSystem targeting Unity.NetCode.RpcSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
Ignoring invalid [Unity.Entities.UpdateBeforeAttribute] attribute on WorkaroundForRpcSystemNotDependentOnRpcCommandRequestersSystem targeting Unity.NetCode.RpcSystem.
This attribute can only order systems that are members of the same ComponentSystemGroup instance.
Make sure that both systems are in the same system group with [UpdateInGroup(typeof(Unity.Entities.SimulationSystemGroup))],
or by manually adding both systems to the same group's update list.
StartGameRPCSystem OnCreate
No mods have registered for ObjectCreated or ObjectDestroyed callbacks. Disabling ObjectCreatedSystem.
ECSManager: removing worlds from the update loop.
ECSManager: converting authoring data.
ECSManager: converting authoring data for the server world.
Found 319 converter(s)
Added post converter DropLootPostConverter
Added post converter DealDamagePostConverter
Added post converter RotationPostConverter
Added post converter BoatRidingColliderVariationPostConverter
Added post converter ReceivePushbackPostConverter
Added post converter ModPostConverter
Added post converter PugConversion.GhostPostConverter
Added post converter DisablePhysicsRestoreConverter
PugDatabase initialized 2357 prefabs
ECSManager: converting authoring data for the server world complete.
ECSManager: adding worlds to the update loop.
ECSManager: initializing worlds.
Simulation tick rate=20 Network tick rate=20
disable default variant system group for world ServerWorld
disable CompanionGameObjectUpdateTransformSystem for world ServerWorld
disable ParentSystem for world ServerWorld
Listening on ip:0.0.0.0:25002
ConvertAuthoringDataRoutine complete. Process was successful.
number prefabs 2342
timescale = 0
Started session with Game ID 4qmqCFume7AgZqPb28pDw69jrzMu

at this point read this like a narrative...

valheim had a similar issue
https://www.reddit.com/r/valheim/comments/y0bg3y/problem_with_starting_my_dedicated_server_after/

I believe the issue is that cross play is broken on linux. after removing (renaming) libparty.so from the /home/container/corekeeperserver_data/plugins folder, the game progresses further into booting. ill continue to investigate

@Osanchez
Copy link
Author

Osanchez commented Sep 5, 2024

issue on linux resolved by removing libparty.so in install script.

rm /mnt/server/CoreKeeperServer_Data/Plugins/libparty.so

This library seems to be broken when running in the docker environment as container user.

@HerrSammyDE
Copy link
Contributor

issue on linux resolved by removing libparty.so in install script.

rm /mnt/server/CoreKeeperServer_Data/Plugins/libparty.so

This library seems to be broken when running in the docker environment as container user.

Thank you, that worked!

@hackles
Copy link

hackles commented Sep 5, 2024

Bro I'm so curious to know how you figured that out because I spent several hours over the course of two days trying to debug this before giving up. 😂

@Osanchez
Copy link
Author

Osanchez commented Sep 5, 2024

Bro I'm so curious to know how you figured that out because I spent several hours over the course of two days trying to debug this before giving up. 😂

I'm him.

no, but it was just stepping through everything and seeing where the crash was occurring. if it werent for the wine install working I probably would have never had a clean log to compare. the problem with that seg fault is that the game is partially compiled using burst compiler. the stack trace is pretty much not helpful. I spun up a local docker instance using a modified version of the yolk so I could have root access and followed the install procedure. noticed that booting the game as root worked. looking at each logs the failure occurs right when the libparty.so plugin is loading.

its a solution, but what I think is the next step, if we want to enable cross play. is to figure out what libparty is trying to access that the container user cannot. you can see in stack trace it is trying to load some config.

@hackles
Copy link

hackles commented Sep 8, 2024

Yeah, I was trying to figure out what configuration file it's trying to open because the segfault stack trace has BumblelionLogger::TryToLoadConfigurationFile() as the final method being called before it crashes. But I had no idea where to go from there.

@RixMixed
Copy link

RixMixed commented Sep 9, 2024

Is crossplay not working on dedicated's in general? I tried the wine version from @Osanchez but got the same 'crossplay is not enabled' error as on linux.

@Osanchez
Copy link
Author

Osanchez commented Sep 9, 2024

Is crossplay not working on dedicated's in general? I tried the wine version from @Osanchez but got the same 'crossplay is not enabled' error as on linux.

Yes, there are issues with cross play for dedicated servers. the Microsoft package used for cross play for whatever reason is not initializing correctly. I have not had a chance to look into this yet. I have tried newer versions of this plugin, but it fails to load. I am suspecting permission errors somewhere on the container. I believe if you run a dedicated server using root the plugin should load and cross play would be functional, but we typically don’t run containers with root user. We use a less elevated container user

@Osanchez
Copy link
Author

Osanchez commented Sep 9, 2024

so the configuration file attempting to be read is in fact the PlayFabPartyLogger.json listed on the official github
https://github.com/PlayFab/PlayFabParty.

instruction for linux installations is

Create a folder "/home/container/PlayFabParty/"

within this folder create file PlayFabPartyLogger.json with the following contents

{
    "enabled": true, 
    "bufferSize": 16384,
    "maxNumberOfItemsInBatch": 100,
    "maxBatchWaitTimeInSeconds": 1,
    "readBufferWaitTimeInMilliseconds": 1,
    "logFolder": "/home/container/PlayFabParty/log/",
    "logLevel": "VERBOSE",
    "xrnLogEnabled": false,
    "consoleEnabled": false,
    "maxLogFileSizeInMegabytes": 1024
}

create a log directory /home/container/PlayFabParty/log

I have tried these instructions and am still having the plugin fail to load with seg fault.

trying to do some reverse on the libparty.so I see that it is calling a command to get the current users UID, calling another function to get the home directory using this UID. and then appending a string to it to complete the directory it is trying to access. I am assuming it is the path listed in the instructions above. I am going to look into the commands being called to get UID and Home directory which is where I suspect missing commands or permission errors will arise.

update:

created and compiled a c++ file that I could throw on the docker container to test my theory. it is called as part of the startup script.

#include <unistd.h>
#include <pwd.h>
#include <stdio.h>

int main() {
    // Get the user ID of the current process
    uid_t uid = getuid();

    // Get the password structure (which contains user information) for the UID
    struct passwd *pwd = getpwuid(uid);

    // Check if getpwuid() returned NULL
    if (pwd) {
        // Print the username and home directory
        printf("Username: %s\n", pwd->pw_name);
        printf("Home directory: %s\n", pwd->pw_dir);
    } else {
        printf("User information not found\n");
    }

    return 0;
}

result:
User information not found

good ole chatGPT guided me towards looking at how these commands work. they depend on access to /etc/passwd. i'm not an expert on the docker images used to run these servers. Does this sound familiar @hackles

pterodactyl/wings#172

Edit:
What I am being told is that this is in an unreleased version of wings. I am going to build and test it out myself, but its possible this issue will be resolved with the next release of wings which auto mounts /etc/passwd

…sion of wings not mounting password file and need from play prefab plugin aka crossplay plugin
@Osanchez
Copy link
Author

Osanchez commented Sep 9, 2024

So I have a fix thanks to @danny6167 . I created a custom docker image which utilizes nss_wrapper. with the new docker image, the PlayFabParty plugin is now loading. I can update the pelican yolk repo to contain this Dockerfile.

pelican-eggs/yolks#264

@RixMixed
Copy link

pelican-eggs/yolks#264

This appears to have done the trick, thanks to you and danny. I was, however, still having issues connecting from the windows client but I don't know if it's the server's fault because directly connecting to a steam player was also not working yesterday like it had been in the past. Browsing the discord and other socials for this game it seems a lot of people are having issues with crossplay in general right now unfortunately.

@Osanchez
Copy link
Author

Osanchez commented Sep 10, 2024

@RixMixed what do you mean by windows user. Xbox platform? Something else ? I don’t know if the config is actually used as I have not seen logs generated by playfabparty. Maybe it reads it but is overridden by the game, but one thing to try would be to modify the play can party config and enable the console option. This I believe allows for connection using Microsoft Xbox service. The egg I provided should auto create this config file.

@RixMixed
Copy link

@Osanchez Sorry, it's the Microsoft Games Store version (through Xbox Gamepass for PC). Tried enabling the console option in the config you mentioned but still no dice.

@Osanchez
Copy link
Author

Osanchez commented Sep 11, 2024

@RixMixed I have been looking at the game code and testing some things with the xbox gamepass version. for those who dont know, there is a server config file that is created when you first launch your server located at .config/unity3d/Pugstorm/Core Keeper/DedicatedServer/ServerConfig.json. This config location can be changed by supplying -serverconfig along side the path to this file eg. ./serverConfig.json

its contents look like this, with the exception that your server will have filled some of these fields.

{
   "gameId": "",
   "world": 0,
   "worldName": "Core Keeper",
   "worldSeed": 0,
   "maxNumberPlayers": 100,
   "maxNumberPacketsSentPerFrame": 1,
   "networkSendRate": 30,
   "worldMode": 0,
   "seasonOverride": -1
}

There is a value that can be provided to this config to enable cross play, though I have seen that this should be the default value.
"crossPlay:" true

I do not actually see any attempts to connect made from the xbox game client and there is no way the server is responding that quickly to the client. Like others have mentioned I suspect it is broken or not implemented. If you start a game on xbox that is cross platform the ID is in a different format and much shorter. ill put money that the xbox client rejects connections to the dedicated linux server instantly because it recognizes a different world ID format.

cross play was either disabled or never implemented. Im still new, I imagine youll find your answers on their official discord. if still having issues set the crossplay value to false. with that said, I think this egg is in ready state unless you think otherwise

@Osanchez
Copy link
Author

@hackles I don't have any more open requests. this should be in ready state if you are a reviewer

@bippity
Copy link

bippity commented Sep 12, 2024

After a fresh install w/ the updated egg, the server is able to run and output a game ID.
However, clients are unable to connect to the server, receiving a "Connection Timed Out" message after waiting a moment.

It wasn't until I replaced the entire startup command with just ./_launch.sh that players were able to connect.

** I see that you responded to my comment in the other PR #62

@bippity the startup command in this egg is derived from the _launch.sh and it is advised that we do not call scripts in the launch file.

If the default startup command is derived from the _launch.sh script, what could be preventing the clients from connecting?

@Osanchez
Copy link
Author

@bippity I cant say for sure as I do not know enough about your environment. the _launch.sh file is not parametrized so it is default to localhost and probably the default gameport (or the next available open gameport) or maybe just steam networking directly. To me it sounds like a misconfiguration on your panel. what do you have allocated on your server and what port does your game end up using the with default _launch script.

@bippity
Copy link

bippity commented Sep 12, 2024

What do you have allocated on your server and what port does your game end up using the with default _launch script.

I have ports 27015 and 27016 allocated.
The default _launch.sh script doesn't seem to define a port; I noticed from the README.txt, it defaults to the Steam relay network.
If not set, then the server will use the Steam relay network. If set the clients will connect to the server directly and the port needs to be open. Use -port 27015 to connect to a server on the same LAN.

If I remove the -port argument in the startup command, clients are able to connect...

I'm not seeing anyone else discussing this issue, so I don't believe it's related to the egg changes.

@Osanchez
Copy link
Author

@bippity I would review your firewall settings on your server or see if your host is blocking the connection. I am getting different results. others have tried this egg with no issue. You have it working so I dont know if you want to put the effort, but I just know that running scripts from eggs is not an option.

@hackles
Copy link

hackles commented Sep 12, 2024

@hackles I don't have any more open requests. this should be in ready state if you are a reviewer

Oh, sorry, I'm not a maintainer in this repo or anything like that. I'm just some random guy who also wanted to set up a Core Keeper server and came across this PR.

I believe @QuintenQVD0 is primarily who reviews and merges most PRs around here.

@QuintenQVD0
Copy link
Contributor

@hackles I don't have any more open requests. this should be in ready state if you are a reviewer

Oh, sorry, I'm not a maintainer in this repo or anything like that. I'm just some random guy who also wanted to set up a Core Keeper server and came across this PR.

I believe @QuintenQVD0 is primarily who reviews and merges most PRs around here.

I am indeed and this can not be merged as it does not use an image that we controle.
@Osanchez I have seen your PR, I assume that is the same image?
I will merge that as many people have this issues so it seems. And removing / adding a message if pterodactyl wings fix is live if that is oké for you ofc

@QuintenQVD0
Copy link
Contributor

for everyone, already a huge thank you for helping and making this PR, this makes my live a bit easyer! ❤

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.

7 participants