Recommendation for a Linux distro for building Oolite

For discussion of ports to POSIX based systems, especially using GNUStep.

Moderators: another_commander, winston, Getafix

User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Recommendation for a Linux distro for building Oolite

Post by phkb »

Full disclosure: I am not a Linux user most of the time, and don’t really want to be an expert. But I do want to be able to test building Oolite on Linux. I’ve been trying with Mint in VirtualBox, but haven’t had much success. So, is there a distro recommendation that will, in the fewest possible steps, get me to “make” heaven without too much “sudo” mayhem?
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6552
Joined: Wed Feb 28, 2007 7:54 am

Re: Recommendation for a Linux distro for building Oolite

Post by another_commander »

Have you considered the Windows Linux Subsystem?

https://docs.microsoft.com/en-us/window ... tall-win10

Edit to add: I believe the build system used for Linux releases and nightlies is Ubuntu-based, but I may be remembering something wrong.
User avatar
hiran
Theorethicist
Posts: 2055
Joined: Fri Mar 26, 2021 1:39 pm
Location: a parallel world I created for myself. Some call it a singularity...

Re: Recommendation for a Linux distro for building Oolite

Post by hiran »

another_commander wrote: Mon Sep 06, 2021 1:04 pm
Have you considered the Windows Linux Subsystem?

https://docs.microsoft.com/en-us/window ... tall-win10

Edit to add: I believe the build system used for Linux releases and nightlies is Ubuntu-based, but I may be remembering something wrong.
It is Ubuntu based. I have however not yet seen graphical clients.

How do the official and nightly builds get compiled? https://github.com/OoliteProject/nightlies
Sunshine - Moonlight - Good Times - Oolite
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6552
Joined: Wed Feb 28, 2007 7:54 am

Re: Recommendation for a Linux distro for building Oolite

Post by another_commander »

hiran wrote: Mon Sep 06, 2021 2:41 pm
How do the official and nightly builds get compiled? https://github.com/OoliteProject/nightlies
The official builds are done manually when it is time to release. It is actually a quite complicated process that takes anything from 4 to 8 hours for all platforrms, including virus check reports, getting the announcements up and getting the website updated for the upcoming release. Sometimes we can't finish everything in one go, so it may take more than one day to be ready.

The nightly builds are a different story. They involve external servers that run scripts checking for new commits on github and firing up sequential builds for Windows and Linux locally, plus a Mac build that is done remotely on another (Mac-powered) server, then collecting and uploading the results to the github nightlies repository. In the past this was done fully automatically, but I think that nowadays the build server has to be started up manually in order to execute the build scripts. Getafix may have more on this if he passes by one of these days and wishes to comment - it was his server and his scripts doing all the hard work.
User avatar
hiran
Theorethicist
Posts: 2055
Joined: Fri Mar 26, 2021 1:39 pm
Location: a parallel world I created for myself. Some call it a singularity...

Re: Recommendation for a Linux distro for building Oolite

Post by hiran »

another_commander wrote: Mon Sep 06, 2021 5:23 pm
hiran wrote: Mon Sep 06, 2021 2:41 pm
How do the official and nightly builds get compiled? https://github.com/OoliteProject/nightlies
The official builds are done manually when it is time to release. It is actually a quite complicated process that takes anything from 4 to 8 hours for all platforrms, including virus check reports, getting the announcements up and getting the website updated for the upcoming release. Sometimes we can't finish everything in one go, so it may take more than one day to be ready.

The nightly builds are a different story. They involve external servers that run scripts checking for new commits on github and firing up sequential builds for Windows and Linux locally, plus a Mac build that is done remotely on another (Mac-powered) server, then collecting and uploading the results to the github nightlies repository. In the past this was done fully automatically, but I think that nowadays the build server has to be started up manually in order to execute the build scripts. Getafix may have more on this if he passes by one of these days and wishes to comment - it was his server and his scripts doing all the hard work.
This sounds not only that Oolite relies on a private machine to execute the builds, the scripts to build are all stored locally on that server and not available in any github project?
Sunshine - Moonlight - Good Times - Oolite
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 664
Joined: Sat Aug 09, 2014 4:16 pm

Re: Recommendation for a Linux distro for building Oolite

Post by Commander_X »

phkb wrote: Mon Sep 06, 2021 9:19 am
[...] get me to “make” heaven without too much “sudo” mayhem?
You'd only need "sudo" if you wanted to "install" your built system-wide. Otherwise, for your local user build, sudo should not be needed.

