Building the domain server on Ubuntu


#1

Hello,

I’m testing a new cloud service, and I would like to test how HighFidelity is working on it. The system on the server is Ubuntu. I’ve read build.md in the hifi-master source, but it seems to be for Interface, since it involves Qt, and I guess Qt is not required for the server part, am I wrong ? What are the dependencies to build hifi-master on Ubuntu ?

Thank you


#2

Hi Laurent,

Yes - you need QT even for the non GUI stuff. The guide to follow is at

http://docs.highfidelity.io/v1.0/docs/ubuntu-1404-lts-guide

If you follow that you should have no trouble compiling on Ubuntu 14.04 64 bit.

I did my build a little differently as I wanted my binaries and includes in /usr/local/ vs /usr as the guide directs you to.

Also I’m running mine as an unprivileged user within a linux container space to increase its isolation from main server process/file system just in case.

When you get to the final steps you just need to build domain and assignment binaries

make domain-server
make assignment-client

I moved my binaries to /usr/local to make it easier writing control scripts so they run as services on reboot and modified source to change paths placing data in directories more in line with how I like to run daemon processes. I’m currently running a domain server and 10 assignment client processes on a cloud droplet with no problems (except the domain-server web interface isn’t working - but that’s an error on my part and pretty much something I consider a plus as I didn’t want it exposed in any case).


#3

I’ve installed Nettle following the tuto, but GNUtls won’t build. Configure fails with an error message indicating it can’t find nettle : Libnettle 2.7 was not found


#4

Did you do the make install after make for nettle? That’s first thing that comes to mind. Sometimes it’s easy to skip the in the excitement of getting to next step.


#5

I’ve done the make install.


#6

If the make instal on nettle succeeded then it’s odd it would indicate not installed. Try sudo ldconfig to refresh the library cache config. I’ve followed that guide repeatedly and never had that happen, it just worked. The only issue I found with it I forgot to mention is when you do the apt install on that huge package list it fails to find package named perf and that can be safely taken out of list.

If all else fails you can try sudo apt-get install nettle-dev

I’m still confirming the validity of this, but on my last test droplet build I installed cmake, glm, nettle and freeglut from packages vs compiling with no ill effect. GNUtls seemed to be too different in available version so I built from source. It’s a pretty tricky build, and I’m starting to think going the packages route for all but GNUtls might be good idea - just needs more testing.

That would be sudo apt-get install cmake libglm-dev nettle-dev freeglut3-dev

Then compile GNUtls from source. That worked on my last go around starting with a fresh Ubuntu 14.04 64 bit install.


#7

After installing all the dependencies, build of domain-server succeed, but build of assignment-client fails because of mmintrin.h :

http://pastie.org/9649933


#8

Per discussions in gitter - the issue here is building on an Arm CPU and that mmintrin.h should no longer be included (regardless of CPU) as AC isn’t using MMX/vector/simd instructions. It was confirmed one can comment out the include for mmintrin.h and compile on Linux. Whether that’s the only remaining issue for compiling on Arm CPU remains to be seen.


#9

I don’t think the hangup for this build is the same anymore but I’ve updated the documentation to not suggest that we still need gnutls and nettle. Those aren’t hifi dependencies anymore. Sorry about that!


#10

No problem. Testing if to help discovering those problems :). It seems that removing “include mmintrin.h” is enough. Buid is successful. I only had this warning :

/usr/src/hifi/assignment-client/src/octree/OctreeServer.cpp: In member function ‘virtual bool OctreeServer::handleHTTPRequest(HTTPConnection*, const QUrl&, bool)’:
/usr/src/hifi/assignment-client/src/octree/OctreeServer.cpp:699:106: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘unsigned int’ [-Wformat=]
statsString += QString().sprintf("\r\nOctreeElement size… %ld bytes\r\n", sizeof(OctreeElement));


#11

Good deal on the gnutls and nettle deps - can now go to all packaged deps on Ubuntu 14.04 and only compile HiFi code \o/. I’ll update my build scripts that I intend to publish once I’m sure I got it all right.


#12

As it turns out we don’t need mmintrin.h in the AudioMixer either, so I’ve removed that include in master.

Thanks!