7

Fedora, FreeBSD, OS X (Homebrew, MacPorts), Ubuntu, Debian, and others all use different packaging systems for binary and source distribution.

When I develop a new application I want to make it available to as many users as possible right out of the gate. But learning all the different packaging tools and conventions is a lot of work. I can manage, but there has to be an easier way.

Is there a super-tool that I should be aware of that can be used to ease the overhead of maintaining and learning all these packaging systems?

3
  • Just script the packaging process for yourself on a per application basis.
    – goldilocks
    Jan 2, 2013 at 16:32
  • 1
    fpm : github.com/jordansissel/fpm - works like a charm for a decent subset of the systems you cite (builds RPMs and debs). Agree with @goldilocks, though; the starting point would be the good ole' autotools-based source tarball. Jan 2, 2013 at 19:54
  • Another quick & dirty way to get deb, rpm and Slackware packages from a source-based install is using checkinstall (but the Open Build Service could be handy here, too, as it gets you packages for various rpm-based distributions and Debian)
    – sr_
    Jan 3, 2013 at 8:14

5 Answers 5

7

The easy way is to provide a source archive and let distribution maintainers make packages for their own distribution.

You can easily make a plain binary archive (.tar.gz) and convert it to a .deb and to a .rpm, which will cover most Linux users, but it won't be as useful as a properly-made package. Getting the binary archive in the right format is only the tip of the iceberg. Making a good package requires, among others:

  • Placing the files in the appropriate directories. While the FHS attempts to unify the Linux directory structure, there is still variation between distributions.
  • Compiling against the right versions of libraries. How difficult this is depends on whether your program depends on libraries whose ABI evolves quickly. Different releases of the same distribution may require different packages because they ship with different library versions.
  • Declaring dependencies with the right package names.
  • Declaring menu entries, MIME handlers, documentation, startup scripts, …

It's generally easier to let someone who is familiar with each distribution make a package. Often you'll be able to gather these contributions into a single source package (containing a debian directory, a .spec file for rpm, …), and distribute source archives, then let people who run each distribution make a package for their distribution. Unless you've made major changes to your program, it's likely that once you get a particular distribution working, newer versions will just work with the same build scripts.

Some distributions have automated mechanisms to build and distribute packages. For example, you can make an Ubuntu PPA and have it automatically built against all supported Ubuntu releases, even if you aren't running Ubuntu.

4

You might consider fpm which is a tool to help build packages for all the different packaging formats easily.

1

Beside Gilles' answer, things moved little now with at least for GNU/Linux distribution which got few new cross distribution packaging, like: Flatpak/Flathub, Snap/Snapcraft, AppImage... Even Homebrew & NixOS.

It is still wise to leave packaging to a developer familiar with platform or its workflows and policies, but the most of those above have separate installation home and some support confinement/jailing. So have some freedom how you structure your app.

0

My suggestion is learn them. It's not that difficult and there have been a lot of automation in building them and it provides native way for systems to tell the use what they actually have installed..

Having said that there are many options:

  1. RPM can be compiled from source and many systems provide natively compiled ports of the tool
  2. APT is also available for some of the OS' you have listed.
  3. Self-Extracting Shell Archive which basically requires a tar ball of your distribution and some post configuration scripts.
0

Try looking into AppImage packaging MyPaint and Krita use it and it's awesome! They provide you with a single image file, you set it executable and you don't have to worry about versioning or if some other package is installed which may collide and make your software unstable. It's kind of like you a whole docker system in a file. Best of all, you don't need to install anything!!

Check it out...

Appimage.org

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .