8
votes

I am writing a (closed-source) application and will provide binaries for all three major platforms (MacOS X, Linux and Windows). It uses Qt under the LGPL license so I am required to dynamically link with the Qt libraries. I understand how to bundle the application for MacOS and Windows by simply providing the Qt dynamic library with the application, but I am unsure how to do this properly for Linux.

It's traditional to provide the application as a package (.deb and .rpm) and allow the package system to resolve the dependencies. Should use this method? If so which distros should I be aiming for (I am assuming Ubuntu and Fedora)? If anyone has any experience with this, I'd be interested in hearing it.

3
Since this is closed source... I suggest you get a team member on board that has the required expertise. As it is, this question seems way to broad. And yes, obviously you should use the distro's packaging system if you intend on getting any users - sehe
@sehe: You seem to imply that I cannot ask for help on stackoverflow unless I am providing an open source application? - trojanfoe
not quite, but close: I am suggesting that it will be hard for me to actually help you since I'll not be able to get full disclosure on the details. As in: I can not actually whip up a package as a starting point, and I am not about to painstakingly interrogate you about details that I cannot readily see :) - sehe

3 Answers

3
votes

deb, rpm and tarballs are the right ways to go. There are a few non-standard ways that I know of which you might want to consider as well which are more distro agnostic.

  • Makeself - Self extracting shell scripts that contain your application. This is quite widely used by closed source software distributors.
  • ZeroInstall - useful for non-root installations.
  • Listaller - Merged with autoinstall and it seems to be unstable as of now.
2
votes

You need to provide at least 3 packages for Linux; a .deb for Debian-based systems, a .rpm for RPM-based systems, and a tarball for everything else. Some find it necessary to refine it to provide three or four different .rpm packages, for Fedora, SuSE, Mandriva, and RHEL, depending on the exact library requirements the software has.

0
votes

There are many ways to do so... but if you want a distribution generic way to bundle an application for Linux, you may check this ( http://codevarium.gameka.com.br/deploying-cc-linux-applications-supporting-both-32-bit-and-64-bit/ ) tutorial. It shows how to copy all the dependencies to a library folder and make a shell script to properly execute the bundle.