You're making this way more complicated than it needs to be.

For 3rd party stuff, I put the source tree in /usr/lyndon/src/<foo>,
adjust the mkfiles to install in /usr/lyndon/bin/$objtype, and say
'mk install'. I keep a shadow man tree under /usr/lyndon/lib/man,
and then bind it all on top of the system directories:

bind -a $home/bin/rc            /bin
bind -a $home/bin/rcaux         /bin/aux
bind -a $home/bin/$cputype      /bin
bind -a $home/lib/man/1         /sys/man/1
bind -a $home/lib/man/2         /sys/man/2
bind -a $home/lib/man/3         /sys/man/3
bind -a $home/lib/man/4         /sys/man/4
bind -a $home/lib/man/5         /sys/man/5
bind -a $home/lib/man/6         /sys/man/6
bind -a $home/lib/man/7         /sys/man/7
bind -a $home/lib/man/8         /sys/man/8

(I use this for contrib packages as well, after getting burned a few
times with contrib stuff breaking builds in /sys/src.  Rather than
use the package tool I copy the sources into $home/src and build as
above.  The extra work is minimal.)

If you need to distinguish between your own and site-wide 3rd-party
bits, create a new user to own the public 3rd party code, mirror the
above structure, and do the appropriate binds in the system-wide
namespace files.

The only time I contemplate using a /bin/<foo> subdirectory is when
there are significant command name collisions.  Over the last 10+
years it's only happened to me once.  It's almost always easier to
just rename the conflicting file.

To use Plan 9 properly you must understand what namespaces provide,
and how to manipulate them.

--lyndon


Reply via email to