s6
Software
skarnet.org
 The s6-update-symlinks program 
 s6-update-symlinks links the content of several similar directory trees
under a single tree. Its main use is to replace search paths like $PATH
or $MANPATH, by creating a unique access tree based on the source trees.
Name conflicts are solved by giving precedence to the last named directory.
Subdirectories are created exactly as needed ; what can be shared is
shared.
s6-update-symlinks is useful when one wants to combine
a logical package system, like Dan Bernstein's
/package and
/command, with
physical filesystem constraints, like /, /usr and
/usr/local on separate filesystems.
 Interface 
     s6-update-symlinks d src1 src2 ...
 -  d is the destination directory. It will be created if it doesn't
exist. 
-  src1, src2, ... are the directory containing the files
to be linked.
-  d and srcn must be
absolute paths, else s6-update-symlinks refuses to run. Using
relative paths doesn't make sense here, anyway. 
-  If src2 is empty, then d becomes a link to src1. 
-  If src1 is empty or entirely overridden by src2, then
d becomes a link to src2.
-  If src1/file exists but not src2/file, then d
becomes a real directory and d/file a link to src1/file.
Then if src2/file2 exists, d/file2 links to it. 
-  And so on with other src directories, and subdirs. 
-  If s6-update-symlinks manages to performs all the requested
tasks, it exits 0. If it encounters a hard error, it exits 111. If it is
unable to resolve a conflict between given sources, it exits 100. 
 Examples 
 - 
s6-update-symlinks /command /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin
 makes all files under /bin, ..., /usr/local/sbin
available under /command. The programs linked are the same as the ones
that would be accessed with PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin".
- 
s6-update-symlinks /package /initrd/package /slash/package /usr/package /usr/local/package
 builds a /package hierarchy with what it finds in the listed
directories. This allows oddities like, for instance, having the daemontools
sources in /usr/package/admin/daemontools/src, and the daemontools
binaries in /initrd/package/admin/daemontools/bin, but accessing
both through /package/admin/daemontools/.