Jonas Byström Jonas Byström - 6 months ago 11
Linux Question

Releasing for Ubuntu

I've built a few pieces of C++ software I want to release for Ubuntu. What ways are there and what can you recommend? Is building .deb files and setting up an apt repo for them the best way? What about

make install
, is it considered an acceptable way to install software?

By far simplest for me, and perhaps most transparent for the user, would be to just have a github repository in which one could run
make install
to get all programs installed at one go.

Do I always install the binaries into
/usr/bin
?

One of the programs contains Python 3 library code, should that be installed in
/usr/lib/python3/dist-packages
? (I don't want to create a
pip
package, that would make the installation harder -- and waste more of my time.) The program also contains Python 3 examples/tutorials intended for the user to tweak and learn from, where do I install those? Do I create a
~/my-prog-tutorial-dir/
to put them in? If so: how should I name that directory?

Edit: if I simply release the statically linked binaries in a tarball, what will break eventually? Libc? Are there any major application APIs that usually change between Ubuntu LTSs? I only use pthreads, X11 and OpenGL so I suspect statically linked binaries could be a fairly stable option?

Answer

I was asked to expand my comment in an answer, and so I do.

The project I was talking about is called Woodpecker hash Bruteforce, and I distribute it as plain archived executables for Mac OS, Windows and Linux.

Woodpecker hash Bruteforce has only two dependencies I have to care about (the users don't need to install anything): OpenSSL and Botan - libraries to do hashing. I've got two virtual machines on my Mac where I build the project and several scripts to automate the process. I'm using Docker (in collaboration with VirtualBox) and VMware Fusion.

Above I said the users don't need to worry about any third-party libraries because everything's linked statically with the executable: you just download the appropriate file from the official website, unarchive it (if needed), sudo chmod +x the executable and that's it!

This works on any version of Linux, including Ubuntu (this is where I perform the build) and Kali Linux.