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/.