Can't compile Domain Server on CentOS 6.5 (64bit)


#1

Unable to compile the current git version of the domain server, explicitly following directions on this doc page, I get a build error at
Building CXX object libraries/shared/CMakeFiles/shared.dir/src/SettingInterface.cpp.o
(see full output here)


#2

I have moved everything over to 7.0 since its updated and 6.5 still requires some manual compiles. I haven’t checked 6.5 in a while but may later when I have a chance.


#3

I got it running on CentOS6.5.

Starting with a minimal install, I mostly used these instructions here.
https://github.com/highfidelity/hifi-docs/blob/master/_managing/domains/centos-6-5-server-stack.md

Except first you need a more recent GCC version, the ones in the default repo’s are too old. I installed version 4.8.2. To save some sanity I pulled it in from here
http://people.centos.org/tru/devtools-2/readme
That repo’s installs a new supporting library tree under /opt . After installing I symllinked the relavent compiler binaries into /usr/local/bin and everything then worked as expected.

Then when it came to compling QT from source. The version pointed to in those instructions are too old. So I grabbed the latest version source tarball from the QT website and did a full make of everything in it… This took a few hours, so stick it in a screen session so you can do something else while it runs.

As my parent posted said, using CentOS7 is much easier if thats an option for you.


#4

Thanks for the reply, Sadly though we wanted Cent 7 the hosting provider installed 6.5, im assuming they haven’t rolled it out yet or something… i’m still running in to issues compiling (same place) but trying a few things and googling around…

Can you elaborate a bit on what you did when linking the relevant compiler bins in the /usr/local/bin directory?

thanks


#5

I just created a basic symbolic like this

