My Compile in Debian (or how I learned to stop worrying and sideloaded QT)


#1

This is most likely useful for those of us wanting to compile the ‘Interface’ client. The server-side components should compile quite happily on stock dev-libs using Coal’s instructions here (adjusting Ubuntu to Debian where lib-names don’t align).

Okay, here is the works-for-me as of 2016-09-19. This is how I did it and probably differs from the right way™ or the way you might prefer. YMMV. :grin:

I track the Debian/testing repo, so can’t make any guarantees regarding the suitability of Debian/stable.

Using the Debian QT libs won’t work as qtWebEngine isn’t included (for reasons discussed elsewhere). Rather than try to hunt down an unofficial repository or some other dodgy source that would likely break my nice clean install, I manually installed a copy of the official QT libs into a safe location and compiled against those.

Note: Installing and compiling all this required about 5.5 gigabytes of disk space!

All this assumes you are operating from a normal user account which has membership of the sudo group

  1. Source 1 virgin goat.
  2. sudo chown [username]:[username] /usr/src to give myself full r/w access on my /usr/src directory (you can use whatever location works for you substituting your root path for /usr/src as you see fit).
  3. I installed extra libs and tools: sudo apt-get install git build-essential cmake libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev libssl-dev zlib1g-dev
  4. I logged into the QT site and downloaded the QT installer
  5. I created the folder /usr/src/qt/ and directed the QT installer to install to it (I went with QT 5.7 which seems to work fine so far). It is a GUI installer so easy to use.
  6. In /usr/src I ran (command line) git clone https://github.com/highfidelity/hifi.git
  7. I set the environment variable (command line) export QT_CMAKE_PREFIX_PATH=/usr/src/qt/5.7/gcc_64/lib/cmake/ (also added that to the bottom my .profile in my home folder so it stays set between logins).
  8. (command line) created and moved to the folder /usr/src/hifi/build/
  9. executed (command line) cmake … (note the space then two dots).
  10. executed (command line) make all
  11. The virgin goat will then be so impressed by your mad leet skillz that it will be your friend for life and head-butt all school/workplace bullies out upper-story windows for you.

Note: I constructed these instructions by up-arrowing through my bash history (skipping false-starts and re-ordering/combining a few steps for sanity). Hopefully I didn’t miss anything. I don’t generally maintain a build-environment on my system so hopefully I didn’t skip any needed packages inadvertently. Let me know below if you think I did!


I want in - please realease a Linux client soon
#2

What parts of this procedure are done as root or user?? Do you want the QT installed as root or user?? Then the git part, and compile, root or user??


#3

Other than setting /usr/src ownership to give my user account r/w access, it is all done as a normal (sudo-allowed )user. Updated the instructions with the sudo command to do the ownership change for consistency.


#4

[LaeMing] LaeMing https://forums.highfidelity.com/users/laeming
September 25

Other than setting /usr/src ownership to give my user account r/w
access, it is all done as a normal (sudo-allowed )user. Updated the
instructions with the sudo command to do the ownership change for
consistency.

Shay shay nye! (“thanks” in Mandarin) :slight_smile: Ric

My father, Victor Moore (Vic) used to say:
“There are two Great Sins in the world…
…the Sin of Ignorance, and the Sin of Stupidity.
Only the former may be overcome.” R.I.P. Dad.


#5

what about the other steps??

make assignment-client
make domain-server
make interface

…are they done from build/ ?


#6

I had a couple pf problems. I wound up doing everything within user space (my home directory_ including the qt install. I’m running “make assignment-client” and the build is just churning away!!!


#7

Finished the last steps, and I have an interface!!! Now, how to increase the menu font size.


#8

Crap …segfault
libusb couldn’t open USB device /dev/bus/usb/001/006: Permission denied.
libusb requires write access to USB device nodes.
Any ideas? Running Debian SID


#9

[quote=“wayward4now, post:5, topic:11522”]
make interface
I finally figured out that some things have to be installed/compiled as root user. When you do an edit of the install directions, that needs to be specific for old farts like me. :slight_smile: Ric


#10

Added the make all step into the instructions. Thanks.

I didn’t have any need to do anything directly from root, just via sudo as noted (make sure your user account is a member of the sudo group, it isn’t by default in Debian). Clarified this in the instructions. Thanks.

To give yourself sudo membership, you will have to be root just once and run the command:
usermod -aG sudo [username]
After that you will hopefully never have to be root again* as long as you issue commands prefixed with sudo.
(Or you can use a GUI user manager like kuser, which is how I do it)
You will need to log out and back in of the relevant user account for the group change to take effect.

  • I only use root these days to do my system-wide backups from (no doubt there is a ‘proper’ way to do that without being root too, but it is quick and easy for a small single-user system like mine).

#11

I didn’t encounter any problems with libUSB or any need to be root to compile anything! I use the provided pre-compiled Debian libs for everything except QT and what the HF build downloads for itself. I hate compiling stuff. :sunglasses: Was there a lib*-dev package I missed? (these contain the header files needed to link to the pre-compiled libraries when compiling HF, removing the need to compile the actual lib.)


#12

Ok - in regard to the usb problem - that is usually just an annoyance in that it constantly complains in log file that it can’t open some usb device. The reason for this is using libUSB to query for USB devices at a low level and, doing it that way, requires read/write access to the USB controller at kernel level. Typically Debian/Ubuntu systems only allow root to do this as the “proper” way to do what Interface is doing is via higher level calls that normal unprivileged users can execute.

That out of the way. I have not in 2+ years seen that error lead to 1) Interface not working or 2) crashing.

To solve said issue you have a couple choices - one is easy mode but lasts only until you reboot. That being looking at log output where it says;

/dev/bus/usb/001/006

In a terminal you can type

ls -la /dev/bus/usb/001/006

And see that it will be shown as owned by root and root group with root:root having read/write access and any other user/group r (read) only access. You can chmod dev link to allow all RW or you can modify udev rules to change usb subsystem to be owned by root and another group you are a member of with RW access. Option 1, changing perms of specific node, will only last until you reboot machine. Option 2, udev rule change, is best solution but complex as it varies across Debian/Ubuntu and which release you’re using. Option 3 is run Interface via sudo… but… that is not a wise thing to do unless just once to confirm it would launch and not crash if you had access to said USB device.