Spack: the S(eb's|lack) package manager

Looking for a quite simple but complete package manager for your distribution or an efficient and daily viable alternative for the Slackware(R) pkgtools? Take a seat.

Table of content


Spack is a standalone package manager, using its own cpio-based but fully Slackware-compatible package format. It is intended to be used either "as is" on a distribution not requiring dependency checking (typically LFS based), or as an alternative for the pkgtools on Slackware, for which it has a dedicated compatibility mode, allowing it to produce and deal with the traditional (tar-based) Slackware packages.

It provides all the commands you need to create, install, upgrade, remove, arrange and retrieve a large set of packages. These commands are implemented as mere shell scripts, trying to stick as much as it makes sense to the POSIX standard, so the chance to meet unexpected behaviours is reasonably small.


The project can currently be considered mature, which means that no big revolution's planed. Of course it's cursed like all programs being more than ten lines long are, so there are probably still some little stuff to shape, and some hidden bugs ready to bite. That said, things are expected to work almost smooth.

Spack is released under the very friendly terms of the MIT/X11 license. To get the latest source release, use the link below:

For the Slackers, a traditional Slackware package is provided. You can also find it packaged in its own format (with some patches, though) in the 0linux francophone distribution, which has adopted it as its package manager.

Command abstract

Here are the short descriptions of each command provided by Spack.

The Makefile of Spack will let you install separately the commands you wish. That's why certain sections below regroup several commands, showing those requiring each other.

spackadd & spackpkg

The spackadd script installs and upgrades the Spack packages. The removal of the packages is done by calling the command through the spackrm symlink, but can as well be performed by the Slackware removepkg command, as there is no difference between a Spack and a Slackware packages, once they are installed.

The spackpkg command creates packages, just like the Slackware makepkg does. It can do that whether from a directory where the stuff for the package is stored, or from a traditional Slackware package, if the Slackware compatibility is requested.


The Spack packages being fully compatible with Slackware, the Spack packaging policy is the same as the Slackware one. The spackcook command (formerly just named spack) aims to drastically reduce the code you are required to write to meet the packaging requirements. To achieve that, it manages for you all of the redundant tasks (like fixing permissions, compressing the manuals, stripping the binaries, fetching the docs, ...) in the packaging process, simply letting you build the software and put it in a temporary root.

The result is that your code is faster to write, easier to maintain, and clearer for others to understand. For instance, here is the typical piece of code you will have to write (if you have/choose to do it, since spackcook has also a little built-in packaging process which can deal with many things without requiring a single line of code from you):

set -e
./configure --prefix=$PREFIX
make install DESTDIR=$PKGDIR

For software that is trickier to package, spackcook has moreover the ability to let you take control of any of the steps of the packaging process that you wish, replacing its routines with your own code.

Last but not the least this command can be used to produce either Spack packages (with spackpkg) or Slackware ones (requires the Slackware makepkg).


The spackdesc command helps you to write the about.txt (Spack name for slack-desc) file, formatting it from the description you untidily write in a text file of your choice.


The spackedit command provides facilities to unpack a Spack package and tweak or fix its content, so you can then repackage it without having to remake it from scratch. It is primarily useful when you just need to modify a text file or when a package is a bundle of independent binaries you don't want to all rebuild when only one of them needs it.

spackfind & spackindex

These commands aim to retrieve the package(s) a file belongs to. You first create with spackindex one or more databases from the Spack packages or, if the dedicated compatibility mode is enabled, with the Slackware packages and/or MANIFEST.bz2 files. Then you look for the files you need (typically a missing dependency reported by an error message) using spackfind.


The spacklist command allows you to list the packages installed on your system and to easily display the information stored in their log files.


The more things you package, the more of a mess you will have on your disk. The spacktidy commands helps you to address this. It creates local repositories where it stores your files, matching and separating the source archives from the packages and automatically replacing the former versions of these with the new ones you push.

Help & contact

The README file inside the archive explains you how to install Spack, or the components of it that you want. Don't skip this step, even if you don't plan to install it properly in your system, for many things get their initial value from the Makefile.

If for any reason (bug report, fix, suggestion, feedback, question, and so on...), you need to contact me (Seb), use this address (in English or in French): sbb(a)tuxfamily*org (replace "(a)" with "@" and "*" with ".").

Slackware is a registered trademark of Patrick Volkerding and Slackware Linux, Inc. Spack is not a part of the Slackware Linux project and is not endorsed by it to any degree.