About distributions (already advertised on other threads, Slackware Linux user here) I'd guess most of the them have a pre-defined "workstation" or "development" layout for the installable packages out of the bat, such that you can get to that "make" heaven. E.g., in Slackware's case, that usually means you want to install the "d" (for "d"evelopment) series of packages and "l" (for "l"ibraries). In many of the other distributions, the libraries have a "-dev" version that needs to be installed alongside with their runtime only counterparts, if you wanted to run "make" and be able to conveniently link them against your sources.

Regardless of the distribution, you might need to do some tuneup on your Oolite build environment, in order to properly link and use for compilation the included dependencies. This is because the "official/recommended" build system relies on specific version of some of the system dependent packages to be installed, and that layout could had "shifted" due to evolving distribution/package version.
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

I gave Slackware a spin, but it's minimalist nature was kind of offputting. So I revisited my Mint 20 install. Brand new VM, updated and patched.

Opened a terminal window and began running commands.

Code: Select all

sudo apt install git
git clone https://github.com/OoliteProject/oolite.git
cd oolite
git submodule update --init
sudo apt install libgnustep-base-dev
sudo apt install libsdl1.2-dev
sudo apt install libvorbis-dev
sudo apt install libopenal-dev
sudo apt install libespeak-dev
export GNUSTEP_MAKEFILES=/usr/lib/GNUstep/Makefiles
I was running the make process after each apt install in the list above to see that I was reducing the errors each time.

At this point, a build attempt looks like this:

Code: Select all

nick@Mint20:~/oolite$ make -f Makefile release
make -f GNUmakefile debug=no strip=yes
make[1]: Entering directory '/home/nick/oolite'
This is gnustep-make 2.7.0. Type 'make print-gnustep-make-help' for help.
Running in gnustep-make version 2 strict mode.
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
Making all for objc_program oolite...
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
 Linking objc_program oolite ...
/bin/sh: 1: nspr-config: not found
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make[4]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:79: obj.spk/oolite] Error 1
make[3]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:64: internal-objc_program-all_] Error 2
make[2]: *** [/usr/share/GNUstep/Makefiles/Master/rules.make:297: oolite.all.objc-program.variables] Error 2
make[1]: *** [/usr/share/GNUstep/Makefiles/Master/objc.make:36: internal-all] Error 2
make[1]: Leaving directory '/home/nick/oolite'
make: *** [Makefile:115: release] Error 2
So, some sort of issue with "lstdc++".
What I have tried to fix this (unsuccessfully)

Code: Select all

sudo apt install g++mingw-w64-i686
sudo apt install g++mingw-w64
sudo apt install libstdc++-7-dev
sudo apt install libstdc++-10-dev
I also got "apt-file" and tried searching for appropriate packages to install - but sudo apt-file search libstdc++ returns 32000+ entries, which makes it hard to narrow down.

Edit to add:
Just to confirm what libstdc++ versions I have installed:

Code: Select all

nick@Mint20:~/oolite$ sudo apt list --installed libstdc++*
Listing... Done
libstdc++-10-dev/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
libstdc++-7-dev/focal,now 7.5.0-6ubuntu2 amd64 [installed]
libstdc++6/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
Any suggestions welcome!
Commander_X
---- E L I T E ----
---- E L I T E ----
Posts: 664
Joined: Sat Aug 09, 2014 4:16 pm

Re: Recommendation for a Linux distro for building Oolite

Post by Commander_X »

phkb wrote: Tue Sep 07, 2021 3:26 am
I gave Slackware a spin, but it's minimalist nature was kind of offputting. [...]
While "offputting" sounds ok, "minimalist" might be a bit ... stretched :mrgreen:
phkb wrote: Tue Sep 07, 2021 3:26 am
[...]
Linking objc_program oolite ...
/bin/sh: 1: nspr-config: not found
/usr/bin/ld: cannot find -lstdc++
[...]
So, some sort of issue with "lstdc++".
What I have tried to fix this (unsuccessfully)

Code: Select all

sudo apt install g++mingw-w64-i686
sudo apt install g++mingw-w64
sudo apt install libstdc++-7-dev
sudo apt install libstdc++-10-dev
[...]
libstdc++-10-dev/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
libstdc++-7-dev/focal,now 7.5.0-6ubuntu2 amd64 [installed]
libstdc++6/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
Any suggestions welcome!
You have some sort of issue with libstdc++ _and_ with nspr (-dev) libraries, it seems (for the latter you might want to pass use_deps=yes while running make).

I am not sure why would you install mingw c++ compiler (I guess because it came up due to ++ ?) -- unless you want to compile exes/dlls for windows under Linux.

