|
Sidai team: blessed namingBeing careful about the names you give to things -- files, users, etc., -- across a whole system is friendly to users and very helpful in administration.This document gives our (the Sidai team's) choices for naming, and the reasons for them. Being an Arusha player does not require that you follow them. Background reading: on good namespaces.
Names for files and directoriesSummary. Per-host areas:
Per-site areas for installed package-stuff; visible from all machines; ours include... /sys/.-ark-install-ia32-linux-rh6.2 /sys/.-ark-install-sparc-solaris2.6 /sys/.-ark-install-ALL /sys/.-ark-install-ia32-linux-rh6.2-web-server Per-site ARK work areas; visible from all machines: we use... /sys/ark-builds /sys/ark-state /sys/ark-gen-pkg Per-site other generally-useful areas (not ARK-specific); e.g., we have: /d/cvsroot /d/open-src /d/vendor-stuff Names for filesystems (partitions)(NB: We have specific thoughts on disk partitioning and configuration...)`System' partitions/filesystems: Filesystems that hold the traditional stuff that comes from the system vendor -- stuff in /usr, /etc, /var, and so on -- should be left as it is. Trying to "tidy" such things, however deserved, leads to madness. We are deeply in favor of vendors following the Filesystem Hierarchy Standard (FHS) and any other relevant standards for file naming. `Non-system' partitions/filesystems: These should be named /._disk1, /._disk2, and so on, renumbering for each machine. Aside: user-hostile and user-friendly file naming...We believe in distinguishing user-hostile from user-friendly pathnames.
User-hostile names begin
with /._ User-friendly names are, well, normal; e.g. /our/bin/netscape. The sole purpose of "user-hostile" pathnames is so, if the users are tempted to use them, they will know they are dealing with Deep Magic. If you don't do something like this, you will find users putting things like /net/solomon/disk7/fred/bin in their PATHs, and then wondering why their world collapses when you move things around. Access to `non-system' partitions is via automounted filesystems, named...If you name partitions as we suggest, you have a bunch of /._disk1, /._disk2, ..., etc., filesystems on various hosts. You want to put all sorts of data on them, and (possibly) share the data among your machines.We recommend that these ``chunks of data'' be managed with the Sidai dchunks machinery. (But it is optional.) As far as naming goes, we recommend that each ``chunk'' have a device-independent name (so you can move it around) and that it have exactly one name. We use the automounter to do all such naming. So, what automount maps should you have, and how should they map to the /._disks? We recommend:
User-visible names related to add-on software packagesPathnames for packages we've added to the system should be exposed to users in GNU-naming-shaped "bundles" i.e. executables in bin, man pages in man, platform-dependent libraries in lib, and so on.Also, we think there should be no more than a handful of such GNU-naming-shaped "bundles", simply because people won't be able to remember them all if there are more than that. In fact, users tend to prefer exactly one such bundle. Finally, users should not have to change their startup files (.profile, etc.) in any way in order to make use of packages coming and going. (Most users never touch the startup files they're given, and you really should have a scheme where That's OK.) (The Sidai user setup scheme is one way of handling site-wide user setups [.profile, .cshrc, and the like] that fits the bill.) So, we're trying to get by with only two ``bundles'': that works for us:
The standard ARK package-management makes it easy for tools to pop in and out of a user-visible namespace organized in this way. For example, a tiny edit in your XML file for GCC will automagically cause it to migrate from /our/bin/gcc to /our/swdevp/bin/gcc (if, for instance, you decided to move software-development tools to their own ``bundle'' [not recommended]). Pathnames related to ARK codeThe core ARK code does not mandate any particular pathnames; these are the ones we use, in doing the full Sidai-style Arusha thing.Per-host directories: For each ``bundle'' of user-visible package stuff, we need a ``deploy area''. We use the following:
In the latter two cases, it is Deeply Important that the deploy area is on the same partition as the ``bundle''. General (per-site) directories: First, you will need one ``install area'' per proto-host that you install things for. At a three-platform site, you might need: /sys/.-ark-install-hppa-hpux10.20 /sys/.-ark-install-ia32-linux-rh6.2 /sys/.-ark-install-sparc-solaris2.6 /sys/.-ark-install-ALL /sys/.-ark-install-ia32-linux-rh6.2-amanda-server /sys/.-ark-install-ia32-linux-rh6.2-mail-server /sys/.-ark-install-ia32-linux-rh6.2-web-serverSecond, you will need available-everywhere directories with which ARK can do its business:
Other generally-useful pathnames
Names for proto-hostsThe real hosts at a site (probably) have most of their properties defined by the ``proto-host tree'' underneath them. So, for example, we might have...
.:slicker .:slimy .:slinger .:slippy .:clarence
| | | | |
--------------------- ----------
| | | |
.:std-sparc-solaris | | .:std-ia32-linux
| --------------- |
.:sparc-solaris2.6 | .:ia32-linux-rh6.1
| .:ALL |
.:sparc-solaris | .:ia32-linux
| sidai:ALL |
sidai:solaris sidai:linux
(See notation bumpf in
the ARK configuration language guide...)
So, what's in the name, say, sparc-solaris2.6? First, a proto-host names those real hosts that have it as a prototype (see prototypes as a naming tool...); the string of characters in the name has no significance. You can name your proto-host fluffy-the-penguin instead of sparc-solaris2.6 if you want to. Now, whatever names you use, we would like proto-hosts (and, in general, proto-things) to be rigorous beasties. We'd like to have <properties> associated with them, and some kind of machine-checking to make sure that the properties don't suffer undue entropy. So, for example, a sparc-solaris2.6 (or f-the-p?) proto-host might have a property that runs uname -a and sees if it really is 2.6. But notice that even something like ``it's Solaris 2.6'' is NOT WELL-DEFINED, at least in any meaningful multi-site way. At your site, you might want sparc-solaris2.6 to include some particular set of OS patches; at my site, I might strongly not want some of those patches. You might want to insist on certain kernel-parameter tunings; I might not. And so on. Furthermore, the definition of sparc-solaris2.6 is likely to change over time, even at one site. For example, last week it might've meant "OS patches up through May 2000"; this week, it might mean "OS patches up through Oct 2000". So: all "interesting" proto-hosts are site-specific; ideally, they should have lots of machine-checked properties. Collaboration-wise: teams that see eyeball-to-eyeball on definitions of semantically-rich proto-hosts can join forces, and create proto-hosts that capture their common notions. Meanwhile, the proto-hosts that we're currently supplying under team Sidai (host/{solaris,hpux,linux}.xml) are semantically-poor. I don't think there's much we can say that's certain to be true across many ARK sites. Not much more than "if it's Solaris, you'll find `make' in /usr/ccs/bin"... So, should a more-specific proto-host be solaris-web-server or sparc-solaris2.6-web-server? The first part of the answer, above and long-windedly, is "the name doesn't matter". But of course names do matter. They make it easier for us to talk not-at-cross-purposes. The name solaris-web-server fails the following test: the name does not give a good indication of what's in the proto-host's prototype path. Put another way: it doesn't tell us anything about the 90% of the "inheritance iceberg" that we can't see. I would expect packages put on a proto-host web-server to be platform-independent; on solaris-web-server, would work on any old Solaris thing. |