KSP-CKAN / CKAN

The Comprehensive Kerbal Archive Network
https://forum.kerbalspaceprogram.com/index.php?/topic/197082-*
Other
1.97k stars 347 forks source link

[Bug]: Missing dependency libgdiplus0 #4199

Closed UristMcEngineer closed 1 week ago

UristMcEngineer commented 1 week ago

Is there an existing issue for this?

Operating System

openSUSE Tumbleweed

CKAN Version

1.35.0

Games

KSP 1

Game Version

Not relevant

Did you make any manual changes to your game folder (i.e., not via CKAN)?

No response

Describe the bug

After successfully installing ckan through the rpm-repository, at startup the exception System.DllNotFoundException: libgdiplus.so.0 is thrown. Installing the package libgdiplus0 from the Tumbleweed OSS repository fixes the error. Adding libgdiplus0 as a dependecy for the ckan-package seems neccessary.

Steps to reproduce

Relevant log output

[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Windows.Forms.XplatUI' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Drawing.GDIPlus' threw an exception. ---> System.DllNotFoundException: libgdiplus.so.0 assembly:<unknown assembly> type:<unknown type> member:(null)
  at (wrapper managed-to-native) System.Drawing.GDIPlus.GdiplusStartup(ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&)
  at System.Drawing.GDIPlus..cctor () [0x000b0] in <f53901eff2cb48d5b78faf585ca58078>:0 
   --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Object.__icall_wrapper_mono_generic_class_init(intptr)
  at System.Drawing.Graphics.FromHdcInternal (System.IntPtr hdc) [0x00000] in <f53901eff2cb48d5b78faf585ca58078>:0 
  at System.Windows.Forms.XplatUIX11.SetDisplay (System.IntPtr display_handle) [0x00073] in <f6663a5f065d4ea09e257119004995d3>:0 
  at System.Windows.Forms.XplatUIX11..ctor () [0x00077] in <f6663a5f065d4ea09e257119004995d3>:0 
  at System.Windows.Forms.XplatUIX11.GetInstance () [0x00019] in <f6663a5f065d4ea09e257119004995d3>:0 
  at System.Windows.Forms.XplatUI..cctor () [0x000c0] in <f6663a5f065d4ea09e257119004995d3>:0 
   --- End of inner exception stack trace ---
  at System.Windows.Forms.Application.EnableVisualStyles () [0x00006] in <f6663a5f065d4ea09e257119004995d3>:0 
  at CKAN.GUI.GUI.Main_ (System.String[] args, System.String userAgent, CKAN.GameInstanceManager manager, System.Boolean showConsole) [0x0001b] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0 
  at CKAN.CmdLine.MainClass.Gui (CKAN.GameInstanceManager manager, CKAN.CmdLine.GuiOptions options, System.String[] args) [0x0003e] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0 
  at CKAN.CmdLine.MainClass.RunSimpleAction (CKAN.CmdLine.Options cmdline, CKAN.CmdLine.CommonOptions options, System.String[] args, CKAN.IUser user, CKAN.GameInstanceManager manager) [0x00296] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0 
  at CKAN.CmdLine.MainClass.Execute (CKAN.GameInstanceManager manager, CKAN.CmdLine.CommonOptions opts, System.String[] args) [0x002b9] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0 
  at CKAN.CmdLine.MainClass.Main (System.String[] args) [0x000e9] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0 
HebaruSan commented 1 week ago

Probably need to update the RPM spec file:

https://github.com/KSP-CKAN/CKAN/blob/7568b2eb119ae8d929040add2bb5934d51a6068a/rpm/ckan.spec#L9

@UristMcEngineer, since I assume you believe Losing is Fun™️, would you be able to test the RPM in a completely fresh OS to see if there are any other missing dependencies? We might as well try to hit the full list while we're looking at this.

UristMcEngineer commented 1 week ago

I could spin up a virtual machine tomorrow and test it.

UristMcEngineer commented 1 week ago

libgdiplus0 is in the recommended packages of mono-core but not the required ones. This means that on a fresh openSUSE Tumbleweed install libgidplus0 is automatically installed. Only if you disable installing recommended packages like I did (and I believe this to be quite a common configuration) is it not installed. In my mind this still makes libgdiplus0 a requirement of ckan because it cannot start without it, but this additional information might be helpful to you.

I am struggling to get ckan to run in the virtual machine. After a fresh install of openSUSE Tumbleweed with the KDE Plasma Desktop environment, I installed ckan and libgdiplus0. The following error message is thrown when I try to start ckan:

KDE colorscheme read failure, using built-in colorscheme  
\[ERROR\] FATAL UNHANDLED EXCEPTION: System.ArgumentException: A null reference or invalid value was found \[GDI+ status: InvalidParameter\]  
 at System.Drawing.GDIPlus.CheckStatus (System.Drawing.Status status) \[0x00098\] in <f53901eff2cb48d5b78faf585ca58078>:0    
 at System.Drawing.Bitmap..ctor ([System.Int](http://system.int/)32 width, [System.Int](http://system.int/)32 height, System.Drawing.Imaging.PixelFormat format) \[0x00016\] in <f53901eff2cb48d5b78faf585ca58078>:0    
 at System.Drawing.Bitmap..ctor (System.Drawing.Image original, [System.Int](http://system.int/)32 width, [System.Int](http://system.int/)32 height) \[0x00000\] in <f53901eff2cb48d5b78faf585ca58078>:0    
 at System.Drawing.Bitmap..ctor (System.Drawing.Image original, System.Drawing.Size newSize) \[0x00010\] in <f53901eff2cb48d5b78faf585ca58078>:0    
 at (wrapper remoting-invoke-with-check) System.Drawing.Bitmap..ctor(System.Drawing.Image,System.Drawing.Size)  
 at [System.Windows](http://system.windows/).Forms.XplatUIX11.DefineCursor (System.Drawing.Bitmap bitmap, System.Drawing.Bitmap mask, System.Drawing.Color cursor_pixel, System.Drawing.Color mask_pixel, [System.Int](http://system.int/)32 xHotSpot, [System.Int](http://system.int/)32 yHotSpot) \[0x00045\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.XplatUI.DefineCursor (System.Drawing.Bitmap bitmap, System.Drawing.Bitmap mask, System.Drawing.Color cursor_pixel, System.Drawing.Color mask_pixel, [System.Int](http://system.int/)32 xHotSpot, [System.Int](http://system.int/)32 yHotSpot) \[0x00000\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.Cursor.CreateCursor ([System.IO.Stream](http://system.io.stream/) stream) \[0x00058\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.Cursor..ctor (System.Type type, System.String resource) \[0x0001e\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.Cursors.get_SizeNWSE () \[0x00014\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.SizeGrip..ctor ([System.Windows](http://system.windows/).Forms.Control CapturedControl) \[0x00006\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at (wrapper remoting-invoke-with-check) [System.Windows](http://system.windows/).Forms.SizeGrip..ctor([System.Windows](http://system.windows/).Forms.Control)  
 at [System.Windows](http://system.windows/).Forms.ScrollableControl.CreateScrollbars () \[0x000c2\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.ScrollableControl..ctor () \[0x000b0\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.ContainerControl..ctor () \[0x0000e\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at [System.Windows](http://system.windows/).Forms.Form..ctor () \[0x00012\] in <f6663a5f065d4ea09e257119004995d3>:0    
 at CKAN.GUI.Main..ctor (System.String\[\] cmdlineArgs, CKAN.GameInstanceManager mgr, System.String userAgent) \[0x0000b\] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0    
 at (wrapper remoting-invoke-with-check) CKAN.GUI.Main..ctor(string\[\],CKAN.GameInstanceManager,string)  
 at CKAN.GUI.GUI.Main\_ (System.String\[\] args, System.String userAgent, CKAN.GameInstanceManager manager, System.Boolean showConsole) \[0x0003b\] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0    
 at CKAN.CmdLine.MainClass.Gui (CKAN.GameInstanceManager manager, CKAN.CmdLine.GuiOptions options, System.String\[\] args) \[0x0003e\] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0    
 at CKAN.CmdLine.MainClass.RunSimpleAction (CKAN.CmdLine.Options cmdline, CKAN.CmdLine.CommonOptions options, System.String\[\] args, CKAN.IUser user, CKAN.GameInstanceManager manager) \[0x00296\] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0    
 at CKAN.CmdLine.MainClass.Execute (CKAN.GameInstanceManager manager, CKAN.CmdLine.CommonOptions opts, System.String\[\] args) \[0x002b9\] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0    
 at CKAN.CmdLine.MainClass.Main (System.String\[\] args) \[0x000e9\] in <e7a11ea66e094dd1a3ac6d97032c8cd9>:0

Maybe this means something to you. I have barely worked with windows forms before and cannot find a fix to this online. Some mentions of this error online talk about images with size 0. Maybe the bitmap for the cursor can't be found or accessed and the fallback is an image of size 0.

UristMcEngineer commented 1 week ago

Maybe it doesn't even matter. When this code is executed all dynamic libraries should be loaded, right? So at least when it comes to dynamic libraries there seem to be no further undeclared dependencies (other than possibly those allready present on a fresh install).

HebaruSan commented 1 week ago

Looks like the package is called simply libgdiplus on Fedora, without the 0. If we added a dependency on that, would openSUSE be able to figure it out?

https://packages.fedoraproject.org/search?query=libgdiplus https://packages.fedoraproject.org/search?query=libgdiplus0

UristMcEngineer commented 1 week ago

Looking at the build-spec for mono-core which recommends libgdiplus, it is specified as Recommends: libgdiplus0. Sadly I have no experience with building rpm-packages, but I would assume that this means that the requirement isn't compatible between Fedora and openSUSE. Is this what people mean, when they talk about how annoying it is to provide software for linux? ^^

HebaruSan commented 1 week ago

Nah, it's fine—a problem that we can't solve, isn't our problem to solve!