Motivation

The primary motivation behind pkgix was a restricted environment (no root access, e.g. compute cluster) without specific software dependencies. Furthermore, the dependencies should be the same across a variety of machines (e.g. local workstation). In particular:

  • require specific version of software, with many dependencies;
  • restricted permissions;
  • little storage space available;
  • the now common language-specific package managers do not help;
  • this has to happen on several machines.

Typically, one resorts to many instances of ./configure && make && make install (or equivalent for whatever software we need); the next best thing is a collection of scripts to automate this. Now consider the problem of keeping this collection of software up-to-date and we might as well give up. The solution we really want is a package manager.

Although package management appears to be a solved problem, none of the existing solutions seem to address all of the issues that initially sparked creation of pkgix. The goal was to require as few dependencies as possible, i.e. BASH and a minimal set of external tools—in addition, the package manager should:

  • be able to install in an arbitrary prefix (no root!).
  • resolve dependencies automatically;
  • if, however, a dependency is already installed on the target system it will mark it as satisfied;
  • provide the ability to upgrade, uninstall, and do general maintenance on a prefix;
  • combine prefixes.