From the last listing, it seems you successfully installed "-dev" versions 7 and 10 for your libstdc++ (and also have a version 6 runtime only available -- I'd suspect a dependency), and it seems they are not enough. A good way to check what version of "-dev" libstdc++ you need installed, is to check your c++ compiler version ("g++ --version").

I really have no clue what are the versioning principles for Debian based distros, but from your listing I'd suspect that versions 10 and 6 of your libstdc++ are for g++ version 10.3.0 and version 7 is for g++ version 7.5.0. The bottom line is that you'd have to install the version that creates the /usr/lib64/libstdc++.so file for your compiler (usually symbolic link).

Hope this helps.
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

Commander_X wrote: Tue Sep 07, 2021 6:58 am
I am not sure why would you install mingw c++ compiler
Neither am I! I was just trying as many possibilities as I could to try and get things to compile. I've removed them now, anyway.
Commander_X wrote: Tue Sep 07, 2021 6:58 am
check your c++ compiler version
g++ --version revealed I didn't have a g++ compiler installed. sudo apt install g++ sorted that out and I've moved on...

To this:

Code: Select all

 Linking objc_program oolite ...
/bin/sh: 1: nspr-config: not found
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_SetContextThread':
jsapi.cpp:(.text+0x93e): undefined reference to `PR_Unlock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_DropPrincipals':
jsapi.cpp:(.text+0x122e): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `StartRequest(JSContext*)':
jsapi.cpp:(.text+0x18dd): undefined reference to `PR_Lock'
/usr/bin/ld: jsapi.cpp:(.text+0x1903): undefined reference to `PR_WaitCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x1959): undefined reference to `PR_AtomicIncrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `StopRequest(JSContext*)':
jsapi.cpp:(.text+0x1a2a): undefined reference to `PR_Lock'
/usr/bin/ld: jsapi.cpp:(.text+0x1a7f): undefined reference to `PR_NotifyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x1a9e): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_TriggerAllOperationCallbacks':
jsapi.cpp:(.text+0x40ac): undefined reference to `PR_Lock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_TriggerOperationCallback':
jsapi.cpp:(.text+0x431e): undefined reference to `PR_Lock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_ClearContextThread':
jsapi.cpp:(.text+0x4386): undefined reference to `PR_Lock'
/usr/bin/ld: jsapi.cpp:(.text+0x43a7): undefined reference to `PR_Unlock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JSRuntime::~JSRuntime()':
jsapi.cpp:(.text+0x44fe): undefined reference to `PR_DestroyLock'
/usr/bin/ld: jsapi.cpp:(.text+0x450f): undefined reference to `PR_DestroyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x4520): undefined reference to `PR_DestroyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x4531): undefined reference to `PR_DestroyLock'
/usr/bin/ld: jsapi.cpp:(.text+0x4542): undefined reference to `PR_DestroyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x4553): undefined reference to `PR_DestroyLock'

...and more like the above...

/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsscript.o): in function `js_CallNewScriptHook(JSContext*, JSScript*, JSFunction*)':
jsscript.cpp:(.text+0x43a): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexJIT.o): in function `JSC::Yarr::jitCompileRegex(JSC::ExecutableAllocator&, JSC::Yarr::RegexCodeBlock&, JSLinearString const&, unsigned int&, int&, bool&, bool, bool)':
RegexJIT.cpp:(.text+0x5e5): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: RegexJIT.cpp:(.text+0x8c5): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexCompiler.o): in function `JSC::Yarr::spacesCreate()':
RegexCompiler.cpp:(.text+0x984): undefined reference to `PR_AtomicIncrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexCompiler.o): in function `JSC::Yarr::compileRegex(JSLinearString const&, JSC::Yarr::RegexPattern&)':
RegexCompiler.cpp:(.text+0x19c2): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexCompiler.o): in function `JSC::Yarr::CharacterClass::CharacterClass(JSC::Yarr::CharacterClassTable*)':
RegexCompiler.cpp:(.text._ZN3JSC4Yarr14CharacterClassC1EPNS0_19CharacterClassTableE[_ZN3JSC4Yarr14CharacterClassC1EPNS0_19CharacterClassTableE]+0x70): undefined reference to `PR_AtomicIncrement'
collect2: error: ld returned 1 exit status
make[4]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:79: obj.spk/oolite] Error 1
make[3]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:64: internal-objc_program-all_] Error 2
make[2]: *** [/usr/share/GNUstep/Makefiles/Master/rules.make:297: oolite.all.objc-program.variables] Error 2
make[1]: *** [/usr/share/GNUstep/Makefiles/Master/objc.make:36: internal-all] Error 2
make[1]: Leaving directory '/home/nick/oolite'
make: *** [Makefile:115: release] Error 2
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

And after running one more install

Code: Select all

sudo apt install libnspr4-dev
I got this:

Code: Select all

nick@Mint20:~/oolite$ make -f Makefile release
make -f GNUmakefile debug=no strip=yes
make[1]: Entering directory '/home/nick/oolite'
This is gnustep-make 2.7.0. Type 'make print-gnustep-make-help' for help.
Running in gnustep-make version 2 strict mode.
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
Making all for objc_program oolite...
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
 Linking objc_program oolite ...
/usr/share/GNUstep/Makefiles/mkinstalldirs oolite.app
/usr/share/GNUstep/Makefiles/mkinstalldirs oolite.app/Resources
tools/mkmanifest.sh > oolite.app/Resources/manifest.plist
cp -rf -u Resources/README.TXT oolite.app/Resources
cp -rf -u Resources/InfoPlist.strings oolite.app/Resources
cp -rf -u Resources/AIs oolite.app/Resources
cp -rf -u Resources/Config oolite.app/Resources
cp -rf -u Resources/Scenarios oolite.app/Resources
cp -rf -u Resources/Scripts oolite.app/Resources
cp -rf -u Resources/Shaders oolite.app/Resources
cp -rf -u Resources/Binary/Images oolite.app/Resources
cp -rf -u Resources/Binary/Models oolite.app/Resources
cp -rf -u Resources/Binary/Music oolite.app/Resources
cp -rf -u Resources/Binary/Sounds oolite.app/Resources
cp -rf -u Resources/Binary/Textures oolite.app/Resources
cp -rf -u Schemata oolite.app/Resources
cp -rf -u src/Cocoa/Info-Oolite.plist oolite.app/Resources/Info-gnustep.plist
cp -rf -u obj.spk/oolite oolite.app/oolite
strip oolite.app/oolite
make[1]: Leaving directory '/home/nick/oolite'
mkdir -p AddOns && rm -rf AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp AddOns/Basic-debug.oxp
Very close now, I think!
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

Running the app gives me this:
Image
I seem to recall seeing someone else with this issue somewhere. I'll try and find the thread and post back.

Edit: I think this thread is the one, although my attempt to implement the solution hasn't worked yet. Still playing though.
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

Well, that thread is the same one, as I'm getting the same error in the log file:
18:07:02.527 [texture.load.png.warning]: ----- A PNG loading warning occurred for (null): Application built with libpng-1.4.7 but running with 1.6.37.
However, the solution in that thread didn't work for me.
Commander_X wrote: Fri Apr 09, 2021 7:04 pm
Fixing the PNG loading issue is mainly related with starting up Oolite.
Here are the main steps (for a terminal window):
1. create a "deps" folder in the same folder where your oolite executable is
2. copy libpng14.so.* from "<oolite_source_root_folder>/deps/Linux-deps/x86_64/lib" to this folder
3. make sure you are in the oolite executable file's folder, and run:

Code: Select all

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:deps ./oolite
This should let the runtime linker know of the "deps" folder as a source for dynamic libraries, and load the PNG library Oolite was compiled with and expects.
Same errors in the log after doing this. Did I miss a step?
Last edited by phkb on Tue Sep 07, 2021 9:02 am, edited 1 time in total.
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

Solved!
Image

And this seemed to be the trick that made it work:
vaxon wrote: Tue Oct 13, 2020 1:51 am
Eventually resolved the problem by removing png headers from deps:

Code: Select all

rm deps/Linux-deps/include/png*
Doing that, and rebuilding, got it working! No idea why, though. But I'm just going to plough on regardless.
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4643
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Recommendation for a Linux distro for building Oolite

Post by phkb »

OK, one last error being reported, although I think it's fairly minor:
18:21:19.440 [texture.load.png.warning]: ----- A PNG loading warning occurred for /home/nick/oolite/oolite.app/Resources/Textures/trumblekit.png: iCCP: profile 'ICC Profile': 'RGB ': RGB color space not permitted on grayscale PNG.
Again, I seem to recall that was reported once before. I'll try to track the thread down.

Edit: It was this thread, although cim seems to indicate it was a bug which was fixed in 1.81. So, not sure on this one. Anyway, i've got my Linux build now, so ultimately I'm really happy. Thanks Commander_X, for your help with this.
User avatar
Cody
Sharp Shooter Spam Assassin
Sharp Shooter Spam Assassin
Posts: 16059
Joined: Sat Jul 04, 2009 9:31 pm
Location: The Lizard's Claw
Contact:

Re: Recommendation for a Linux distro for building Oolite

Post by Cody »

<applauds>
I would advise stilts for the quagmires, and camels for the snowy hills
And any survivors, their debts I will certainly pay. There's always a way!
Post Reply