ln -s /opt/rh/devtoolset-2/root/usr/bin/* /usr/local/bin/

Also incase it’s a problem, the string you need to export for Qt when compiled using the configure prefix in the guide is

export QT_CMAKE_PREFIX_PATH=/usr/lib/cmake/
export LD_LIBRARY_PATH=/usr/lib

For reference the Qt version I pulled was this

http://download.qt.io/official_releases/qt/5.4/5.4.1/single/qt-everywhere-opensource-src-5.4.1.tar.gz

You’ll need to export those before running the compiled binaries as well as before any compiling unless you make them persistent. You can do that by adding those 2 lines to the bottom of your /root/.bashrc file and logging out and in again.

Make sure after compiling the dependencies and correctly exporting the Qt headers and libs that you start your build job fresh otherwise you’ll pick up new errors when it tries to link mismatched libs.

Kinda feel like I’m telling you suck eggs here. But you’ll want to from your build directory do this

make clean
cmake …

Or if your paranoid and want to really make sure nothing old is left behind kill the /usr/local/hihi/build-ext directory too

rm /usr/src/hifi/build-ext -Rf

Then you can go back to /usr/src/hifi/build and run a fresh

make domain-server assignment-server

Those are the only 2 components you need to get up and running.

Finally, when it’s successfully built you need to manually create the following directory or the domain server won’t persist it’s data

mkdir /usr/src/hifi/assignment-client/resources

The run string you need for the assignment client is

/usr/src/hifi/build/assignment-client/assignment-client -n 5

Domain server is a nice simple

/usr/src/hifi/build/domain-server/domain-server

.

Then to open the port in your firewall, the line you’ll want to add to the correct place of your /etc/sysconfig/iptables is

-A INPUT -m state --state NEW -m udp -p udp  --dport 40102 -j ACCEPT

Then you can reload your firewall rules by doing this

iptables-restore < /etc/sysconfig/iptables

If you receive no output then it means it was reloaded successfully.
This is the only port that is required to be open.

You can access the domain servers web config panel without having to expose it’s port by enabling dynamic proxing in SSH like this

ssh root@server.domain.com -D 1080

Then adding localhost:1080 as a proxy in your webbrowser and browsing to the following address on your local machine http://localhost:40100/ . This will only of course function while your actually logged in via ssh.

If your hosting provider isn’t offering CentOS7, they could be running a slightly older version of XenCenter on their hypervisor. I’m running XenCenter on all my raw iron. The older version is incompatible with the CentOS7 default kernel. The newest release adds support, but was only released 2 months ago. Upgrading XenCenter to a newer release is actually a pretty tedious and time consuming job, especially when having the replicate the process across a dozen or so pool servers in a way that doesn’t subject your customers to downtime. It’s not as simple as just flicking a switch. It’s the same reason I’m running CentOS6.5. The extra compiling is less work than upgrading all my own servers just for testing a single application.


#6

Thanks for the replies and insight, Still waiting for my laptop to compile QT in a CentOS 7 VM on Virtualbox… Meanwhile on the server, I still cannot get SettingsInterface.cpp.o to compile, it’s still spitting out errors on the same file, Im starting to wonder if there isnt a bug in the code?

or maybe im just being a newbie compiler and missing something :smiley:

[ 55%] Building CXX object libraries/shared/CMakeFiles/shared.dir/src/SettingInterface.cpp.o

In file included from /usr/src/hifi/libraries/shared/src/SettingInterface.cpp:17:
/usr/src/hifi/libraries/shared/src/SettingInterface.h:37: error: ISO C++ forbids initialization of member ‘_isInitialized’
/usr/src/hifi/libraries/shared/src/SettingInterface.h:37: error: making ‘_isInitialized’ static
/usr/src/hifi/libraries/shared/src/SettingInterface.h:37: error: ISO C++ forbids in-class initialization of non-const static member ‘_isInitialized’
/usr/src/hifi/libraries/shared/src/SettingInterface.h:38: error: ISO C++ forbids initialization of member ‘_isSet’
/usr/src/hifi/libraries/shared/src/SettingInterface.h:38: error: making ‘_isSet’ static
/usr/src/hifi/libraries/shared/src/SettingInterface.h:38: error: ISO C++ forbids in-class initialization of non-const static member ‘_isSet’
In file included from /usr/src/hifi/libraries/shared/src/SettingInterface.cpp:18:
/usr/src/hifi/libraries/shared/src/SettingManager.h:40: error: ‘nullptr’ was not declared in this scope
/usr/src/hifi/libraries/shared/src/SettingManager.h:40: error: ISO C++ forbids initialization of member ‘_saveTimer’
/usr/src/hifi/libraries/shared/src/SettingManager.h:40: error: making ‘_saveTimer’ static
/usr/src/hifi/libraries/shared/src/SettingManager.h:40: error: invalid in-class initialization of static data member of non-integral type ‘QPointer<QTimer>’
/usr/src/hifi/libraries/shared/src/SettingInterface.cpp:21: error: ‘nullptr’ was not declared in this scope
make[3]: *** [libraries/shared/CMakeFiles/shared.dir/src/SettingInterface.cpp.o] Error 1
make[2]: *** [libraries/shared/CMakeFiles/shared.dir/all] Error 2
make[1]: *** [domain-server/CMakeFiles/domain-server.dir/rule] Error 2
make: *** [domain-server] Error 2

EDIT: My gcc Is still out of date for some reason and does not support C++ 11, now attempting to update it to 4.8.2 from source.


#7

My suspicion here is the GCC c++ ISO version.

Try c++11 or 0x


#8

If compiling on Centos7, @coal made an awesome script to handle all the downloads and compiling. It is here in the forums. It also handles upgrades, creating a service account, and running the server.


#9

I shall have to check that out, thanks! we do want to use Cent OS 7 in the long run, but we seem to be stuck with 6.5 for now but i will give it a dry run in a Virtual Machine Locally and see how it pans out!


#10

I wonder if his script will run on 6.5? Worth a try.


#11

@VR_Architect - it doesn’t but with other folks posting updates to the 6.5 script, I may make it support detecting 6.5 and doing a different gcc via yum and compiling qt. that’s the only hurtles really.


#12

Yeah, that’s definitely your compiler version.

Slightly weird, on a default installing symlinking the stuff into /usr/local/bin should be enough for the system to select it preferentially over the system installed compiler.


#13

I gave up in the end and switched to Cent OS 7, in a virtual machine the installer script @Coal made, worked like a charm, just waiting on the hosting provider to do their part now… Cent OS 7 is available.


#14

I had an exactly the same issue, for those who have no choice to run CentOS 7 like me, these might helps.
devtoolset-2-gcc-c++.x86_64 4.8.2-15.el6 testing-devtools-2-centos-6
devtoolset-2-libstdc+±devel.x86_64 4.8.2-15.el6 testing-devtools-2-centos-6
devtoolset-2-libstdc+±docs.x86_64 4.8.2-15.el6 testing-devtools-2-centos-6