.: spill - segregated package install logical linker :.
:: News ::

19 February 2006
Released version 0.7

2 October 2005
Released version 0.6.1

13 April 2005
Released version 0.5

21 December 2003
Reformatted webpage
:: NAVIGATION ::
main page
contact the author
:: SIMILAR PROGRAMS ::
stow
depot
relink

overview

spill is a program for creating set of symbolic links from one directory hierarchy which point to corresponding filenames in a separate directory hierarchy. It's primary use is to allow packages built from source to be installed in separate directory trees, which are all linked together under a common directory tree (e.g. /usr/local) to reduce the length of the PATH environment variable. An example might be:
% tar xzvf foobar-0.1.tar.gz
% cd foobar-0.1
% ./configure --prefix=/app/foobar/0.1-1
% make
...
% sudo make install
% sudo spill /app/foobar/0.1-1 /usr/local
%

You might think this looks over-complicated and be wondering why you can't just do

% cd foobar-0.1
% ./configure --prefix=/usr/local
% make
% sudo make install
since this would avoid the need to create the links at all. Well, suppose you do this for tens or hundreds of packages you compile yourself. Try taking a look at the contents of one of the directories under /usr/local. How on earth do you tell which files were installed by which programs? This is a maintenance nightmare if you need to delete packages you don't need anymore. The extra effort at configure / compile / install time will pay dividends later, as I've found to my cost in the past.

In the example above, the installation directory /app/foobar/0.1 is used. spill always assumes that the final two path components of the prefix are

  1. The name of the program or package (in this case, foobar)
  2. The version of that program or package (in this case, 0.1-1.) You can use any format you like for this path component. By convention, I always use the upstream version number of the package, then a hyphen, then the build number. This allows me to keep several installations active, perhaps with different configure options (e.g. depending on whether the KDE or GNOME version of the GUI is used).
If spill detects that it needs to replace a link in the target directory during installation, it will check whether the link currently points to the corresponding file in a different version of the same program/package. If so, it will do the replacement automatically. If the existing link points to something in a different program/package spill will complain and won't carry out any of the installation. (You have to resolve the conflict by hand in this case then re-run spill.)

spill is similar in idea to several other programs such as stow, depot, relink etc. However spill is written in C, and compiles to a standalone binary, so has no dependence on perl or another interpreter being available. This may be useful when building up a system from almost nothing. Also, spill makes very few assumptions about the destination directory. In particular, it doesn't assume it is solely responsible for managing the contents of that hierarchy. All it cares about is that it can create links to a new package without any conflicts occurring. (If a conflict is detected, it aborts the operation before the filesystem has been modified at all.)

spill is licensed under the GPL.

Suggestions, bug reports, experiences, praise, complaints etc to the author, please. (See the contact link in the bar at the left.)

stable releases

Version 0.7 19 February 2006
Available as

Release notes:

  • -D option to remove the symlinks for a package given just its name and the path to the symlink area.

GPG signature for spill-0.7.tar.gz

Version 0.6.1 2 October 2005
Available as

Release notes:

  • Cleanly remove old version when upgrading a package
  • Add -r/--retain option to keep links pointing to old package

GPG signature for spill-0.6.1.tar.gz

Version 0.5 13 April 2005
Available as

Release notes:

  • -V command line option to show program version
  • Multiple single-character flags allowed per command line argument
  • Remove -I option. Replaced by the more flexible solution of allowing arbitrarily many ignore_path arguments on the command line, to allow other conflicts besides info/dir to be handled.
  • Add -o command switch to allow links to new package to override those to an existing package when conflicts arise.
Version 0.4 22 December 2003
Available as

GPG signature for spill-0.4.tar.gz

Release notes:

  • Added -I option, to ignore the info/dir file (which is a frequent source of conflicts.)
Version 0.3 27 May 2003
Available as

GPG signature for spill-0.3.tar.gz

Release notes:

  • Added package delete
  • Extended manpage.

development releases

WARNING : these releases may be buggy, half-finished, lack documentation for new features etc. Please try, test and report problems. Even better, fix the problems and send me the patches! Also, I might modify or remove features in later releases
There are no development releases at the moment

documentation

spill comes with a manpage, and includes brief usage information in the program itself. This information is shown below to give an idea of the program's options and capabilities.

% spill --help
spill version V0.3 - segregated package install logical linker
Copyright (C) Richard P. Curnow, 2003

spill comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see the GNU General Public License for details.

Printing this help
Syntax : spill -h
  -h,  --help             Show this help message then exit

Options for package install (default operation)
Syntax : spill [-f] [-n] [-q] [-x]
               [-l <file> | --conflict-list=<file>
               <tool_install_path> [<link_install_path>]
  -f,  --force            Attempt install even if expected subdirectories are missing
  -n,  --dry_run          Don't do install, just report potential link conflicts
  -q,  --quiet            Be quiet when installing, only show errors
  -x,  --expand           Expand any existing links to directories when needed
  -l <conflict_file>
  --conflict-list=<file>  Filename to which conflicting destination paths are written

<tool_install_path>       Directory specified as --prefix when package was built
                          (relative links are created if this is given as a relative path)
<link_install_path>       Base directory where links are created (e.g. /usr) (default is ".")

Options for package removal
Syntax : spill -d [-q] <tool_install_path> [<link_install_path>]
  -q,  --quiet            Be quiet, only show errors
<tool_install_path> and <link_install_path> as above.
%
Last updated: 19th February 2006
Hosted on Force9
Copyright © 2006 Richard P. Curnow
All rights reserved