diff options
author | Cy Schubert <cy@FreeBSD.org> | 2016-08-31 00:08:49 +0000 |
---|---|---|
committer | Cy Schubert <cy@FreeBSD.org> | 2016-08-31 00:08:49 +0000 |
commit | ca57057f598bfc7119f79f71bf38ec88244ab396 (patch) | |
tree | 051f78ef258707b493cc7cb21569b6949915f6c7 /doc/am-utils.info-1 | |
parent | e66b16bf080ead1c51f321eaf56710c771778706 (diff) |
Notes
Diffstat (limited to 'doc/am-utils.info-1')
-rw-r--r-- | doc/am-utils.info-1 | 7645 |
1 files changed, 7645 insertions, 0 deletions
diff --git a/doc/am-utils.info-1 b/doc/am-utils.info-1 new file mode 100644 index 000000000000..37ac0b5e53e4 --- /dev/null +++ b/doc/am-utils.info-1 @@ -0,0 +1,7645 @@ +This is ../../doc/am-utils.info, produced by makeinfo version 4.8 from +../../doc/am-utils.texi. + +INFO-DIR-SECTION Administration +START-INFO-DIR-ENTRY +* Am-utils: (am-utils). The Amd automounter suite of utilities +END-INFO-DIR-ENTRY + + +File: am-utils.info, Node: Top, Next: License, Up: (DIR) + + Am-utils (4.4BSD Automounter Utilities) User Manual +For version 6.2-rc1, 21 November 2010 + + Erez Zadok +(Originally by Jan-Simon Pendry and Nick Williams) + + Copyright (C) 1997-2009 Erez Zadok +Copyright (C) 1989 Jan-Simon Pendry +Copyright (C) 1989 Imperial College of Science, Technology & Medicine +Copyright (C) 1989 The Regents of the University of California. +All Rights Reserved. + + Permission to copy this document, or any portion of it, as necessary +for use of this software is granted provided this copyright notice and +statement of permission are included. + + Am-utils is the 4.4BSD Automounter Tool Suite, which includes the Amd +automounter, the Amq query and control program, the Hlfsd daemon, and +other tools. This Info file describes how to use and understand the +tools within Am-utils. + +* Menu: + +* License:: Explains the terms and conditions for using + and distributing Am-utils. +* Distrib:: How to get the latest Am-utils distribution. +* AddInfo:: How to get additional information. +* Intro:: An introduction to Automounting concepts. +* History:: History of am-utils' development. +* Overview:: An overview of Amd. +* Supported Platforms:: Machines and Systems supported by Amd. +* Mount Maps:: Details of mount maps. +* Amd Command Line Options:: All the Amd command line options explained. +* Filesystem Types:: The different mount types supported by Amd. +* Amd Configuration File:: The amd.conf file syntax and meaning. +* Run-time Administration:: How to start, stop and control Amd. +* FSinfo:: The FSinfo filesystem management tool. +* Hlfsd:: The Home-Link Filesystem server. +* Assorted Tools:: Other tools which come with am-utils. +* Examples:: Some examples showing how Amd might be used. +* Internals:: Implementation details. +* Acknowledgments & Trademarks:: Legal Notes. + +Indexes +* Index:: An item for each concept. + + +File: am-utils.info, Node: License, Next: Distrib, Prev: Top, Up: Top + +License +******* + +Am-utils is not in the public domain; it is copyrighted and there are +restrictions on its distribution. + + Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + 3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + + "This product includes software developed by the University of + California, Berkeley and its contributors, as well as the Trustees + of Columbia University." + + 4. Neither the name of the University nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + + +File: am-utils.info, Node: Distrib, Next: AddInfo, Prev: License, Up: Top + +Source Distribution +******************* + +The Am-utils home page is located in + `http://www.am-utils.org/' + + You can get the latest distribution version of Am-utils from + `ftp://ftp.am-utils.org/pub/am-utils/am-utils.tar.gz' + + Additional alpha, beta, and release distributions are available in + `ftp://ftp.am-utils.org/pub/am-utils/'. + + Revision 5.2 was part of the 4.3BSD Reno distribution. + + Revision 5.3bsdnet, a late alpha version of 5.3, was part of the BSD +network version 2 distribution + + Revision 6.0 was made independently by Erez Zadok at the Computer +Science Department of Columbia University (http://www.cs.columbia.edu/), +as part of his PhD thesis work +(http://www.fsl.cs.sunysb.edu/docs/zadok-thesis-proposal/). Am-utils +(especially version 6.1) continues to be developed and maintained at the +Computer Science Department (http://www.cs.sunysb.edu/) of Stony Brook +University (http://www.stonybrook.edu/), as a service to the user +community. + + *Note History::, for more details. + + +File: am-utils.info, Node: AddInfo, Next: Intro, Prev: Distrib, Up: Top + +Getting Additional Information +****************************** + +Bug Reports +=========== + +Before reporting a bug, see if it is a known one in the bugs +(http://www.am-utils.org/docs/am-utils/BUGS.txt) file. + + If you find a problem and hopefully you can reproduce it, please +describe it in detail and submit a bug report +(https://bugzilla.filesystems.org/) via Bugzilla +(http://www.bugzilla.org/). Alternatively, you can send your bug +report to the "am-utils" list (see `http://www.am-utils.org/' under +"Mailing Lists") quoting the details of the release and your +configuration. These details can be obtained by running the command +`amd -v'. It would greatly help if you could provide a reproducible +procedure for detecting the bug you are reporting. + + Providing working patches is highly encouraged. Every patch +incorporated, however small, will get its author an honorable mention in +the authors file (http://www.am-utils.org/docs/am-utils/AUTHORS.txt). + +Mailing Lists +============= + +There are several mailing lists for people interested in keeping +up-to-date with developments. + + 1. The users mailing list, `am-utils' is for + + - announcements of alpha and beta releases of am-utils + + - reporting of bugs and patches + + - discussions of new features for am-utils + + - implementation and porting issues + + To subscribe, visit `http://www.am-utils.org/' under "Mailing + Lists." After subscribing, you can post a message to this list. + To avoid as much spam as possible, only subscribers to this list + may post to it. + + Subscribers of `am-utils' are most helpful if they have the time + and resources to test new and development versions of amd, on as + many different platforms as possible. They should also be + prepared to learn and use the GNU Autoconf, Automake, and Libtool + packages, as needed; and of course, become familiar with the + complex code in the am-utils package. In other words, subscribers + on this list should hopefully be able to contribute meaningfully + to the development of amd. + + Note that this `am-utils' list used to be called `amd-dev' before + January 1st, 2004. Please use the new name, `am-utils'. + + 2. The announcements mailing list, `am-utils-announce' is for + announcements only (mostly new releases). To subscribe, visit + `http://www.am-utils.org/' under "Mailing Lists." This list is + read-only: only am-utils developers may post to it. + + 3. We distribute nightly CVS snapshots in + `ftp://ftp.am-utils.org/pub/am-utils/snapshots/daily/'. If you + like to get email notices of commits to the am-utils CVS + repository, subscribe to the CVS logs mailing list, `am-utils-cvs' + at `http://www.am-utils.org/' under "Mailing Lists." + + 4. The older list which was used to user discussions, `amd-workers', + is defunct as of January 2004. (Its last address was <amd-workers + AT majordomo.glue.umd.edu>.) Don't use `amd-workers': use the + newer, more active `am-utils' list. + + 5. For completeness, there's a developers-only closed list called + `am-utils-developers' (see `http://www.am-utils.org/' under + "Mailing Lists"). + + +Am-utils Book +============= + +Erez Zadok (http://www.cs.sunysb.edu/~ezk) wrote a book +(http://www.fsl.cs.sunysb.edu/docs/amd-book/), titled Linux NFS and +Automounter Administration, ISBN 0-7821-2739-8, (Sybex, 2001). The +book is full of details and examples that go beyond what this manual +has. The book also covers NFS in great detail. Although the book is +geared toward Linux users, it is general enough for any Unix +administrator and contains specific sections for non-Linux systems. + + +File: am-utils.info, Node: Intro, Next: History, Prev: AddInfo, Up: Top + +Introduction +************ + +An "automounter" maintains a cache of mounted filesystems. Filesystems +are mounted on demand when they are first referenced, and unmounted +after a period of inactivity. + + Amd may be used as a replacement for Sun's automounter. The choice +of which filesystem to mount can be controlled dynamically with +"selectors". Selectors allow decisions of the form "hostname is THIS," +or "architecture is not THAT." Selectors may be combined arbitrarily. +Amd also supports a variety of filesystem types, including NFS, UFS and +the novel "program" filesystem. The combination of selectors and +multiple filesystem types allows identical configuration files to be +used on all machines thus reducing the administrative overhead. + + Amd ensures that it will not hang if a remote server goes down. +Moreover, Amd can determine when a remote server has become +inaccessible and then mount replacement filesystems as and when they +become available. + + Amd contains no proprietary source code and has been ported to +numerous flavors of Unix. + + +File: am-utils.info, Node: History, Next: Overview, Prev: Intro, Up: Top + +History +******* + +The Amd package has been without an official maintainer since 1992. +Several people have stepped in to maintain it unofficially. Most +notable were the `upl' (Unofficial Patch Level) releases of Amd, +created by me (Erez Zadok (http://www.cs.sunysb.edu/~ezk)), and +available from `ftp://ftp.am-utils.org/pub/amd/'. The last such +unofficial release was `upl102'. + + Through the process of patching and aging, it was becoming more and +more apparent that Amd was in much need of revitalizing. Maintaining +Amd had become a difficult task. I took it upon myself to cleanup the +code, so that it would be easier to port to new platforms, add new +features, keep up with the many new feature requests, and deal with the +never ending stream of bug reports. + + I have been working on such a release of Amd on and off since +January of 1996. The new suite of tools is currently named "am-utils" +(AutoMounter Utilities), in line with GNU naming conventions, befitting +the contents of the package. In October of 1996 I had received enough +offers to help me with this task that I decided to make a mailing list +for this group of people. Around the same time, Amd had become a +necessary part of my PhD thesis work, resulting in more work performed +on am-utils. + + Am-utils version 6.0 was numbered with a major new release number to +distinguish it from the last official release of Amd (5.x). Many new +features have been added such as a GNU `configure' system, NFS Version +3, a run-time configuration file (`amd.conf'), many new ports, more +scripts and programs, as well as numerous bug fixes. Another reason +for the new major release number was to alert users of am-utils that +user-visible interfaces may have changed. In order to make Amd work +well for the next 10 years, and be easier to maintain, it was necessary +to remove old or unused features, change various syntax files, etc. +However, great care was taken to ensure the maximum possible backwards +compatibility. + + Am-utils version 6.1 has autofs support for Linux and Solaris 2.5+ as +the major new feature, in addition to several other minor new features. +The autofs support is completely transparent to the end-user, aside +from the fact that `/bin/pwd' now always returns the correct amd-ified +path. The administrator can easily switch between NFS and autofs +mounts by changing one parameter in `amd.conf'. Autofs support and +maintenance was developed in conjunction with Ion Badulescu <ionut AT +badula.org>. + + +File: am-utils.info, Node: Overview, Next: Supported Platforms, Prev: History, Up: Top + +1 Overview +********** + +Amd maintains a cache of mounted filesystems. Filesystems are +"demand-mounted" when they are first referenced, and unmounted after a +period of inactivity. Amd may be used as a replacement for Sun's +automount(8) program. It contains no proprietary source code and has +been ported to numerous flavors of Unix. *Note Supported Platforms::. + + Amd was designed as the basis for experimenting with filesystem +layout and management. Although Amd has many direct applications it is +loaded with additional features which have little practical use. At +some point the infrequently used components may be removed to streamline +the production system. + + Amd supports the notion of "replicated" filesystems by evaluating +each member of a list of possible filesystem locations one by one. Amd +checks that each cached mapping remains valid. Should a mapping be +lost - such as happens when a fileserver goes down - Amd automatically +selects a replacement should one be available. + +* Menu: + +* Fundamentals:: +* Filesystems and Volumes:: +* Volume Naming:: +* Volume Binding:: +* Operational Principles:: +* Mounting a Volume:: +* Automatic Unmounting:: +* Keep-alives:: +* Non-blocking Operation:: + + +File: am-utils.info, Node: Fundamentals, Next: Filesystems and Volumes, Prev: Overview, Up: Overview + +1.1 Fundamentals +================ + +The fundamental concept behind Amd is the ability to separate the name +used to refer to a file from the name used to refer to its physical +storage location. This allows the same files to be accessed with the +same name regardless of where in the network the name is used. This is +very different from placing `/n/hostname' in front of the pathname +since that includes location dependent information which may change if +files are moved to another machine. + + By placing the required mappings in a centrally administered +database, filesystems can be re-organized without requiring changes to +configuration files, shell scripts and so on. + + +File: am-utils.info, Node: Filesystems and Volumes, Next: Volume Naming, Prev: Fundamentals, Up: Overview + +1.2 Filesystems and Volumes +=========================== + +Amd views the world as a set of fileservers, each containing one or +more filesystems where each filesystem contains one or more "volumes". +Here the term "volume" is used to refer to a coherent set of files such +as a user's home directory or a TeX distribution. + + In order to access the contents of a volume, Amd must be told in +which filesystem the volume resides and which host owns the filesystem. +By default the host is assumed to be local and the volume is assumed to +be the entire filesystem. If a filesystem contains more than one +volume, then a "sublink" is used to refer to the sub-directory within +the filesystem where the volume can be found. + + +File: am-utils.info, Node: Volume Naming, Next: Volume Binding, Prev: Filesystems and Volumes, Up: Overview + +1.3 Volume Naming +================= + +Volume names are defined to be unique across the entire network. A +volume name is the pathname to the volume's root as known by the users +of that volume. Since this name uniquely identifies the volume +contents, all volumes can be named and accessed from each host, subject +to administrative controls. + + Volumes may be replicated or duplicated. Replicated volumes contain +identical copies of the same data and reside at two or more locations in +the network. Each of the replicated volumes can be used +interchangeably. Duplicated volumes each have the same name but contain +different, though functionally identical, data. For example, +`/vol/tex' might be the name of a TeX distribution which varied for +each machine architecture. + + Amd provides facilities to take advantage of both replicated and +duplicated volumes. Configuration options allow a single set of +configuration data to be shared across an entire network by taking +advantage of replicated and duplicated volumes. + + Amd can take advantage of replacement volumes by mounting them as +required should an active fileserver become unavailable. + + +File: am-utils.info, Node: Volume Binding, Next: Operational Principles, Prev: Volume Naming, Up: Overview + +1.4 Volume Binding +================== + +Unix implements a namespace of hierarchically mounted filesystems. Two +forms of binding between names and files are provided. A "hard link" +completes the binding when the name is added to the filesystem. A +"soft link" delays the binding until the name is accessed. An +"automounter" adds a further form in which the binding of name to +filesystem is delayed until the name is accessed. + + The target volume, in its general form, is a tuple (host, filesystem, +sublink) which can be used to name the physical location of any volume +in the network. + + When a target is referenced, Amd ignores the sublink element and +determines whether the required filesystem is already mounted. This is +done by computing the local mount point for the filesystem and checking +for an existing filesystem mounted at the same place. If such a +filesystem already exists then it is assumed to be functionally +identical to the target filesystem. By default there is a one-to-one +mapping between the pair (host, filesystem) and the local mount point so +this assumption is valid. + + +File: am-utils.info, Node: Operational Principles, Next: Mounting a Volume, Prev: Volume Binding, Up: Overview + +1.5 Operational Principles +========================== + +Amd operates by introducing new mount points into the namespace. These +are called "automount" points. The kernel sees these automount points +as NFS filesystems being served by Amd. Having attached itself to the +namespace, Amd is now able to control the view the rest of the system +has of those mount points. RPC calls are received from the kernel one +at a time. + + When a "lookup" call is received Amd checks whether the name is +already known. If it is not, the required volume is mounted. A +symbolic link pointing to the volume root is then returned. Once the +symbolic link is returned, the kernel will send all other requests +direct to the mounted filesystem. + + If a volume is not yet mounted, Amd consults a configuration +"mount-map" corresponding to the automount point. Amd then makes a +runtime decision on what and where to mount a filesystem based on the +information obtained from the map. + + Amd does not implement all the NFS requests; only those relevant to +name binding such as "lookup", "readlink" and "readdir". Some other +calls are also implemented but most simply return an error code; for +example "mkdir" always returns "read-only filesystem". + + +File: am-utils.info, Node: Mounting a Volume, Next: Automatic Unmounting, Prev: Operational Principles, Up: Overview + +1.6 Mounting a Volume +===================== + +Each automount point has a corresponding mount map. The mount map +contains a list of key-value pairs. The key is the name of the volume +to be mounted. The value is a list of locations describing where the +filesystem is stored in the network. In the source for the map the +value would look like + + location1 location2 ... locationN + + Amd examines each location in turn. Each location may contain +"selectors" which control whether Amd can use that location. For +example, the location may be restricted to use by certain hosts. Those +locations which cannot be used are ignored. + + Amd attempts to mount the filesystem described by each remaining +location until a mount succeeds or Amd can no longer proceed. The +latter can occur in three ways: + + * If none of the locations could be used, or if all of the locations + caused an error, then the last error is returned. + + * If a location could be used but was being mounted in the + background then Amd marks that mount as being "in progress" and + continues with the next request; no reply is sent to the kernel. + + * Lastly, one or more of the mounts may have been "deferred". A + mount is deferred if extra information is required before the + mount can proceed. When the information becomes available the + mount will take place, but in the mean time no reply is sent to + the kernel. If the mount is deferred, Amd continues to try any + remaining locations. + + Once a volume has been mounted, Amd establishes a "volume mapping" +which is used to satisfy subsequent requests. + + +File: am-utils.info, Node: Automatic Unmounting, Next: Keep-alives, Prev: Mounting a Volume, Up: Overview + +1.7 Automatic Unmounting +======================== + +To avoid an ever increasing number of filesystem mounts, Amd removes +volume mappings which have not been used recently. A time-to-live +interval is associated with each mapping and when that expires the +mapping is removed. When the last reference to a filesystem is removed, +that filesystem is unmounted. If the unmount fails, for example the +filesystem is still busy, the mapping is re-instated and its +time-to-live interval is extended. The global default for this grace +period is controlled by the `-w' command-line option (*note -w: -w +Option.) or the amd.conf parameter `dismount_interval' (*note +dismount_interval Parameter::). It is also possible to set this value +on a per-mount basis (*note opts: opts Option.). + + Filesystems can be forcefully timed out using the Amq command. +*Note Run-time Administration::. Note that on new enough systems that +support forced unmounts, such as Linux, Amd can try to use the +umount2(2) system call to force the unmount, if the regular umount(2) +system call failed in a way that indicates that the mount point is hung +or stale. *Note forced_unmounts Parameter::. + + +File: am-utils.info, Node: Keep-alives, Next: Non-blocking Operation, Prev: Automatic Unmounting, Up: Overview + +1.8 Keep-alives +=============== + +Use of some filesystem types requires the presence of a server on +another machine. If a machine crashes then it is of no concern to +processes on that machine that the filesystem is unavailable. However, +to processes on a remote host using that machine as a fileserver this +event is important. This situation is most widely recognized when an +NFS server crashes and the behavior observed on client machines is that +more and more processes hang. In order to provide the possibility of +recovery, Amd implements a "keep-alive" interval timer for some +filesystem types. Currently only NFS makes use of this service. + + The basis of the NFS keep-alive implementation is the observation +that most sites maintain replicated copies of common system data such as +manual pages, most or all programs, system source code and so on. If +one of those servers goes down it would be reasonable to mount one of +the others as a replacement. + + The first part of the process is to keep track of which fileservers +are up and which are down. Amd does this by sending RPC requests to the +servers' NFS `NullProc' and checking whether a reply is returned. +While the server state is uncertain the requests are re-transmitted at +three second intervals and if no reply is received after four attempts +the server is marked down. If a reply is received the fileserver is +marked up and stays in that state for 30 seconds at which time another +NFS ping is sent. This interval is configurable and can even be turned +off using the ping option. *Note opts Option::. + + Once a fileserver is marked down, requests continue to be sent every +30 seconds in order to determine when the fileserver comes back up. +During this time any reference through Amd to the filesystems on that +server fail with the error "Operation would block". If a replacement +volume is available then it will be mounted, otherwise the error is +returned to the user. + + Although this action does not protect user files, which are unique on +the network, or processes which do not access files via Amd or already +have open files on the hung filesystem, it can prevent most new +processes from hanging. + + +File: am-utils.info, Node: Non-blocking Operation, Prev: Keep-alives, Up: Overview + +1.9 Non-blocking Operation +========================== + +Since there is only one instance of Amd for each automount point, and +usually only one instance on each machine, it is important that it is +always available to service kernel calls. Amd goes to great lengths to +ensure that it does not block in a system call. As a last resort Amd +will fork before it attempts a system call that may block indefinitely, +such as mounting an NFS filesystem. Other tasks such as obtaining +filehandle information for an NFS filesystem, are done using a purpose +built non-blocking RPC library which is integrated with Amd's task +scheduler. This library is also used to implement NFS keep-alives +(*note Keep-alives::). + + Whenever a mount is deferred or backgrounded, Amd must wait for it +to complete before replying to the kernel. However, this would cause +Amd to block waiting for a reply to be constructed. Rather than do +this, Amd simply "drops" the call under the assumption that the kernel +RPC mechanism will automatically retry the request. + + +File: am-utils.info, Node: Supported Platforms, Next: Mount Maps, Prev: Overview, Up: Top + +2 Supported Platforms +********************* + +Am-utils has been ported to a wide variety of machines and operating +systems. Am-utils's code works for little-endian and big-endian +machines, as well as 32 bit and 64 bit architectures. Furthermore, when +Am-utils ports to an Operating System on one architecture, it is +generally readily portable to the same Operating System on all +platforms on which it is available. + + See the `INSTALL' in the distribution for more specific details on +building and/or configuring for some systems. + + +File: am-utils.info, Node: Mount Maps, Next: Amd Command Line Options, Prev: Supported Platforms, Up: Top + +3 Mount Maps +************ + +Amd has no built-in knowledge of machines or filesystems. External +"mount-maps" are used to provide the required information. +Specifically, Amd needs to know when and under what conditions it +should mount filesystems. + + The map entry corresponding to the requested name contains a list of +possible locations from which to resolve the request. Each location +specifies filesystem type, information required by that filesystem (for +example the block special device in the case of UFS), and some +information describing where to mount the filesystem (*note fs +Option::). A location may also contain "selectors" (*note Selectors::). + +* Menu: + +* Map Types:: +* Key Lookup:: +* Location Format:: + + +File: am-utils.info, Node: Map Types, Next: Key Lookup, Prev: Mount Maps, Up: Mount Maps + +3.1 Map Types +============= + +A mount-map provides the run-time configuration information to Amd. +Maps can be implemented in many ways. Some of the forms supported by +Amd are regular files, ndbm databases, NIS maps, the "Hesiod" name +server, and even the password file. + + A mount-map "name" is a sequence of characters. When an automount +point is created a handle on the mount-map is obtained. For each map +type configured, Amd attempts to reference the map of the appropriate +type. If a map is found, Amd notes the type for future use and deletes +the reference, for example closing any open file descriptors. The +available maps are configured when Amd is built and can be displayed by +running the command `amd -v'. + + When using an Amd configuration file (*note Amd Configuration File::) +and the keyword `map_type' (*note map_type Parameter::), you may force +the map used to any type. + + By default, Amd caches data in a mode dependent on the type of map. +This is the same as specifying `cache:=mapdefault' and selects a +suitable default cache mode depending on the map type. The individual +defaults are described below. The CACHE option can be specified on +automount points to alter the caching behavior (*note Automount +Filesystem::). + + The following map types have been implemented, though some are not +available on all machines. Run the command `amd -v' to obtain a list +of map types configured on your machine. + +* Menu: + +* File maps:: +* ndbm maps:: +* NIS maps:: +* NIS+ maps:: +* Hesiod maps:: +* Password maps:: +* Union maps:: +* LDAP maps:: +* Executable maps:: + + +File: am-utils.info, Node: File maps, Next: ndbm maps, Prev: Map Types, Up: Map Types + +3.1.1 File maps +--------------- + +When Amd searches a file for a map entry it does a simple scan of the +file and supports both comments and continuation lines. + + Continuation lines are indicated by a backslash character (`\') as +the last character of a line in the file. The backslash, newline +character _and any leading white space on the following line_ are +discarded. A maximum line length of 2047 characters is enforced after +continuation lines are read but before comments are stripped. Each +line must end with a newline character; that is newlines are +terminators, not separators. The following examples illustrate this: + + key valA valB; \ + valC + + specifies _three_ locations, and is identical to + + key valA valB; valC + + However, + + key valA valB;\ + valC + + specifies only _two_ locations, and is identical to + + key valA valB;valC + + After a complete line has been read from the file, including +continuations, Amd determines whether there is a comment on the line. +A comment begins with a hash ("`#'") character and continues to the end +of the line. There is no way to escape or change the comment lead-in +character. + + Note that continuation lines and comment support "only" apply to +file maps, or ndbm maps built with the `mk-amd-map' program. + + When caching is enabled, file maps have a default cache mode of +`all' (*note Automount Filesystem::). + + +File: am-utils.info, Node: ndbm maps, Next: NIS maps, Prev: File maps, Up: Map Types + +3.1.2 ndbm maps +--------------- + +An ndbm map may be used as a fast access form of a file map. The +program, `mk-amd-map', converts a normal map file into an ndbm database. +This program supports the same continuation and comment conventions that +are provided for file maps. Note that ndbm format files may _not_ be +sharable across machine architectures. The notion of speed generally +only applies to large maps; a small map, less than a single disk block, +is almost certainly better implemented as a file map. + + ndbm maps have a default cache mode of `all' (*note Automount +Filesystem::). + + +File: am-utils.info, Node: NIS maps, Next: NIS+ maps, Prev: ndbm maps, Up: Map Types + +3.1.3 NIS maps +-------------- + +When using NIS (formerly YP), an Amd map is implemented directly by the +underlying NIS map. Comments and continuation lines are _not_ +supported in the automounter and must be stripped when constructing the +NIS server's database. + + NIS maps have a default cache mode of `all' (*note Automount +Filesystem::). + + The following rule illustrates what could be added to your NIS +`Makefile', in this case causing the `amd.home' map to be rebuilt: + $(YPTSDIR)/amd.home.time: $(ETCDIR)/amd.home + -@sed -e "s/#.*$$//" -e "/^$$/d" $(ETCDIR)/amd.home | \ + awk '{ \ + for (i = 1; i <= NF; i++) \ + if (i == NF) { \ + if (substr($$i, length($$i), 1) == "\\") \ + printf("%s", substr($$i, 1, length($$i) - 1)); \ + else \ + printf("%s\n", $$i); \ + } \ + else \ + printf("%s ", $$i); \ + }' | \ + $(MAKEDBM) - $(YPDBDIR)/amd.home; \ + touch $(YPTSDIR)/amd.home.time; \ + echo "updated amd.home"; \ + if [ ! $(NOPUSH) ]; then \ + $(YPPUSH) amd.home; \ + echo "pushed amd.home"; \ + else \ + : ; \ + fi + + Here `$(YPTSDIR)' contains the time stamp files, and `$(YPDBDIR)' +contains the dbm format NIS files. + + +File: am-utils.info, Node: NIS+ maps, Next: Hesiod maps, Prev: NIS maps, Up: Map Types + +3.1.4 NIS+ maps +--------------- + +NIS+ maps do not support cache mode `all' and, when caching is enabled, +have a default cache mode of `inc'. + + XXX: FILL IN WITH AN EXAMPLE. + + +File: am-utils.info, Node: Hesiod maps, Next: Password maps, Prev: NIS+ maps, Up: Map Types + +3.1.5 Hesiod maps +----------------- + +When the map name begins with the string `hesiod.' lookups are made +using the "Hesiod" name server. The string following the dot is used +as a name qualifier and is prepended with the key being located. The +entire string is then resolved in the `automount' context, or the +amd.conf parameter `hesiod_base' (*note hesiod_base Parameter::). For +example, if the key is `jsp' and map name is `hesiod.homes' then +"Hesiod" is asked to resolve `jsp.homes.automount'. + + Hesiod maps do not support cache mode `all' and, when caching is +enabled, have a default cache mode of `inc' (*note Automount +Filesystem::). + + The following is an example of a "Hesiod" map entry: + + jsp.homes.automount HS TXT "rfs:=/home/charm;rhost:=charm;sublink:=jsp" + njw.homes.automount HS TXT "rfs:=/home/dylan/dk2;rhost:=dylan;sublink:=njw" + + +File: am-utils.info, Node: Password maps, Next: Union maps, Prev: Hesiod maps, Up: Map Types + +3.1.6 Password maps +------------------- + +The password map support is unlike the four previous map types. When +the map name is the string `/etc/passwd' Amd can lookup a user name in +the password file and re-arrange the home directory field to produce a +usable map entry. + + Amd assumes the home directory has the format +`/anydir/dom1/../domN/login'. It breaks this string into a map entry +where `${rfs}' has the value `/anydir/domN', `${rhost}' has the value +`domN.....dom1', and `${sublink}' has the value login. + + Thus if the password file entry was + + /home/achilles/jsp + + the map entry used by Amd would be + + rfs:=/home/achilles;rhost:=achilles;sublink:=jsp + + Similarly, if the password file entry was + + /home/cc/sugar/mjh + + the map entry used by Amd would be + + rfs:=/home/sugar;rhost:=sugar.cc;sublink:=mhj + + +File: am-utils.info, Node: Union maps, Next: LDAP maps, Prev: Password maps, Up: Map Types + +3.1.7 Union maps +---------------- + +The union map support is provided specifically for use with the union +filesystem, *note Union Filesystem::. + + It is identified by the string `union:' which is followed by a colon +separated list of directories. The directories are read in order, and +the names of all entries are recorded in the map cache. Later +directories take precedence over earlier ones. The union filesystem +type then uses the map cache to determine the union of the names in all +the directories. + + +File: am-utils.info, Node: LDAP maps, Next: Executable maps, Prev: Union maps, Up: Map Types + +3.1.8 LDAP maps +--------------- + +LDAP (Lightweight Directory Access Protocol) maps do not support cache +mode `all' and, when caching is enabled, have a default cache mode of +`inc'. + + For example, an Amd map `amd.home' that looks as follows: + + /defaults opts:=rw,intr;type:=link + + zing -rhost:=shekel \ + host==shekel \ + host!=shekel;type:=nfs + when converted to LDAP (*note amd2ldif::), will result in the +following LDAP database: + $ amd2ldif amd.home CUCS < amd.home + dn: cn=amdmap timestamp, CUCS + cn : amdmap timestamp + objectClass : amdmapTimestamp + amdmapTimestamp: 873071363 + + dn: cn=amdmap amd.home[/defaults], CUCS + cn : amdmap amd.home[/defaults] + objectClass : amdmap + amdmapName : amd.home + amdmapKey : /defaults + amdmapValue : opts:=rw,intr;type:=link + + dn: cn=amdmap amd.home[], CUCS + cn : amdmap amd.home[] + objectClass : amdmap + amdmapName : amd.home + amdmapKey : + amdmapValue : + + dn: cn=amdmap amd.home[zing], CUCS + cn : amdmap amd.home[zing] + objectClass : amdmap + amdmapName : amd.home + amdmapKey : zing + amdmapValue : -rhost:=shekel host==shekel host!=shekel;type:=nfs + + +File: am-utils.info, Node: Executable maps, Prev: LDAP maps, Up: Map Types + +3.1.9 Executable maps +--------------------- + +An executable map is a dynamic map in which the keys and values for the +maps are generated on the fly by a program or script. The program is +expected to take a single parameter argument which is the key to +lookup. If the key is found, the program should print on stdout the +key-value pair that were found; if the key was not found, nothing +should be printed out. Below is an sample of such a map script: + + #!/bin/sh + # executable map example + case "$1" in + "/defaults" ) + echo "/defaults type:=nfs;rfs:=filer" + ;; + "a" ) + echo "a type:=nfs;fs:=/tmp" + ;; + "b" ) + echo "b type:=link;fs:=/usr/local" + ;; + * ) # no match, echo nothing + ;; + esac + + *Note exec_map_timeout Parameter::. + + +File: am-utils.info, Node: Key Lookup, Next: Location Format, Prev: Map Types, Up: Mount Maps + +3.2 How keys are looked up +========================== + +The key is located in the map whose type was determined when the +automount point was first created. In general the key is a pathname +component. In some circumstances this may be modified by variable +expansion (*note Variable Expansion::) and prefixing. If the automount +point has a prefix, specified by the PREF option, then that is +prepended to the search key before the map is searched. + + If the map cache is a `regexp' cache then the key is treated as an +egrep-style regular expression, otherwise a normal string comparison is +made. + + If the key cannot be found then a "wildcard" match is attempted. +Amd repeatedly strips the basename from the key, appends `/*' and +attempts a lookup. Finally, Amd attempts to locate the special key `*'. + + For example, the following sequence would be checked if +`home/dylan/dk2' was being located: + + home/dylan/dk2 + home/dylan/* + home/* + * + + At any point when a wildcard is found, Amd proceeds as if an exact +match had been found and the value field is then used to resolve the +mount request, otherwise an error code is propagated back to the kernel. +(*note Filesystem Types::). + + +File: am-utils.info, Node: Location Format, Prev: Key Lookup, Up: Mount Maps + +3.3 Location Format +=================== + +The value field from the lookup provides the information required to +mount a filesystem. The information is parsed according to the syntax +shown below. + + location-list: + location-selection + location-list white-space || white-space location-selection + location-selection: + location + location-selection white-space location + location: + location-info + -location-info + - + location-info: + sel-or-opt + location-info;sel-or-opt + ; + sel-or-opt: + selection + opt-ass + selection: + selector==value + selector!=value + opt-ass: + option:=value + white-space: + space + tab + + Note that unquoted whitespace is not allowed in a location +description. White space is only allowed, and is mandatory, where +shown with non-terminal white-space. + + A "location-selection" is a list of possible volumes with which to +satisfy the request. Each "location-selection" is tried sequentially, +until either one succeeds or all fail. This, by the way, is different +from the historically documented behavior, which claimed (falsely, at +least for last 3 years) that Amd would attempt to mount all +"location-selection"s in parallel and the first one to succeed would be +used. + + "location-selection"s are optionally separated by the `||' operator. +The effect of this operator is to prevent use of location-selections +to its right if any of the location-selections on its left were +selected, whether or not any of them were successfully mounted (*note +Selectors::). + + The location-selection, and singleton "location-list", +`type:=ufs;dev:=/dev/xd1g' would inform Amd to mount a UFS filesystem +from the block special device `/dev/xd1g'. + + The "sel-or-opt" component is either the name of an option required +by a specific filesystem, or it is the name of a built-in, predefined +selector such as the architecture type. The value may be quoted with +double quotes `"', for example `type:="ufs";dev:="/dev/xd1g"'. These +quotes are stripped when the value is parsed and there is no way to get +a double quote into a value field. Double quotes are used to get white +space into a value field, which is needed for the program filesystem +(*note Program Filesystem::). + +* Menu: + +* Map Defaults:: +* Variable Expansion:: +* Selectors:: +* Map Options:: + + +File: am-utils.info, Node: Map Defaults, Next: Variable Expansion, Prev: Location Format, Up: Location Format + +3.3.1 Map Defaults +------------------ + +A location beginning with a dash `-' is used to specify default values +for subsequent locations. Any previously specified defaults in the +location-list are discarded. The default string can be empty in which +case no defaults apply. + + The location `-fs:=/mnt;opts:=ro' would set the local mount point to +`/mnt' and cause mounts to be read-only by default. Defaults specified +this way are appended to, and so override, any global map defaults +given with `/defaults'). + + +File: am-utils.info, Node: Variable Expansion, Next: Selectors, Prev: Map Defaults, Up: Location Format + +3.3.2 Variable Expansion +------------------------ + +To allow generic location specifications Amd does variable expansion on +each location and also on some of the option strings. Any option or +selector appearing in the form `$"var"' is replaced by the current +value of that option or selector. For example, if the value of +`${key}' was `bin', `${autodir}' was `/a' and `${fs}' was +`${autodir}/local/${key}' then after expansion `${fs}' would have the +value `/a/local/bin'. Any environment variable can be accessed in a +similar way. + + Two pathname operators are available when expanding a variable. If +the variable name begins with `/' then only the last component of the +pathname is substituted. For example, if `${path}' was `/foo/bar' then +`${/path}' would be expanded to `bar'. Similarly, if the variable name +ends with `/' then all but the last component of the pathname is +substituted. In the previous example, `${path/}' would be expanded to +`/foo'. + + Two domain name operators are also provided. If the variable name +begins with `.' then only the domain part of the name is substituted. +For example, if `${rhost}' was `swan.doc.ic.ac.uk' then `${.rhost}' +would be expanded to `doc.ic.ac.uk'. Similarly, if the variable name +ends with `.' then only the host component is substituted. In the +previous example, `${rhost.}' would be expanded to `swan'. + + Variable expansion is a two phase process. Before a location is +parsed, all references to selectors, eg `${path}', are expanded. The +location is then parsed, selections are evaluated and option assignments +recorded. If there were no selections or they all succeeded the +location is used and the values of the following options are expanded in +the order given: SUBLINK, RFS, FS, OPTS, REMOPTS, MOUNT and UNMOUNT. + + Note that expansion of option values is done after "all" assignments +have been completed and not in a purely left to right order as is done +by the shell. This generally has the desired effect but care must be +taken if one of the options references another, in which case the +ordering can become significant. + + There are two special cases concerning variable expansion: + + 1. before a map is consulted, any selectors in the name received from + the kernel are expanded. For example, if the request from the + kernel was for `${arch}.bin' and the machine architecture was + `vax', the value given to `${key}' would be `vax.bin'. + + 2. the value of `${rhost}' is expanded and normalized before the + other options are expanded. The normalization process strips any + local sub-domain components. For example, if `${domain}' was + `Berkeley.EDU' and `${rhost}' was initially `snow.Berkeley.EDU', + after the normalization it would simply be `snow'. Hostname + normalization is currently done in a _case-dependent_ manner. + + +File: am-utils.info, Node: Selectors, Next: Map Options, Prev: Variable Expansion, Up: Location Format + +3.3.3 Selectors +--------------- + +Selectors are used to control the use of a location. It is possible to +share a mount map between many machines in such a way that filesystem +location, architecture and operating system differences are hidden from +the users. A selector of the form `arch==sun3;os==sunos4' would only +apply on Sun-3s running SunOS 4.x. + + Selectors can be negated by using `!=' instead of `=='. For example +to select a location on all non-Vax machines the selector `arch!=vax' +would be used. + + Selectors are evaluated left to right. If a selector fails then that +location is ignored. Thus the selectors form a conjunction and the +locations form a disjunction. If all the locations are ignored or +otherwise fail then Amd uses the "error" filesystem (*note Error +Filesystem::). This is equivalent to having a location `type:=error' +at the end of each mount-map entry. + + The default value of many of the selectors listed here can be +overridden by an Amd command line switch or in an Amd configuration +file. *Note Amd Configuration File::. + + The following selectors are currently implemented. + +* Menu: + +* arch Selector Variable:: +* autodir Selector Variable:: +* byte Selector Variable:: +* cluster Selector Variable:: +* domain Selector Variable:: +* dollar Selector Variable:: +* host Selector Variable:: +* hostd Selector Variable:: +* karch Selector Variable:: +* os Selector Variable:: +* osver Selector Variable:: +* full_os Selector Variable:: +* vendor Selector Variable:: + +* key Selector Variable:: +* map Selector Variable:: +* netnumber Selector Variable:: +* network Selector Variable:: +* path Selector Variable:: +* wire Selector Variable:: +* uid Selector Variable:: +* gid Selector Variable:: + +* exists Selector Function:: +* false Selector Function:: +* netgrp Selector Function:: +* netgrpd Selector Function:: +* in_network Selector Function:: +* true Selector Function:: +* xhost Selector Function:: + + +File: am-utils.info, Node: arch Selector Variable, Next: autodir Selector Variable, Prev: Selectors, Up: Selectors + +3.3.3.1 arch Selector Variable +.............................. + +The machine architecture which was automatically determined at compile +time. The architecture type can be displayed by running the command +`amd -v'. You can override this value also using the `-A' command line +option. *Note Supported Platforms::. + + +File: am-utils.info, Node: autodir Selector Variable, Next: byte Selector Variable, Prev: arch Selector Variable, Up: Selectors + +3.3.3.2 autodir Selector Variable +................................. + +The default directory under which to mount filesystems. This may be +changed by the `-a' command line option. *Note fs Option::. + + +File: am-utils.info, Node: byte Selector Variable, Next: cluster Selector Variable, Prev: autodir Selector Variable, Up: Selectors + +3.3.3.3 byte Selector Variable +.............................. + +The machine's byte ordering. This is either `little', indicating +little-endian, or `big', indicating big-endian. One possible use is to +share `rwho' databases (*note rwho servers::). Another is to share +ndbm databases, however this use can be considered a courageous +juggling act. + + +File: am-utils.info, Node: cluster Selector Variable, Next: domain Selector Variable, Prev: byte Selector Variable, Up: Selectors + +3.3.3.4 cluster Selector Variable +................................. + +This is provided as a hook for the name of the local cluster. This can +be used to decide which servers to use for copies of replicated +filesystems. `${cluster}' defaults to the value of `${domain}' unless +a different value is set with the `-C' command line option. + + +File: am-utils.info, Node: domain Selector Variable, Next: dollar Selector Variable, Prev: cluster Selector Variable, Up: Selectors + +3.3.3.5 domain Selector Variable +................................ + +The local domain name as specified by the `-d' command line option. +*Note host Selector Variable::. + + +File: am-utils.info, Node: dollar Selector Variable, Next: host Selector Variable, Prev: domain Selector Variable, Up: Selectors + +3.3.3.6 dollar Selector Variable +................................ + +This is a special variable, whose sole purpose is to produce a literal +dollar sign in the value of another variable. For example, if you have +a remote file system whose name is `/disk$s', you can mount it by +setting the remote file system variable as follows: + + rfs:=/disk${dollar}s + + +File: am-utils.info, Node: host Selector Variable, Next: hostd Selector Variable, Prev: dollar Selector Variable, Up: Selectors + +3.3.3.7 host Selector Variable +.............................. + +The local hostname as determined by gethostname(2). If no domain name +was specified on the command line and the hostname contains a period +`.' then the string before the period is used as the host name, and the +string after the period is assigned to `${domain}'. For example, if +the hostname is `styx.doc.ic.ac.uk' then `host' would be `styx' and +`domain' would be `doc.ic.ac.uk'. `hostd' would be `styx.doc.ic.ac.uk'. + + +File: am-utils.info, Node: hostd Selector Variable, Next: karch Selector Variable, Prev: host Selector Variable, Up: Selectors + +3.3.3.8 hostd Selector Variable +............................... + +This resolves to the `${host}' and `${domain}' concatenated with a `.' +inserted between them if required. If `${domain}' is an empty string +then `${host}' and `${hostd}' will be identical. + + +File: am-utils.info, Node: karch Selector Variable, Next: os Selector Variable, Prev: hostd Selector Variable, Up: Selectors + +3.3.3.9 karch Selector Variable +............................... + +This is provided as a hook for the kernel architecture. This is used on +SunOS 4 and SunOS 5, for example, to distinguish between different +`/usr/kvm' volumes. `${karch}' defaults to the "machine" value gotten +from uname(2). If the uname(2) system call is not available, the value +of `${karch}' defaults to that of `${arch}'. Finally, a different +value can be set with the `-k' command line option. + + +File: am-utils.info, Node: os Selector Variable, Next: osver Selector Variable, Prev: karch Selector Variable, Up: Selectors + +3.3.3.10 os Selector Variable +............................. + +The operating system. Like the machine architecture, this is +automatically determined at compile time. The operating system name can +be displayed by running the command `amd -v'. *Note Supported +Platforms::. + + +File: am-utils.info, Node: osver Selector Variable, Next: full_os Selector Variable, Prev: os Selector Variable, Up: Selectors + +3.3.3.11 osver Selector Variable +................................ + +The operating system version. Like the machine architecture, this is +automatically determined at compile time. The operating system name can +be displayed by running the command `amd -v'. *Note Supported +Platforms::. + + +File: am-utils.info, Node: full_os Selector Variable, Next: vendor Selector Variable, Prev: osver Selector Variable, Up: Selectors + +3.3.3.12 full_os Selector Variable +.................................. + +The full name of the operating system, including its version. This +value is automatically determined at compile time. The full operating +system name and version can be displayed by running the command `amd +-v'. *Note Supported Platforms::. + + +File: am-utils.info, Node: vendor Selector Variable, Next: key Selector Variable, Prev: full_os Selector Variable, Up: Selectors + +3.3.3.13 vendor Selector Variable +................................. + +The name of the vendor of the operating system. This value is +automatically determined at compile time. The name of the vendor can be +displayed by running the command `amd -v'. *Note Supported Platforms::. + + + + + The following selectors are also provided. Unlike the other +selectors, they vary for each lookup. Note that when the name from the +kernel is expanded prior to a map lookup, these selectors are all +defined as empty strings. + + +File: am-utils.info, Node: key Selector Variable, Next: map Selector Variable, Prev: vendor Selector Variable, Up: Selectors + +3.3.3.14 key Selector Variable +.............................. + +The name being resolved. For example, if `/home' is an automount +point, then accessing `/home/foo' would set `${key}' to the string +`foo'. The key is prefixed by the PREF option set in the parent mount +point. The default prefix is an empty string. If the prefix was +`blah/' then `${key}' would be set to `blah/foo'. + + +File: am-utils.info, Node: map Selector Variable, Next: netnumber Selector Variable, Prev: key Selector Variable, Up: Selectors + +3.3.3.15 map Selector Variable +.............................. + +The name of the mount map being used. + + +File: am-utils.info, Node: netnumber Selector Variable, Next: network Selector Variable, Prev: map Selector Variable, Up: Selectors + +3.3.3.16 netnumber Selector Variable +.................................... + +This selector is identical to the `in_network' selector function, see +*Note in_network Selector Function::. It will match either the name or +number of any network interface on which this host is connected to. +The names and numbers of all attached interfaces are available from the +output of `amd -v'. + + +File: am-utils.info, Node: network Selector Variable, Next: path Selector Variable, Prev: netnumber Selector Variable, Up: Selectors + +3.3.3.17 network Selector Variable +.................................. + +This selector is identical to the `in_network' selector function, see +*Note in_network Selector Function::. It will match either the name or +number of any network interface on which this host is connected to. +The names and numbers of all attached interfaces are available from the +output of `amd -v'. + + +File: am-utils.info, Node: path Selector Variable, Next: wire Selector Variable, Prev: network Selector Variable, Up: Selectors + +3.3.3.18 path Selector Variable +............................... + +The full pathname of the name being resolved. For example `/home/foo' +in the example above. + + +File: am-utils.info, Node: wire Selector Variable, Next: uid Selector Variable, Prev: path Selector Variable, Up: Selectors + +3.3.3.19 wire Selector Variable +............................... + +This selector is identical to the `in_network' selector function, see +*Note in_network Selector Function::. It will match either the name or +number of any network interface on which this host is connected to. +The names and numbers of all attached interfaces are available from the +output of `amd -v'. + + +File: am-utils.info, Node: uid Selector Variable, Next: gid Selector Variable, Prev: wire Selector Variable, Up: Selectors + +3.3.3.20 uid Selector Variable +.............................. + +This selector provides the numeric effective user ID (UID) of the user +which last accessed an automounted path name. This simple example shows +how floppy mounting can be assigned only to machine owners: + + floppy -type:=pcfs \ + uid==2301;host==shekel;dev:=/dev/floppy \ + uid==6712;host==titan;dev=/dev/fd0 \ + uid==0;dev:=/dev/fd0c \ + type:=error + + The example allows two machine owners to mount floppies on their +designated workstations, allows the root user to mount on any host, and +otherwise forces an error. + + +File: am-utils.info, Node: gid Selector Variable, Next: exists Selector Function, Prev: uid Selector Variable, Up: Selectors + +3.3.3.21 gid Selector Variable +.............................. + +This selector provides the numeric effective group ID (GID) of the user +which last accessed an automounted path name. + + + + The following boolean functions are selectors which take an argument +ARG. They return a value of true or false, and thus do not need to be +compared with a value. Each of these may be negated by prepending `!' +to their name. + + +File: am-utils.info, Node: exists Selector Function, Next: false Selector Function, Prev: gid Selector Variable, Up: Selectors + +3.3.3.22 exists Selector Function +................................. + +If the file listed by ARG exists (via lstat(2)), this function +evaluates to true. Otherwise it evaluates to false. + + +File: am-utils.info, Node: false Selector Function, Next: netgrp Selector Function, Prev: exists Selector Function, Up: Selectors + +3.3.3.23 false Selector Function +................................ + +Always evaluates to false. ARG is ignored. + + +File: am-utils.info, Node: netgrp Selector Function, Next: netgrpd Selector Function, Prev: false Selector Function, Up: Selectors + +3.3.3.24 netgrp Selector Function +................................. + +The argument ARG of this selector is a netgroup name followed +optionally by a comma and a host name. If the host name is not +specified, it defaults to `${host}'. If the host name (short name) is +a member of the netgroup, this selector evaluates to true. Otherwise +it evaluates to false. + + For example, suppose you have a netgroup `ppp-hosts', and for +reasons of performance, these have a local `/home' partition, while all +other clients on the faster network can access a shared home directory. +A common map to use for both might look like the following: + + home/* netgrp(ppp-hosts);type:=link;fs:=/local/${key} \ + !netgrp(ppp-hosts);type:=nfs;rhost:=serv1;rfs:=/remote/${key} + + A more complex example that takes advantage of the two argument +netgrp mount selector is given in the following scenario. Suppose one +wants to mount the local scratch space from a each host under +`scratch/<hostname>' and some hosts have their scratch space in a +different path than others. Hosts in the netgroup `apple-hosts' have +their scratch space in the `/apple' path, where hosts in the netgroup +`cherry-hosts' have their scratch space in the `/cherry' path. For +hosts that are neither in the `apple-hosts' or `cherry-hosts' netgroups +we want to make a symlink pointing to nowhere but provide a descriptive +error message in the link destination: + + scratch/* netgrp(apple-hosts,${/key});type:=nfs;rhost:=${/key};\ + rfs:="/apple" \ + netgrp(cherry-hosts,${/key});type:=nfs;rhost:=${/key};\ + rfs:="/cherry" \ + type:=link;rfs:="no local partition for ${/key}" + + +File: am-utils.info, Node: netgrpd Selector Function, Next: in_network Selector Function, Prev: netgrp Selector Function, Up: Selectors + +3.3.3.25 netgrpd Selector Function +.................................. + +The argument ARG of this selector is a netgroup name followed +optionally by a comma and a host name. If the host name is not +specified, it defaults to `${hostd}'. If the host name +(fully-qualified name) is a member of the netgroup, this selector +evaluates to true. Otherwise it evaluates to false. + + The `netgrpd' function uses fully-qualified host names to match +netgroup names, while the `netgrp' function (*note netgrp Selector +Function::) uses short host names. + + +File: am-utils.info, Node: in_network Selector Function, Next: true Selector Function, Prev: netgrpd Selector Function, Up: Selectors + +3.3.3.26 in_network Selector Function +..................................... + +This selector matches against any network name or number with an +optional netmask. First, if the current host has any network interface +that is locally attached to the network specified in ARG (either via +name or number), this selector evaluates to true. + + Second, `in_network' supports a network/netmask syntax such as +`128.59.16.0/255.255.255.0', `128.59.16.0/24', +`128.59.16.0/0xffffff00', or `128.59.16.0/'. Using the last form, Amd +will match the specified network number against the default netmasks of +each of the locally attached interfaces. + + If the selector does not match, it evaluates to false. + + For example, suppose you have two servers that have an exportable +`/opt' that smaller clients can NFS mount. The two servers are say, +`serv1' on network `foo-net.site.com' and `serv2' on network +`123.4.5.0'. You can write a map to be used by all clients that will +attempt to mount the closest one as follows: + + opt in_network(foo-net.site.com);rhost:=serv1;rfs:=/opt \ + in_network(123.4.5.0);rhost:=serv2;rfs:=/opt \ + rhost:=fallback-server + + +File: am-utils.info, Node: true Selector Function, Next: xhost Selector Function, Prev: in_network Selector Function, Up: Selectors + +3.3.3.27 true Selector Function +............................... + +Always evaluates to true. ARG is ignored. + + +File: am-utils.info, Node: xhost Selector Function, Prev: true Selector Function, Up: Selectors + +3.3.3.28 xhost Selector Function +................................ + +This function compares ARG against the current hostname, similarly to +the *Note host Selector Variable::. However, this function will also +match if ARG is a CNAME (DNS Canonical Name, or alias) for the current +host's name. + + +File: am-utils.info, Node: Map Options, Prev: Selectors, Up: Location Format + +3.3.4 Map Options +----------------- + +Options are parsed concurrently with selectors. The difference is that +when an option is seen the string following the `:=' is recorded for +later use. As a minimum the TYPE option must be specified. Each +filesystem type has other options which must also be specified. *Note +Filesystem Types::, for details on the filesystem specific options. + + Superfluous option specifications are ignored and are not reported +as errors. + + The following options apply to more than one filesystem type. + +* Menu: + +* addopts Option:: +* delay Option:: +* fs Option:: +* opts Option:: +* remopts Option:: +* sublink Option:: +* type Option:: + + +File: am-utils.info, Node: addopts Option, Next: delay Option, Prev: Map Options, Up: Map Options + +3.3.4.1 addopts Option +...................... + +This option adds additional options to default options normally +specified in the `/defaults' entry or the defaults of the key entry +being processed (*note opts Option::). Normally when you specify +`opts' in both the `/defaults' and the map entry, the latter overrides +the former completely. But with `addopts' it will append the options +and override any conflicting ones. + + `addopts' also overrides the value of the `remopts' option (*note +remopts Option::), which unless specified defaults to the value of +`opts'. + + Options which start with `no' will override those with the same name +that do not start with `no' and vice verse. Special handling is given +to inverted options such as `soft' and `hard', `bg' and `fg', `ro' and +`rw', etc. + + For example, if the default options specified were + opts:=rw,nosuid,intr,rsize=1024,wsize=1024,quota,posix + + and the ones specified in a map entry were + + addopts:=grpid,suid,ro,rsize=2048,quota,nointr + + then the actual options used would be + + wsize=1024,posix,grpid,suid,ro,rsize=2048,quota,nointr + + +File: am-utils.info, Node: delay Option, Next: fs Option, Prev: addopts Option, Up: Map Options + +3.3.4.2 delay Option +.................... + +The delay, in seconds, before an attempt will be made to mount from the +current location. Auxiliary data, such as network address, file handles +and so on are computed regardless of this value. + + A delay can be used to implement the notion of primary and secondary +file servers. The secondary servers would have a delay of a few +seconds, thus giving the primary servers a chance to respond first. + + +File: am-utils.info, Node: fs Option, Next: opts Option, Prev: delay Option, Up: Map Options + +3.3.4.3 fs Option +................. + +The local mount point. The semantics of this option vary between +filesystems. + + For NFS and UFS filesystems the value of `${fs}' is used as the +local mount point. For other filesystem types it has other meanings +which are described in the section describing the respective filesystem +type. It is important that this string uniquely identifies the +filesystem being mounted. To satisfy this requirement, it should +contain the name of the host on which the filesystem is resident and the +pathname of the filesystem on the local or remote host. + + The reason for requiring the hostname is clear if replicated +filesystems are considered. If a fileserver goes down and a +replacement filesystem is mounted then the "local" mount point "must" +be different from that of the filesystem which is hung. Some encoding +of the filesystem name is required if more than one filesystem is to be +mounted from any given host. + + If the hostname is first in the path then all mounts from a +particular host will be gathered below a single directory. If that +server goes down then the hung mount points are less likely to be +accidentally referenced, for example when getcwd(3) traverses the +namespace to find the pathname of the current directory. + + The `fs' option defaults to `${autodir}/${rhost}${rfs}'. In +addition, `rhost' defaults to the local host name (`${host}') and `rfs' +defaults to the value of `${path}', which is the full path of the +requested file; `/home/foo' in the example above (*note Selectors::). +`${autodir}' defaults to `/a' but may be changed with the `-a' command +line option. Sun's automounter defaults to `/tmp_mnt'. Note that +there is no `/' between the `${rhost}' and `${rfs}' since `${rfs}' +begins with a `/'. + + +File: am-utils.info, Node: opts Option, Next: remopts Option, Prev: fs Option, Up: Map Options + +3.3.4.4 opts Option +................... + +The options to pass to the mount system call. A leading `-' is +silently ignored. The mount options supported generally correspond to +those used by mount(8) and are listed below. Some additional +pseudo-options are interpreted by Amd and are also listed. + + Unless specifically overridden, each of the system default mount +options applies. Any options not recognized are ignored. If no +options list is supplied the string `rw,defaults' is used and all the +system default mount options apply. Options which are not applicable +for a particular operating system are silently ignored. For example, +only 4.4BSD is known to implement the `compress' and `spongy' options. + +`acdirmax=N' + Set the maximum directory attribute cache timeout to N. + +`acdirmin=N' + Set the minimum directory attribute cache timeout to N. + +`acregmax=N' + Set the maximum file attribute cache timeout to N. + +`acregmin=N' + Set the minimum file attribute cache timeout to N. + +`actimeo=N' + Set the overall attribute cache timeout to N. + +`auto' +`ignore' + Ignore this mount by df(1). + +`cache' + Allow data to be cached from a remote server for this mount. + +`closesession' + For UDF mounts, close the session when unmounting. + +`compress' + Use NFS compression protocol. + +`defperm' + Ignore the permission mode bits, and default file permissions to + 0555, UID 0, and GID 0. Useful for CD-ROMs formatted as ISO-9660. + +`dev' + Allow local special devices on this filesystem. + +`dirmask=N' + For PCFS mounts, specify the maximum file permissions for + directories in the file system. See the `mask' option's + description for more details. The mask value of N can be + specified in decimal, octal, or hexadecimal. + +`dumbtimr' + Turn off the dynamic retransmit timeout estimator. This may be + useful for UDP mounts that exhibit high retry rates, since it is + possible that the dynamically estimated timeout interval is too + short. + +`extatt' + Enable extended attributes in ISO-9660 file systems. + +`fsid' + Set ID of filesystem. + +`gens' + Enable generations in ISO-9660 file systems. Generations allow + you to see all versions of a given file. + +`gmtoff=N' + For UDF mounts, set the time zone offset from UTC to N seconds, + with positive values indicating east of the Prime Meridian. If not + set, the user's current time zone will be used. + +`group=N' + For PCFS and UDF mounts, set the group of the files in the file + system to N (which can either be a group name or a GID number). + The default group is the group of the directory on which the file + system is being mounted. + +`grpid' + Use BSD directory group-id semantics. + +`int' +`intr' + Allow keyboard interrupts on hard mounts. + +`lock' + Use the NFS locking protocol (default) + +`longname' + For PCFS mounts, force Win95 long names. + +`mask=N' + For PCFS mounts, specify the maximum file permissions for files in + the file system. For example, a mask of 755 specifies that, by + default, the owner should have read, write, and execute + permissions for files, but others should only have read and + execute permissions. Only the nine low-order bits of mask are + used. The default mask is taken from the directory on which the + file system is being mounted. The mask value of N can be + specified in decimal, octal, or hexadecimal. + +`multi' + Perform multi-component lookup on files. + +`maxgroups' + Set the maximum number of groups to allow for this mount. + +`nfsv3' + Use NFS Version 3 for this mount. + +`noac' + Turn off the attribute cache. + +`noauto' + This option is used by the mount command in `/etc/fstab' or + `/etc/vfstab' and means not to mount this file system when mount -a + is used. + +`nocache' + Do not allow data to be cached from a remote server for this mount. + +`nocasetrans' + Don't do case translation. Useful for CD-ROMS formatted as + ISO-9660. + +`noconn' + Don't make a connection on datagram transports. + +`nocto' + No close-to-open consistency. + +`nodefperm' + Do not ignore the permission mode bits. Useful for CD-ROMS + formatted as ISO-9660. + +`nodev' +`nodevs' + Don't allow local special devices on this filesystem. + +`noexec' + Don't allow program execution. + +`noint' + Do not allow keyboard interrupts for this mount + +`nojoliet' + Turn off the Joliet extensions. Useful for CD-ROMS formatted as + ISO-9660. + +`nolock' + Do not use the NFS locking protocol + +`nomnttab' + This option is used internally to tell Amd that a Solaris 8 system + using mntfs is in use. + +`norrip' + Turn off using of the Rock Ridge Interchange Protocol (RRIP) + extensions to ISO-9660. + +`nosub' + Disallow mounts beneath this mount. + +`nosuid' + Don't allow set-uid or set-gid executables on this filesystem. + +`noversion' + Strip the extension `;#' from the version string of files recorded + on an ISO-9660 CD-ROM. + +`nowin95' + For PCFS mounts, completely ignore Win95 entries. + +`optionstr' + Under Solaris 8, provide the kernel a string of options to parse + and show as part of the special in-kernel mount file system. + +`overlay' + Overlay this mount on top of an existing mount, if any. + +`pgthresh=N' + Set the paging threshold to N kilobytes. + +`port=N' + Set the NFS port to N. + +`posix' + Turn on POSIX static pathconf for mounts. + +`private' + Use local locking instead of the NLM protocol, useful for IRIX 6 + only. + +`proplist' + Support property lists (ACLs) for this mount, useful primarily for + Tru64 UNIX. + +`proto=S' + Use transport protocol S for NFS (can be `"tcp"' or `"udp"'). + +`quota' + Enable quota checking on this mount. + +`rdonly' +`ro' + Mount this filesystem readonly. + +`resvport' + Use a reserved port (smaller than 1024) for remote NFS mounts. + Most systems assume that, but some allow for mounts to occur on + non-reserved ports. This causes problems when such a system + tries to NFS mount one that requires reserved ports. It is + recommended that this option always be on. + +`retrans=n' + The number of NFS retransmits made before a user error is + generated by a `soft' mounted filesystem, and before a `hard' + mounted filesystem reports `NFS server "yoyo" not responding still + trying'. + +`retry' + Set the NFS retry counter. + +`rrcaseins' + Enable the Rock Ridge Interchange Protocol (RRIP) case insensitive + extensions. Useful for CD-ROMS formatted as ISO-9660. + +`rrip' + Uses the Rock Ridge Interchange Protocol (RRIP) extensions to + ISO-9660. + +`rsize=N' + The NFS read packet size. You may need to set this if you are + using NFS/UDP through a gateway or a slow link. + +`rw' + Allow reads and writes on this filesystem. + +`sessionnr=N' + For multisession UDF mounts, use session number N when mounting. + +`shortname' + For PCFS mounts, force old DOS short names only. + +`soft' + Give up after "retrans" retransmissions. + +`spongy' + Like `soft' for status requests, and `hard' for data transfers. + +`suid' + Allow set-uid programs on this mount. + +`symttl' + Turn off the symbolic link cache time-to-live. + +`sync' + Perform synchronous filesystem operations on this mount. + +`tcp' + Use TCP/IP instead of UDP/IP, ignored if the NFS implementation + does not support TCP/IP mounts. + +`timeo=N' + The NFS timeout, in tenth-seconds, before a request is + retransmitted. + +`user=N' + For PCFS and UDF mounts, set the owner of the files in the file + system to N (which can either be a user name or a UID number). The + default owner is the owner of the directory on which the file + system is being mounted. + +`vers=N' + Use NFS protocol version number N (can be 2 or 3). + +`wsize=N' + The NFS write packet size. You may need to set this if you are + using NFS/UDP through a gateway or a slow link. + + + The following options are implemented by Amd, rather than being +passed to the kernel. + +`nounmount' + Configures the mount so that its time-to-live will never expire. + This is the default for non-network based filesystem types (such as + mounting local disks, floppies, and CD-ROMs). See also the related + unmount option. + +`ping=N' + The interval, in seconds, between keep-alive pings. When four + consecutive pings have failed the mount point is marked as hung. + This interval defaults to 30 seconds; if the ping interval is set + to zero, Amd will use the default 30-second interval. If the + interval is set to -1 (or any other negative value), no pings are + sent and the host is assumed to be always up, which can cause + unmounts to hang See the softlookup option for a better + alternative. Turning pings off can be useful in NFS-HA + (High-Availability) sites where the NFS service rarely goes down. + Setting the ping value to a large value can reduce the amount of + NFS_NULL chatter on your network considerably, especially in large + sites. + + Note that if you have multiple Amd entries using the same file + server, and each entry sets a different value of N, then each time + Amd mounts a new entry, the ping value will be re-evaluated (and + updated, turned off, or turned back on as needed). Finally, note + that NFS_NULL pings are sent for both UDP and TCP mounts, because + even a hung TCP mount can cause user processes to hang. + +`public' + Use WebNFS multi-component lookup on the public file handle + instead of the mount protocol to obtain NFS file handles, as + documented in the WebNFS Client Specification, RFC 2054. This + means that Amd will not attempt to contact the remote portmapper + or remote mountd daemon, and will only connect to the well-known + NFS port 2049 or the port specified with the port mount option, + thus making it easier to use NFS through a firewall. + +`retry=N' + The number of times to retry the mount system call. + +`softlookup' + Configures Amd's behavior with respect to already-mounted shares + from NFS fileservers that are unreachable. If softlookup is + specified, trying to access such a share will result in an error + (EIO, which is changed from the ENOENT 6.0 used to return). If it + is not specified, a regular symlink is provided and the access + will probably hang in the NFS filesystem. + + The default behavior depends on whether the mount is 'soft' or + 'hard'; softlookup can be used to change this default. This is + changed from 6.0 which always behaved as if softlookup was + specified. + +`unmount' + Configures the mount so that its time-to-live will indeed expire + (and thus may be automatically unmounted). This is also the + default for network-based filesystem types (e.g., NFS). This + option is useful for removable local media such as CD-ROMs, USB + drives, etc. so they can expire when not in use, and get unmounted + (such drives can get work out when they keep spinning). See also + the related nounmount option. + +`utimeout=N' + The interval, in seconds, that looked up and mounted map entries + are cached. After that period of time, Amd will attempt to unmount + the entries. If, however, the unmount fails (with EBUSY), then + Amd will extend the mount's time-to-live by the utimeout value + before the next unmount attempt is made. In fact the interval is + extended before the unmount is attempted, to avoid thrashing. The + default value is 120 seconds (two minutes) or as set by the `-w' + command line option. + +`xlatecookie' + Translate directory cookies between 32-long and 64-long lengths. + + + +File: am-utils.info, Node: remopts Option, Next: sublink Option, Prev: opts Option, Up: Map Options + +3.3.4.5 remopts Option +...................... + +This option has the same use as `${opts}' but applies only when the +remote host is on a non-local network. For example, when using NFS +across a gateway it is often necessary to use smaller values for the +data read and write sizes. This can simply be done by specifying the +small values in REMOPTS. When a non-local host is accessed, the +smaller sizes will automatically be used. + + Amd determines whether a host is local by examining the network +interface configuration at startup. Any interface changes made after +Amd has been started will not be noticed. The likely effect will be +that a host may incorrectly be declared non-local. + + Unless otherwise set, the value of `${remopts}' is the same as the +value of `${opts}'. + + +File: am-utils.info, Node: sublink Option, Next: type Option, Prev: remopts Option, Up: Map Options + +3.3.4.6 sublink Option +...................... + +The subdirectory within the mounted filesystem to which the reference +should point. This can be used to prevent duplicate mounts in cases +where multiple directories in the same mounted filesystem are used. + + +File: am-utils.info, Node: type Option, Prev: sublink Option, Up: Map Options + +3.3.4.7 type Option +................... + +The filesystem type to be used. *Note Filesystem Types::, for a full +description of each type. + + +File: am-utils.info, Node: Amd Command Line Options, Next: Filesystem Types, Prev: Mount Maps, Up: Top + +4 Amd Command Line Options +************************** + +Many of Amd's parameters can be set from the command line. The command +line is also used to specify automount points and maps. + + The general format of a command line is + + amd [options] [{ directory map-name [-map-options] } ...] + + For each directory and map-name given or specified in the `amd.conf' +file, Amd establishes an automount point. The "map-options" may be any +sequence of options or selectors--*note Location Format::. The +"map-options" apply only to Amd's mount point. + + `type:=toplvl;cache:=mapdefault;fs:=${map}' is the default value for +the map options. Default options for a map are read from a special +entry in the map whose key is the string `/defaults'. When default +options are given they are prepended to any options specified in the +mount-map locations as explained in *Note Map Defaults::. + + The "options" are any combination of those listed below. + + Once the command line has been parsed, the automount points are +mounted. The mount points are created if they do not already exist, in +which case they will be removed when Amd exits. Finally, Amd +disassociates itself from its controlling terminal and forks into the +background. + + Note: Even if Amd has been built with `-DDEBUG' (via `configure +--enable-debug'), it will still background itself and disassociate +itself from the controlling terminal. To use a debugger it is +necessary to specify `-D daemon' on the command line. However, even +with all of this, mounts and unmounts are performed in the background, +and Amd will always fork before doing them. Therefore, debugging what +happens closely during un/mounts is more challenging. + + _All_ of Amd's command options (save `-F' and `-T') can be specified +in the `amd.conf' file. *Note Amd Configuration File::. If Amd is +invoked without any command line options, it will default to using the +configuration file `/etc/amd.conf', if one exists. + +* Menu: + +* -a Option:: Automount directory. +* -c Option:: Cache timeout interval. +* -d Option:: Domain name. +* -k Option:: Kernel architecture. +* -l Option:: Log file. +* -n Option:: Hostname normalization. +* -o Option:: Operating system version. +* -p Option:: Output process id. +* -r Option:: Restart existing mounts. +* -t Option:: Kernel RPC timeout. +* -v Option:: Version information. +* -w Option:: Wait interval after failed unmount. +* -x Option:: Log options. +* -y Option:: NIS domain. +* -A Option:: Operating system Architecture. +* -C Option:: Cluster name. +* -D Option:: Debug flags. +* -F Option:: Amd configuration file. +* -H Option:: Show brief help. +* -O Option:: Operating system name. +* -S Option:: Lock executable pages in memory. +* -T Option:: Set tag for configuration file. + + +File: am-utils.info, Node: -a Option, Next: -c Option, Prev: Amd Command Line Options, Up: Amd Command Line Options + +4.1 `-a' DIRECTORY +================== + +Specifies the default mount directory. This option changes the variable +`${autodir}' which otherwise defaults to `/a'. For example, some sites +prefer `/amd' or `/n'. + + amd -a /amd ... + + +File: am-utils.info, Node: -c Option, Next: -d Option, Prev: -a Option, Up: Amd Command Line Options + +4.2 `-c' CACHE-INTERVAL +======================= + +Selects the period, in seconds, for which a name is cached by Amd. If +no reference is made to the volume in this period, Amd discards the +volume name to filesystem mapping. + + Once the last reference to a filesystem has been removed, Amd +attempts to unmount the filesystem. If the unmount fails the interval +is extended by a further period as specified by the `-w' command line +option or by the `utimeout' mount option. + + The default "cache-interval" is 300 seconds (five minutes). + + +File: am-utils.info, Node: -d Option, Next: -k Option, Prev: -c Option, Up: Amd Command Line Options + +4.3 `-d' DOMAIN +=============== + +Specifies the host's domain. This sets the internal variable +`${domain}' and affects the `${hostd}' variable. + + If this option is not specified and the hostname already contains the +local domain then that is used, otherwise the default value of +`${domain}' is `unknown.domain'. + + For example, if the local domain was `doc.ic.ac.uk', Amd could be +started as follows: + + amd -d doc.ic.ac.uk ... + + +File: am-utils.info, Node: -k Option, Next: -l Option, Prev: -d Option, Up: Amd Command Line Options + +4.4 `-k' KERNEL-ARCHITECTURE +============================ + +Specifies the kernel architecture of the system. This is usually the +output of `uname -m' (the "machine" value gotten from uname(2)). If +the uname(2) system call is not available, the value of `${karch}' +defaults to that of `${arch}'. + + The only effect of this option is to set the variable `${karch}'. + + This option would be used as follows: + + amd -k `arch -k` ... + + +File: am-utils.info, Node: -l Option, Next: -n Option, Prev: -k Option, Up: Amd Command Line Options + +4.5 `-l' LOG-OPTION +=================== + +Selects the form of logging to be made. Several special "log-options" +are recognized. + + 1. If "log-option" is the string `syslog', Amd will use the syslog(3) + mechanism. If your system supports syslog facilities, then the + default facility used is `LOG_DAEMON'. + + 2. When using syslog, if you wish to change the facility, append its + name to the log option name, delimited by a single colon. For + example, if "log-options" is the string `syslog:local7' then Amd + will log messages via syslog(3) using the `LOG_LOCAL7' facility. + If the facility name specified is not recognized, Amd will default + to `LOG_DAEMON'. Note: while you can use any syslog facility + available on your system, it is generally a bad idea to use those + reserved for other services such as `kern', `lpr', `cron', etc. + + 3. If "log-option" is the string `/dev/stderr', Amd will use standard + error, which is also the default target for log messages. To + implement this, Amd simulates the effect of the `/dev/fd' driver. + + Any other string is taken as a filename to use for logging. Log +messages are appended to the file if it already exists, otherwise a new +file is created. The file is opened once and then held open, rather +than being re-opened for each message. + + Normally, when long-running daemons hold an open file descriptor on a +log file, it is impossible to "rotate" the log file and compress older +logs on a daily basis. The daemon needs to be told to discard (via +close(2)) its file handle, and re-open the log file. This is done +using `amq -l' log-option. *Note Amq -l option::. + + If the `syslog' option is specified but the system does not support +syslog or if the named file cannot be opened or created, Amd will use +standard error. Error messages generated before Amd has finished +parsing the command line are printed on standard error. + + Since Amd tends to generate a lot of logging information (especially +if debugging was turned on), and due to it being an important program +running on the system, it is usually best to log to a separate disk +file. In that case Amd would be started as follows: + + amd -l /var/log/amd ... + + +File: am-utils.info, Node: -n Option, Next: -o Option, Prev: -l Option, Up: Amd Command Line Options + +4.6 `-n' +======== + +Normalizes the remote hostname before using it. Normalization is done +by replacing the value of `${rhost}' with the (generally fully +qualified) primary name returned by a hostname lookup. + + This option should be used if several names are used to refer to a +single host in a mount map. + + +File: am-utils.info, Node: -o Option, Next: -p Option, Prev: -n Option, Up: Amd Command Line Options + +4.7 `-o' OP-SYS-VER +=================== + +Overrides the compiled-in version number of the operating system, with +OP-SYS-VER. Useful when the built-in version is not desired for +backward compatibility reasons. For example, if the built-in version is +`2.5.1', you can override it to `5.5.1', and use older maps that were +written with the latter in mind. + + +File: am-utils.info, Node: -p Option, Next: -r Option, Prev: -o Option, Up: Amd Command Line Options + +4.8 `-p' +======== + +Causes Amd's process id to be printed on standard output. This can be +redirected to a suitable file for use with kill: + + amd -p > /var/run/amd.pid ... + + This option only has an affect if Amd is running in daemon mode. If +Amd is started with the `-D daemon' debug flag, this option is ignored. + + +File: am-utils.info, Node: -r Option, Next: -t Option, Prev: -p Option, Up: Amd Command Line Options + +4.9 `-r' +======== + +Tells Amd to restart existing mounts (*note Inheritance Filesystem::). + + +File: am-utils.info, Node: -t Option, Next: -v Option, Prev: -r Option, Up: Amd Command Line Options + +4.10 `-t' TIMEOUT.RETRANSMIT +============================ + +Specifies the RPC "timeout" interval and the "retransmit" counter used +by the kernel to communicate to Amd. These are used to set the `timeo' +and `retrans' mount options, respectively. The default timeout is 0.8 +seconds, and the default number of retransmissions is 11. + + Amd relies on the kernel RPC retransmit mechanism to trigger mount +retries. The values of these parameters change the overall retry +interval. Too long an interval gives poor interactive response; too +short an interval causes excessive retries. + + +File: am-utils.info, Node: -v Option, Next: -w Option, Prev: -t Option, Up: Amd Command Line Options + +4.11 `-v' +========= + +Print version information on standard error and then exit. The output +is of the form: + + Copyright (c) 1997-1999 Erez Zadok + Copyright (c) 1990 Jan-Simon Pendry + Copyright (c) 1990 Imperial College of Science, Technology & Medicine + Copyright (c) 1990 The Regents of the University of California. + am-utils version 6.0a15 (build 61). + Built by ezk@example.com on date Wed Oct 22 15:21:03 EDT 1997. + cpu=sparc (big-endian), arch=sun4, karch=sun4u. + full_os=solaris2.5.1, os=sos5, osver=5.5.1, vendor=sun. + Map support for: root, passwd, union, nisplus, nis, ndbm, file, error. + AMFS: nfs, link, nfsx, nfsl, host, linkx, program, union, inherit, + ufs, lofs, hsfs, pcfs, auto, direct, toplvl, error. + FS: autofs, cachefs, cdfs, lofs, nfs, nfs3, pcfs, tfs, tmpfs, udf, ufs. + Network 1: wire="mcl-lab-net.cs.columbia.edu" (netnumber=128.59.13). + Network 2: wire="14-net.cs.columbia.edu" (netnumber=128.59.14). + Network 3: wire="old-net.cs.columbia.edu" (netnumber=128.59.16). + + The information includes the version number, number of times Amd was +compiled on the local system, release date and name of the release. +Following come the cpu type, byte ordering, and the architecture and +kernel architecture as `${arch}' and `${karch}', respectively. The +next line lists the operating system full name, short name, version, +and vendor. These four values correspond to the variables +`${full_os}', `${os}', `${osver}', and `${vendor}', respectively. +*Note Supported Platforms::. + + Then come a list of map types supported, filesystems internally +supported by Amd (AMFS), and generic filesystems available (FS). +Finally all known networks (if any) of this host are listed by name and +number. They are available via the variables `${wire}' or +`${network}', and `${netnumber}' (*note Selectors::) or the `in_network' +selector function (*note in_network Selector Function::). + + +File: am-utils.info, Node: -w Option, Next: -x Option, Prev: -v Option, Up: Amd Command Line Options + +4.12 `-w' WAIT-TIMEOUT +====================== + +Selects the interval in seconds between unmount attempts after the +initial time-to-live has expired. + + This defaults to 120 seconds (two minutes). + + +File: am-utils.info, Node: -x Option, Next: -y Option, Prev: -w Option, Up: Amd Command Line Options + +4.13 `-x' OPTS +============== + +Specifies the type and verbosity of log messages. "opts" is a comma +separated list selected from the following options: + +`fatal' + Fatal errors (cannot be turned off) + +`error' + Non-fatal errors (cannot be turned off) + +`user' + Non-fatal user errors + +`warn' + Recoverable errors + +`warning' + Alias for `warn' + +`info' + Information messages + +`map' + Mount map usage + +`stats' + Additional statistics + +`all' + All of the above + +`defaults' + An alias for "fatal,error,user,warning,info". + + Initially a set of default logging flags is enabled. This is as if +`-x defaults' or `-x fatal,error,user,warning,info' had been selected. +The command line is parsed and logging is controlled by the `-x' +option. The very first set of logging flags is saved and can not be +subsequently disabled using Amq. This default set of options is useful +for general production use. + + The `info' messages include details of what is mounted and unmounted +and when filesystems have timed out. If you want to have the default +set of messages without the `info' messages then you simply need `-x +noinfo'. The messages given by `user' relate to errors in the mount +maps, so these are useful when new maps are installed. The following +table lists the syslog priorities used for each of the message types. + +`fatal' + `LOG_CRIT' + +`error' + `LOG_ERR' + +`user' + `LOG_WARNING' + +`warning' + `LOG_WARNING' + +`info' + `LOG_INFO' + +`debug' + `LOG_DEBUG' + +`map' + `LOG_DEBUG' + +`stats' + `LOG_INFO' + + The options can be prefixed by the string `no' to indicate that this +option should be turned off. For example, to obtain all but `info' +messages the option `-x all,noinfo' would be used. + + If Amd was built with debugging enabled the `debug' option is +automatically enabled regardless of the command line options. + + +File: am-utils.info, Node: -y Option, Next: -A Option, Prev: -x Option, Up: Amd Command Line Options + +4.14 `-y' NIS-DOMAIN +==================== + +Selects an alternate NIS domain. This is useful for debugging and +cross-domain shared mounting. If this flag is specified, Amd +immediately attempts to bind to a server for this domain. + + +File: am-utils.info, Node: -A Option, Next: -C Option, Prev: -y Option, Up: Amd Command Line Options + +4.15 `-A' ARCHITECTURE +====================== + +Specifies the OS architecture of the system. The only effect of this +option is to set the variable `${arch}'. + + This option would be used as follows: + + amd -A i386 ... + + +File: am-utils.info, Node: -C Option, Next: -D Option, Prev: -A Option, Up: Amd Command Line Options + +4.16 `-C' CLUSTER-NAME +====================== + +Specifies the name of the cluster of which the local machine is a +member. The only effect is to set the variable `${cluster}'. The +"cluster-name" is will usually obtained by running another command +which uses a database to map the local hostname into a cluster name. +`${cluster}' can then be used as a selector to restrict mounting of +replicated data. If this option is not given, `${cluster}' has the +same value as `${domain}'. This would be used as follows: + + amd -C `clustername` ... + + +File: am-utils.info, Node: -D Option, Next: -F Option, Prev: -C Option, Up: Amd Command Line Options + +4.17 `-D' OPTS +============== + +Controls the verbosity and coverage of the debugging trace; "opts" is a +comma separated list of debugging options. The `-D' option is only +available if Amd was compiled with `-DDEBUG', or configured with +`configure --enable-debug'. The memory debugging facilities (`mem') +are only available if Amd was compiled with `-DDEBUG_MEM' (in addition +to `-DDEBUG'), or configured with `configure --enable-debug=mem'. + + The most common options to use are `-D trace' and `-D test' (which +turns on all the useful debug options). As usual, every option can be +prefixed with `no' to turn it off. + +`all' + all options (excluding hrtime and mtab) + +`defaults' + "sensible" default options (all-excluding hrtime, mtab, and + xdrtrace) + +`test' + full debug options plus mtab,nodaemon,nofork,noamq + +`amq' + register Amd with the RPC portmapper, for Amq + +`daemon' + enter daemon mode + +`fork' + fork child worker (hlfsd only) + +`full' + program trace + +`hrtime' + print high resolution time stamps (only if syslog(3) is not used) + +`info' + info service specific debugging (hesiod, nis, etc.) In the case of + hesiod maps, turns on the hesiod RES_DEBUG internal debugging + option. + +`mem' + trace memory allocations. Needs to be explicitly enabled at + compile time with -enable-debug=mem. + +`mtab' + use local mount-table file (defaults to `/tmp/mtab', *note + debug_mtab_file Parameter::) + +`readdir' + show readdir progress + +`str' + debug string munging + +`trace' + trace RPC protocol and NFS mount arguments + +`xdrtrace' + trace XDR routines + + You may also refer to the program source for a more detailed +explanation of the available options. + + +File: am-utils.info, Node: -F Option, Next: -H Option, Prev: -D Option, Up: Amd Command Line Options + +4.18 `-F' CONF-FILE +=================== + +Specify an Amd configuration file CONF-FILE to use. For a description +of the format and syntax, *note Amd Configuration File::. This +configuration file is used to specify any options in lieu of typing +many of them on the command line. The `amd.conf' file includes +directives for every command line option Amd has, and many more that +are only available via the configuration file facility. The +configuration file specified by this option is processed after all other +options had been processed, regardless of the actual location of this +option on the command line. + + +File: am-utils.info, Node: -H Option, Next: -O Option, Prev: -F Option, Up: Amd Command Line Options + +4.19 `-H' +========= + +Print a brief help and usage string. + + +File: am-utils.info, Node: -O Option, Next: -S Option, Prev: -H Option, Up: Amd Command Line Options + +4.20 `-O' OP-SYS-NAME +===================== + +Overrides the compiled-in name of the operating system, with +OP-SYS-NAME. Useful when the built-in name is not desired for backward +compatibility reasons. For example, if the build in name is `sunos5', +you can override it to the old name `sos5', and use older maps which +were written with the latter in mind. + + +File: am-utils.info, Node: -S Option, Next: -T Option, Prev: -O Option, Up: Amd Command Line Options + +4.21 `-S' +========= + +Do _not_ lock the running executable pages of Amd into memory. To +improve Amd's performance, systems that support the plock(3) or +mlockall(2) call lock the Amd process into memory. This way there is +less chance the operating system will schedule, page out, and swap the +Amd process as needed. This tends to improve Amd's performance, at the +cost of reserving the memory used by the Amd process (making it +unavailable for other processes). If this behavior is not desired, use +the `-S' option. + + +File: am-utils.info, Node: -T Option, Prev: -S Option, Up: Amd Command Line Options + +4.22 `-T' TAG +============= + +Specify a tag to use with `amd.conf'. All map entries tagged with TAG +will be processed. Map entries that are not tagged are always +processed. Map entries that are tagged with a tag other than TAG will +not be processed. + + +File: am-utils.info, Node: Filesystem Types, Next: Amd Configuration File, Prev: Amd Command Line Options, Up: Top + +5 Filesystem Types +****************** + +To mount a volume, Amd must be told the type of filesystem to be used. +Each filesystem type typically requires additional information such as +the fileserver name for NFS. + + From the point of view of Amd, a "filesystem" is anything that can +resolve an incoming name lookup. An important feature is support for +multiple filesystem types. Some of these filesystems are implemented +in the local kernel and some on remote fileservers, whilst the others +are implemented internally by Amd. + + The two common filesystem types are UFS and NFS. Four other user +accessible filesystems (`link', `program', `auto' and `direct') are +also implemented internally by Amd and these are described below. +There are two additional filesystem types internal to Amd which are not +directly accessible to the user (`inherit' and `error'). Their use is +described since they may still have an effect visible to the user. + +* Menu: + +* Network Filesystem:: A single NFS filesystem. +* Network Host Filesystem:: NFS mount a host's entire export tree. +* Network Filesystem Group:: An atomic group of NFS filesystems. +* Unix Filesystem:: Native disk filesystem. +* Caching Filesystem:: Caching from remote server filesystem. +* CD-ROM Filesystem:: ISO9660 CD ROM. +* UDF Filesystem:: Universal Disk Format filesystem. +* Loopback Filesystem:: Local loopback-mount filesystem. +* Memory/RAM Filesystem:: A memory or RAM-based filesystem. +* Null Filesystem:: 4.4BSD's loopback-mount filesystem. +* Floppy Filesystem:: MS-DOS Floppy filesystem. +* Translucent Filesystem:: The directory merging filesystem. +* Shared Memory+Swap Filesystem:: Sun's tmpfs filesystem. +* User ID Mapping Filesystem:: 4.4BSD's umapfs filesystem. +* Program Filesystem:: Generic Program mounts. +* Symbolic Link Filesystem:: Local link. +* Symbolic Link Filesystem II:: Local link referencing existing filesystem. +* NFS-Link Filesystem:: Link if path exists, NFS otherwise. +* Automount Filesystem:: +* Direct Automount Filesystem:: +* Union Filesystem:: +* Error Filesystem:: +* Top-level Filesystem:: +* Root Filesystem:: +* Inheritance Filesystem:: + + +File: am-utils.info, Node: Network Filesystem, Next: Network Host Filesystem, Prev: Filesystem Types, Up: Filesystem Types + +5.1 Network Filesystem (`nfs') +============================== + +The "nfs" (`type:=nfs') filesystem type provides access to Sun's NFS. + +The following options must be specified: + +`rhost' + the remote fileserver. This must be an entry in the hosts + database. IP addresses are not accepted. The default value is + taken from the local host name (`${host}') if no other value is + specified. + +`rfs' + the remote filesystem. If no value is specified for this option, + an internal default of `${path}' is used. + + NFS mounts require a two stage process. First, the "file handle" of +the remote file system must be obtained from the server. Then a mount +system call must be done on the local system. Amd keeps a cache of +file handles for remote file systems. The cache entries have a +lifetime of a few minutes. + + If a required file handle is not in the cache, Amd sends a request +to the remote server to obtain it. + + Historically, this documentation has maintained that Amd will try +all the locations in parallel and use the first one which responds with +a valid file handle. This has not been the case for quite some time, +however. Instead, Amd will go through each location, one by one, and +will only skip to the next one if the previous one either fails or +times out. + +An NFS entry might be: + + jsp host!=charm;type:=nfs;rhost:=charm;rfs:=/home/charm;sublink:=jsp + + The mount system call and any unmount attempts are always done in a +new task to avoid the possibility of blocking Amd. + + +File: am-utils.info, Node: Network Host Filesystem, Next: Network Filesystem Group, Prev: Network Filesystem, Up: Filesystem Types + +5.2 Network Host Filesystem (`host') +==================================== + +The "host" (`type:=host') filesystem allows access to the entire export +tree of an NFS server. The implementation is layered above the `nfs' +implementation so keep-alives work in the same way. The only option +which needs to be specified is `rhost' which is the name of the +fileserver to mount. + + The `host' filesystem type works by querying the mount daemon on the +given fileserver to obtain its export list. Amd then obtains +filehandles for each of the exported filesystems. Any errors at this +stage cause that particular filesystem to be ignored. Finally each +filesystem is mounted. Again, errors are logged but ignored. One +common reason for mounts to fail is that the mount point does not exist. +Although Amd attempts to automatically create the mount point, it may +be on a remote filesystem to which Amd does not have write permission. + + When an attempt to unmount a `host' filesystem mount fails, Amd +remounts any filesystems which had successfully been unmounted. To do +this Amd queries the mount daemon again and obtains a fresh copy of the +export list. Amd then tries to mount any exported filesystems which +are not currently mounted. + + Sun's automounter provides a special `-hosts' map. To achieve the +same effect with Amd requires two steps. First a mount map must be +created as follows: + + * type:=host;rhost:=${key};fs:=${autodir}/${rhost}/root + +and then start Amd with the following command + + amd /net net.map + +where `net.map' is the name of map described above. Note that the +value of `${fs}' is overridden in the map. This is done to avoid a +clash between the mount tree and any other filesystem already mounted +from the same fileserver. + + If different mount options are needed for different hosts then +additional entries can be added to the map, for example + + host2 opts:=ro,nosuid,soft + +would soft mount `host2' read-only. + + +File: am-utils.info, Node: Network Filesystem Group, Next: Unix Filesystem, Prev: Network Host Filesystem, Up: Filesystem Types + +5.3 Network Filesystem Group (`nfsx') +===================================== + +The "nfsx" (`type:=nfsx') filesystem allows a group of filesystems to +be mounted from a single NFS server. The implementation is layered +above the `nfs' implementation so keep-alives work in the same way. + + _WARNING_: `nfsx' is meant to be a "last resort" kind of solution. +It is racy and poorly supported. The authors _highly_ recommend that +other solutions be considered before relying on it. + + The options are the same as for the `nfs' filesystem with one +difference for `rfs', as explained below. + +The following options should be specified: + +`rhost' + the remote fileserver. The default value is taken from the local + host name (`${host}') if no other value is specified. + +`rfs' + is a list of filesystems to mount, and must be specified. The + list is in the form of a comma separated strings. + +For example: + + pub type:=nfsx;rhost:=gould;\ + rfs:=/public,/,graphics,usenet;fs:=${autodir}/${rhost}/root + + The first string defines the root of the tree, and is applied as a +prefix to the remaining members of the list which define the individual +filesystems. The first string is _not_ used as a filesystem name. A +serial operation is used to determine the local mount points to ensure +a consistent layout of a tree of mounts. + + Here, the _three_ filesystems, `/public', `/public/graphics' and +`/public/usenet', would be mounted. + + A local mount point, `${fs}', _must_ be specified. The default +local mount point will not work correctly in the general case. A +suggestion is to use `fs:=${autodir}/${rhost}/root'. + + +File: am-utils.info, Node: Unix Filesystem, Next: Caching Filesystem, Prev: Network Filesystem Group, Up: Filesystem Types + +5.4 Unix Filesystem (`ufs', `xfs', or `efs') +============================================ + +The "ufs" (`type:=ufs') filesystem type provides access to the system's +standard disk filesystem--usually a derivative of the Berkeley Fast +Filesystem. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + A UFS entry might be: + + jsp host==charm;type:=ufs;dev:=/dev/sd0d;sublink:=jsp + + UFS is the default Unix disk-based file system, which Am-utils picks +up during the autoconfiguration phase. Some systems have more than one +type, such as IRIX, that comes with EFS (Extent File System) and XFS +(Extended File System). In those cases, you may explicitly set the file +system type, by using entries such: + + ez1 type:=efs;dev:=/dev/xd0a + ez2 type:=xfs;dev:=/dev/sd3c + + The UFS/XFS/EFS filesystems are never timed out by default, i.e. they +will never be unmounted by Amd. If automatic unmounting is desired, the +"unmount" option should be added to the mount options for the entry. + + +File: am-utils.info, Node: Caching Filesystem, Next: CD-ROM Filesystem, Prev: Unix Filesystem, Up: Filesystem Types + +5.5 Caching Filesystem (`cachefs') +================================== + +The "cachefs" (`type:=cachefs') filesystem caches files from one +location onto another, presumably providing faster access. It is +particularly useful to cache from a larger and remote (slower) NFS +partition to a smaller and local (faster) UFS directory. + +The following options must be specified: + +`cachedir' + the directory where the cache is stored. + +`rfs' + the path name to the "back file system" to be cached from. + +`fs' + the "front file system" mount point to the cached files, where Amd + will set a symbolic link pointing to. + + A CacheFS entry for, say, the `/import' Amd mount point, might be: + + copt type:=cachefs;cachedir:=/cache;rfs:=/import/opt;fs:=/n/import/copt + + Access to the pathname `/import/copt' will follow a symbolic link to +`/n/import/copt'. The latter is the mount point for a caching file +system, that caches from `/import/opt' to `/cache'. + + The cachefs filesystem is never timed out by default, i.e. it will +never be unmounted by Amd. If automatic unmounting is desired, the +"unmount" option should be added to the mount options for the entry. + + Caveats: + 1. This file system is currently only implemented for Solaris 2.x! + + 2. Before being used for the first time, the cache directory must be + initialized with `cfsadmin -c CACHEDIR'. See the manual page for + cfsadmin(1M) for more information. + + 3. The "back file system" mounted must be a complete file system, not + a subdirectory thereof; otherwise you will get an error "Invalid + Argument". + + 4. If Amd aborts abnormally, the state of the cache may be + inconsistent, requiring running the command `fsck -F cachefs + CACHEDIR'. Otherwise you will get the error "No Space Left on + Device". + + +File: am-utils.info, Node: CD-ROM Filesystem, Next: UDF Filesystem, Prev: Caching Filesystem, Up: Filesystem Types + +5.6 CD-ROM Filesystem (`cdfs') +============================== + +The "cdfs" (`type:=cdfs') filesystem mounts a CD-ROM with an ISO9660 +format filesystem on it. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + Some operating systems will fail to mount read-only CDs unless the +`ro' option is specified. A cdfs entry might be: + + cdfs os==sunos4;type:=cdfs;dev:=/dev/sr0 \ + os==sunos5;addopts:=ro;type:=cdfs;dev:=/dev/dsk/c0t6d0s2 + + +File: am-utils.info, Node: UDF Filesystem, Next: Loopback Filesystem, Prev: CD-ROM Filesystem, Up: Filesystem Types + +5.7 CD-ROM Filesystem (`udf') +============================= + +The "udf" (`type:=udf') filesystem mounts media with a Universal Disk +Format (UDF) filesystem on it, e.g., a video DVD. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + Some operating systems will fail to mount read-only media unless the +`ro' option is specified. A udf entry might be: + + udf os==sunos4;type:=udf;dev:=/dev/sr0 \ + os==sunos5;addopts:=ro;type:=udf;dev:=/dev/dsk/c0t6d0s2 + + +File: am-utils.info, Node: Loopback Filesystem, Next: Memory/RAM Filesystem, Prev: UDF Filesystem, Up: Filesystem Types + +5.8 Loopback Filesystem (`lofs') +================================ + +The "lofs" (`type:=lofs') filesystem is also called the loopback +filesystem. It mounts a local directory on another, thus providing +mount-time binding to another location (unlike symbolic links). + + The loopback filesystem is particularly useful within the context of +a chroot-ed directory (via chroot(2)), to provide access to directories +otherwise inaccessible. + +The following option must be specified: + +`rfs' + the pathname to be mounted on top of `${fs}'. + + Usually, the FTP server runs in a chroot-ed environment, for security +reasons. In this example, lofs is used to provide a subdirectory within +a user's home directory, also available for public ftp. + + lofs type:=lofs;rfs:=/home/ezk/myftpdir;fs:=/usr/ftp/pub/ezk + + +File: am-utils.info, Node: Memory/RAM Filesystem, Next: Null Filesystem, Prev: Loopback Filesystem, Up: Filesystem Types + +5.9 Memory/RAM Filesystem (`mfs') +================================= + +The "mfs" (`type:=mfs') filesystem is available in 4.4BSD, Linux, and +other systems. It creates a filesystem in a portion of the system's +memory, thus providing very fast file (volatile) access. + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Null Filesystem, Next: Floppy Filesystem, Prev: Memory/RAM Filesystem, Up: Filesystem Types + +5.10 Null Filesystem (`nullfs') +=============================== + +The "nullfs" (`type:=nullfs') filesystem is available from 4.4BSD, and +is very similar to the loopback filesystem, "lofs". + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Floppy Filesystem, Next: Translucent Filesystem, Prev: Null Filesystem, Up: Filesystem Types + +5.11 Floppy Filesystem (`pcfs') +=============================== + +The "pcfs" (`type:=pcfs') filesystem mounts a floppy previously +formatted for the MS-DOS format. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + A pcfs entry might be: + + pcfs os==sunos4;type:=pcfs;dev:=/dev/fd0 \ + os==sunos5;type:=pcfs;dev:=/dev/diskette + + +File: am-utils.info, Node: Translucent Filesystem, Next: Shared Memory+Swap Filesystem, Prev: Floppy Filesystem, Up: Filesystem Types + +5.12 Translucent Filesystem (`tfs') +=================================== + +The "tfs" (`type:=tfs') filesystem is an older version of the 4.4BSD +"unionfs". + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Shared Memory+Swap Filesystem, Next: User ID Mapping Filesystem, Prev: Translucent Filesystem, Up: Filesystem Types + +5.13 Shared Memory+Swap Filesystem (`tmpfs') +============================================ + +The "tmpfs" (`type:=tmpfs') filesystem shares memory between a the swap +device and the rest of the system. It is generally used to provide a +fast access `/tmp' directory, one that uses memory that is otherwise +unused. This filesystem is available in SunOS 4.x and 5.x. + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: User ID Mapping Filesystem, Next: Program Filesystem, Prev: Shared Memory+Swap Filesystem, Up: Filesystem Types + +5.14 User ID Mapping Filesystem (`umapfs') +========================================== + +The "umapfs" (`type:=umapfs') filesystem maps User IDs of file +ownership, and is available from 4.4BSD. + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Program Filesystem, Next: Symbolic Link Filesystem, Prev: User ID Mapping Filesystem, Up: Filesystem Types + +5.15 Program Filesystem (`program') +=================================== + +The "program" (`type:=program') filesystem type allows a program to be +run whenever a mount or unmount is required. This allows easy addition +of support for other filesystem types, such as MIT's Remote Virtual +Disk (RVD) which has a programmatic interface via the commands +`rvdmount' and `rvdunmount'. + +Both of the following options must be specified: + +`mount' + the program which will perform the mount. + +`unmount' + +`umount' + the program which will perform the unmount. For convenience, you + may use either `unmount' or `umount' but not both. If neither is + defined, Amd will default to `umount ${fs}' (the actual unmount + program pathname will be automatically determined at the time GNU + `configure' runs.) + + The exit code from these two programs is interpreted as a Unix error +code. As usual, exit code zero indicates success. To execute the +program, Amd splits the string on whitespace to create an array of +substrings. Single quotes `'' can be used to quote whitespace if that +is required in an argument. There is no way to escape or change the +single quote character. + + To run e.g. the program `rvdmount' with a host name and filesystem as +arguments, it would be specified by +`fs:=${autodir}${path};type:=program;mount:="/etc/rvdmount rvdmount +fserver ${fs}";unmount:="/etc/rdvumount rvdumount ${fs}"'. + + The first element in the array is taken as the pathname of the +program to execute. The other members of the array form the argument +vector to be passed to the program, "including argument zero". The +array is exactly the same as the array passed to the execv() system call +(man execv for details). The split string must have at least two +elements. The programs are directly executed by Amd, not via a shell. +Therefore, if a script is to be used as a mount/umount program, it +"must" begin with a `#!' interpreter specification. + + Often, this program mount type is used for Samba mounts, where you +need a double slash in pathnames. However, Amd normalizes sequences of +slashes into one slash. Therefore, you must use an escaped slash, +preceded by an escaped backslash. So to get a double slash in the +mount command, you need the eight character sequence `\\\/\\\/' in your +map. For example: + + `mount="/sbin/mount mount -r -t smbfs -o-N,-Ihostname +\\\/\\\/guest@venus/mp3"' + + If a filesystem type is to be heavily used, it may be worthwhile +adding a new filesystem type into Amd, but for most uses the program +filesystem should suffice. + + When the program is run, standard input and standard error are +inherited from the current values used by Amd. Standard output is a +duplicate of standard error. The value specified with the `-l' command +line option has no effect on standard error. + + Amd guarantees that the mountpoint will be created before calling +the mount program, and that it will be removed after the umount program +returns success. + + +File: am-utils.info, Node: Symbolic Link Filesystem, Next: Symbolic Link Filesystem II, Prev: Program Filesystem, Up: Filesystem Types + +5.16 Symbolic Link Filesystem (`link') +====================================== + +Each filesystem type creates a symbolic link to point from the volume +name to the physical mount point. The `link' filesystem does the same +without any other side effects. This allows any part of the machines +name space to be accessed via Amd. + + One common use for the symlink filesystem is `/homes' which can be +made to contain an entry for each user which points to their +(auto-mounted) home directory. Although this may seem rather expensive, +it provides a great deal of administrative flexibility. + +The following option must be defined: + +`fs' + The value of FS option specifies the destination of the link, as + modified by the SUBLINK option. If SUBLINK is non-null, it is + appended to `${fs}'`/' and the resulting string is used as the + target. + + The `link' filesystem can be thought of as identical to the `ufs' +filesystem but without actually mounting anything. + + An example entry might be: + + jsp host==charm;type:=link;fs:=/home/charm;sublink:=jsp + which would return a symbolic link pointing to `/home/charm/jsp'. + + +File: am-utils.info, Node: Symbolic Link Filesystem II, Next: NFS-Link Filesystem, Prev: Symbolic Link Filesystem, Up: Filesystem Types + +5.17 Symbolic Link Filesystem II (`linkx') +========================================== + +The "linkx" (`type:=linkx') filesystem type is identical to `link' with +the exception that the target of the link must exist. Existence is +checked with the lstat(2) system call. + + The `linkx' filesystem type is particularly useful for wildcard map +entries. In this case, a list of possible targets can be given and Amd +will choose the first one which exists on the local machine. + + +File: am-utils.info, Node: NFS-Link Filesystem, Next: Automount Filesystem, Prev: Symbolic Link Filesystem II, Up: Filesystem Types + +5.18 NFS-Link Filesystem (`nfsl') +================================= + +The "nfsl" (`type:=nfsl') filesystem type is a combination of two +others: `link' and `nfs'. If the local host name is equal to the value +of `${rhost}' _and_ the target pathname listed in `${fs}' exists, +`nfsl' will behave exactly as `type:=link', and refer to the target as +a symbolic link. If the local host name is not equal to the value of +`${rhost}', or if the target of the link does not exist, Amd will treat +it as `type:=nfs', and will mount a remote pathname for it. + + The `nfsl' filesystem type is particularly useful as a shorthand for +the more cumbersome and yet one of the most popular Amd entries. For +example, you can simplify all map entries that look like: + + zing -fs:=/n/shekel/u/zing \ + host!=shekel;type:=nfs;rhost:=shekel;rfs:=${fs} \ + host==shekel;type:=link + + or + + zing -fs:=/n/shekel/u/zing \ + exists(${fs});type:=link \ + !exists(${fs});type:=nfs;rhost:=shekel;rfs:=${fs} + + into a shorter form + + zing type:=nfsl;fs:=/n/shekel/u/zing;rhost:=shekel;rfs:=${fs} + + Not just does it make the maps smaller and simpler, but it avoids +possible mistakes that often happen when forgetting to set up the two +entries (one for `type:=nfs' and the other for `type:=link') necessary +to perform transparent mounts of existing or remote mounts. + + +File: am-utils.info, Node: Automount Filesystem, Next: Direct Automount Filesystem, Prev: NFS-Link Filesystem, Up: Filesystem Types + +5.19 Automount Filesystem (`auto') +================================== + +The "auto" (`type:=auto') filesystem type creates a new automount point +below an existing automount point. Top-level automount points appear +as system mount points. An automount mount point can also appear as a +sub-directory of an existing automount point. This allows some +additional structure to be added, for example to mimic the mount tree of +another machine. + + The following options may be specified: + +`cache' + specifies whether the data in this mount-map should be cached. + The default value is `none', in which case no caching is done in + order to conserve memory. + + However, better performance and reliability can be obtained by + caching some or all of a mount-map. + + If the cache option specifies `all', the entire map is enumerated + when the mount point is created. + + If the cache option specifies `inc', caching is done incrementally + as and when data is required. Some map types do not support cache + mode `all', in which case `inc' is used whenever `all' is + requested. + + Caching can be entirely disabled by using cache mode `none'. + + If the cache option specifies `regexp' then the entire map will be + enumerated and each key will be treated as an egrep-style regular + expression. The order in which a cached map is searched does not + correspond to the ordering in the source map so the regular + expressions should be mutually exclusive to avoid confusion. + + Each mount map type has a default cache type, usually `inc', which + can be selected by specifying `mapdefault'. + + The cache mode for a mount map can only be selected on the command + line. Starting Amd with the command: + + amd /homes hesiod.homes -cache:=inc + + will cause `/homes' to be automounted using the "Hesiod" name + server with local incremental caching of all successfully resolved + names. + + All cached data is forgotten whenever Amd receives a `SIGHUP' + signal and, if cache `all' mode was selected, the cache will be + reloaded. This can be used to inform Amd that a map has been + updated. In addition, whenever a cache lookup fails and Amd needs + to examine a map, the map's modify time is examined. If the cache + is out of date with respect to the map then it is flushed as if a + `SIGHUP' had been received. + + An additional option (`sync') may be specified to force Amd to + check the map's modify time whenever a cached entry is being used. + For example, an incremental, synchronized cache would be created + by the following command: + + amd /homes hesiod.homes -cache:=inc,sync + +`fs' + specifies the name of the mount map to use for the new mount point. + + Arguably this should have been specified with the `${rfs}' option + but we are now stuck with it due to historical accident. + +`pref' + alters the name that is looked up in the mount map. If `${pref}', + the "prefix", is non-null then it is prepended to the name + requested by the kernel "before" the map is searched. The default + prefix is the prefix of the parent map (if any) with name of the + auto node appended to it. That means if you want no prefix you + must say so in the map: `pref:=null'. + +`opts' + Normally, `auto' style maps are not browsable even if you turn on + directory browsability (*note browsable_dirs Parameter::). To + enable browsing entries in `auto' maps, specify `opts:=browsable' + or `opts:=fullybrowsable' in the description of this map. + + + The server `dylan.doc.ic.ac.uk' has two user disks: `/dev/dsk/2s0' +and `/dev/dsk/5s0'. These are accessed as `/home/dylan/dk2' and +`/home/dylan/dk5' respectively. Since `/home' is already an automount +point, this naming is achieved with the following map entries: + + dylan type:=auto;fs:=${map};pref:=${key}/ + dylan/dk2 type:=ufs;dev:=/dev/dsk/2s0 + dylan/dk5 type:=ufs;dev:=/dev/dsk/5s0 + + +File: am-utils.info, Node: Direct Automount Filesystem, Next: Union Filesystem, Prev: Automount Filesystem, Up: Filesystem Types + +5.20 Direct Automount Filesystem (`direct') +=========================================== + +The "direct" (`type:=direct') filesystem is almost identical to the +automount filesystem. Instead of appearing to be a directory of mount +points, it appears as a symbolic link to a mounted filesystem. The +mount is done at the time the link is accessed. *Note Automount +Filesystem::, for a list of required options. + + Direct automount points are created by specifying the `direct' +filesystem type on the command line: + + amd ... /usr/man auto.direct -type:=direct + + where `auto.direct' would contain an entry such as: + + usr/man -type:=nfs;rfs:=/usr/man \ + rhost:=man-server1 rhost:=man-server2 + + In this example, `man-server1' and `man-server2' are file servers +which export copies of the manual pages. Note that the key which is +looked up is the name of the automount point without the leading `/'. + + Note that the implementation of the traditional "direct" filesystem +is essentially a hack (pretending that the root of an NFS filesystem is +a symlink) and many modern operating systems get very unhappy about it. +For example, Linux kernel 2.4+ completely disallows it, and Solaris 2.8 +fails to unmount it when Amd shuts down. Therefore, the use of the +traditional "direct" filesystem is strongly discouraged; it is only +semi-supported, at best. + + The autofs implementations that permit direct mounts are fully +supported, however. That currently includes all versions of Solaris. +Linux autofs does NOT support direct mounts at all. + + +File: am-utils.info, Node: Union Filesystem, Next: Error Filesystem, Prev: Direct Automount Filesystem, Up: Filesystem Types + +5.21 Union Filesystem (`union') +=============================== + +The "union" (`type:=union') filesystem type allows the contents of +several directories to be merged and made visible in a single +directory. This can be used to overcome one of the major limitations +of the Unix mount mechanism which only allows complete directories to +be mounted. + + For example, supposing `/tmp' and `/var/tmp' were to be merged into +a new directory called `/mtmp', with files in `/var/tmp' taking +precedence. The following command could be used to achieve this effect: + + amd ... /mtmp union:/tmp:/var/tmp -type:=union + + Currently, the unioned directories must _not_ be automounted. That +would cause a deadlock. This seriously limits the current usefulness of +this filesystem type and the problem will be addressed in a future +release of Amd. + + Files created in the union directory are actually created in the last +named directory. This is done by creating a wildcard entry which points +to the correct directory. The wildcard entry is visible if the union +directory is listed, so allowing you to see which directory has +priority. + + The files visible in the union directory are computed at the time +Amd is started, and are not kept up-to-date with respect to the +underlying directories. Similarly, if a link is removed, for example +with the `rm' command, it will be lost forever. + + +File: am-utils.info, Node: Error Filesystem, Next: Top-level Filesystem, Prev: Union Filesystem, Up: Filesystem Types + +5.22 Error Filesystem (`error') +=============================== + +The "error" (`type:=error') filesystem type is used internally as a +catch-all in the case where none of the other filesystems was selected, +or some other error occurred. Lookups and mounts always fail with "No +such file or directory". All other operations trivially succeed. + + The error filesystem is not directly accessible. + + +File: am-utils.info, Node: Top-level Filesystem, Next: Root Filesystem, Prev: Error Filesystem, Up: Filesystem Types + +5.23 Top-level Filesystem (`toplvl') +==================================== + +The "toplvl" (`type:=toplvl') filesystems is derived from the `auto' +filesystem and is used to mount the top-level automount nodes. +Requests of this type are automatically generated from the command line +arguments. + + +File: am-utils.info, Node: Root Filesystem, Next: Inheritance Filesystem, Prev: Top-level Filesystem, Up: Filesystem Types + +5.24 Root Filesystem (`root') +============================= + +The "root" (`type:=root') filesystem type acts as an internal +placeholder onto which Amd can pin `toplvl' mounts. Only one node of +this type need ever exist and one is created automatically during +startup. The effect of having more than one root node is undefined. + + The root filesystem is not directly accessible. + + +File: am-utils.info, Node: Inheritance Filesystem, Prev: Root Filesystem, Up: Filesystem Types + +5.25 Inheritance Filesystem (`inherit') +======================================= + +The "inheritance" (`type:=inherit') filesystem is not directly +accessible. Instead, internal mount nodes of this type are +automatically generated when Amd is started with the `-r' option. At +this time the system mount table is scanned to locate any filesystems +which are already mounted. If any reference to these filesystems is +made through Amd then instead of attempting to mount it, Amd simulates +the mount and "inherits" the filesystem. This allows a new version of +Amd to be installed on a live system simply by killing the old daemon +with `SIGTERM' and starting the new one. + + This filesystem type is not generally visible externally, but it is +possible that the output from `amq -m' may list `inherit' as the +filesystem type. This happens when an inherit operation cannot be +completed for some reason, usually because a fileserver is down. + + +File: am-utils.info, Node: Amd Configuration File, Next: Run-time Administration, Prev: Filesystem Types, Up: Top + +6 Amd Configuration File +************************ + +The `amd.conf' file is the configuration file for Amd, as part of the +am-utils suite. This file contains runtime configuration information +for the Amd automounter program. + +* Menu: + +* File Format:: +* The Global Section:: +* Regular Map Sections:: +* Common Parameters:: +* Global Parameters:: +* Regular Map Parameters:: +* amd.conf Examples:: + + +File: am-utils.info, Node: File Format, Next: The Global Section, Prev: Amd Configuration File, Up: Amd Configuration File + +6.1 File Format +=============== + +The `amd.conf' file consists of sections and parameters. A section +begins with the name of the section in square brackets `[]' and +continues until the next section begins or the end of the file is +reached. Sections contain parameters of the form `name = value'. + + The file is line-based -- that is, each newline-terminated line +represents either a comment, a section name or a parameter. No +line-continuation syntax is available. + + Section names, parameter names and their values are case sensitive. + + Only the first equals sign in a parameter is significant. Whitespace +before or after the first equals sign is discarded. Leading, trailing +and internal whitespace in section and parameter names is irrelevant. +Leading and trailing whitespace in a parameter value is discarded. +Internal whitespace within a parameter value is not allowed, unless the +whole parameter value is quoted with double quotes as in `name = "some +value"'. + + Any line beginning with a pound sign `#' is ignored, as are lines +containing only whitespace. + + The values following the equals sign in parameters are all either a +string (no quotes needed if string does not include spaces) or a +boolean, which may be given as `yes'/`no'. Case is significant in all +values. Some items such as cache timeouts are numeric. + + +File: am-utils.info, Node: The Global Section, Next: Regular Map Sections, Prev: File Format, Up: Amd Configuration File + +6.2 The Global Section +====================== + +The global section must be specified as `[global]'. Parameters in this +section either apply to Amd as a whole, or to all other regular map +sections which follow. There should be only one global section defined +in one configuration file. + + It is highly recommended that this section be specified first in the +configuration file. If it is not, then regular map sections which +precede it will not use global values defined later. + + +File: am-utils.info, Node: Regular Map Sections, Next: Common Parameters, Prev: The Global Section, Up: Amd Configuration File + +6.3 Regular Map Sections +======================== + +Parameters in regular (non-global) sections apply to a single map entry. +For example, if the map section `[/homes]' is defined, then all +parameters following it will be applied to the `/homes' Amd-managed +mount point. + + +File: am-utils.info, Node: Common Parameters, Next: Global Parameters, Prev: Regular Map Sections, Up: Amd Configuration File + +6.4 Common Parameters +===================== + +These parameters can be specified either in the global or a map-specific +section. Entries specified in a map-specific section override the +default value or one defined in the global section. If such a common +parameter is specified only in the global section, it is applicable to +all regular map sections that follow. + +* Menu: + +* autofs_use_lofs Parameter:: +* browsable_dirs Parameter:: +* map_defaults Parameter:: +* map_options Parameter:: +* map_type Parameter:: +* mount_type Parameter:: +* search_path Parameter:: +* selectors_in_defaults Parameter:: +* sun_map_syntax Parameter:: + + +File: am-utils.info, Node: autofs_use_lofs Parameter, Next: browsable_dirs Parameter, Prev: Common Parameters, Up: Common Parameters + +6.4.1 autofs_use_lofs Parameter +------------------------------- + +(type=string, default=`yes'). When set to `yes', Amd's autofs code +will use lofs-type (loopback) mounts for `type:=link' mounts, as well +as several other cases that require local references. This has the +advantage that Amd does not use a secondary mount point and users do +not see external pathnames (the infamous `/bin/pwd' problem, where it +reports a different path than the user chdir'ed into). One of the +disadvantages of using this option is that the autofs code is +relatively new and the in-place mounts have not been throughly tested. + + If this option is set to `no', then Amd's autofs code will use +symlinks instead of lofs-type mounts for local references. This has +the advantage of using simpler (more stable) code, but at the expense +of negating one of autofs's big advantages: the hiding of Amd's +internal paths. Note that symlinks are not supported in all autofs +implementations, especially those derived from Solaris Autofs v1. +Also, on Solaris 2.6 and newer, autofs symlinks are not cached, +resulting in repeated up-call requests to Amd. + + +File: am-utils.info, Node: browsable_dirs Parameter, Next: map_defaults Parameter, Prev: autofs_use_lofs Parameter, Up: Common Parameters + +6.4.2 browsable_dirs Parameter +------------------------------ + +(type=string, default=`no'). If `yes', then Amd's top-level mount +points will be browsable to readdir(3) calls. This means you could run +for example ls(1) and see what keys are available to mount in that +directory. Not all entries are made visible to readdir(3): the +`/defaults' entry, wildcard entries, and those with a `/' in them are +not included. If you specify `full' to this option, all but the +`/defaults' entry will be visible. Note that if you run a command +which will attempt to stat(2) the entries, such as often done by `ls +-l' or `ls -F', Amd will attempt to mount every entry in that map. +This is often called a "mount storm". + + Note that mount storms are mostly avoided by using autofs mounts +(`mount_type = autofs'). + + +File: am-utils.info, Node: map_defaults Parameter, Next: map_options Parameter, Prev: browsable_dirs Parameter, Up: Common Parameters + +6.4.3 map_defaults Parameter +---------------------------- + +(type=string, default to empty). This option sets a string to be used +as the map's `/defaults' entry, overriding any `/defaults' specified in +the map. This allows local users to override a given map's defaults +without modifying maps globally (which is impossible in sites where the +maps are managed by a different administrative group). + + +File: am-utils.info, Node: map_options Parameter, Next: map_type Parameter, Prev: map_defaults Parameter, Up: Common Parameters + +6.4.4 map_options Parameter +--------------------------- + +(type=string, default no options). This option is the same as +specifying map options on the command line to Amd, such as `cache:=all'. + + +File: am-utils.info, Node: map_type Parameter, Next: mount_type Parameter, Prev: map_options Parameter, Up: Common Parameters + +6.4.5 map_type Parameter +------------------------ + +(type=string, default search all map types). If specified, Amd will +initialize the map only for the type given. This is useful to avoid the +default map search type used by Amd which takes longer and can have +undesired side-effects such as initializing NIS even if not used. +Possible values are + +`file' + plain files + +`hesiod' + Hesiod name service from MIT + +`ldap' + Lightweight Directory Access Protocol + +`ndbm' + (New) dbm style hash files + +`nis' + Network Information Services (version 2) + +`nisplus' + Network Information Services Plus (version 3) + +`passwd' + local password files + +`union' + union maps + + +File: am-utils.info, Node: mount_type Parameter, Next: search_path Parameter, Prev: map_type Parameter, Up: Common Parameters + +6.4.6 mount_type Parameter +-------------------------- + +(type=string, default=`nfs'). All Amd mount types default to NFS. +That is, Amd is an NFS server on the map mount points, for the local +host it is running on. If `autofs' is specified, Amd will be an autofs +server for those mount points. + + +File: am-utils.info, Node: search_path Parameter, Next: selectors_in_defaults Parameter, Prev: mount_type Parameter, Up: Common Parameters + +6.4.7 search_path Parameter +--------------------------- + +(type=string, default no search path). This provides a +(colon-delimited) search path for file maps. Using a search path, +sites can allow for local map customizations and overrides, and can +distributed maps in several locations as needed. + + +File: am-utils.info, Node: selectors_in_defaults Parameter, Next: sun_map_syntax Parameter, Prev: search_path Parameter, Up: Common Parameters + +6.4.8 selectors_in_defaults Parameter +------------------------------------- + +(type=boolean, default=`no'). If `yes', then the `/defaults' entry of +maps will search for and process any selectors before setting defaults +for all other keys in that map. Useful when you want to set different +options for a complete map based on some parameters. For example, you +may want to better the NFS performance over slow slip-based networks as +follows: + + /defaults \ + wire==slip-net;opts:=intr,rsize=1024,wsize=1024 \ + wire!=slip-net;opts:=intr,rsize=8192,wsize=8192 + + Deprecated form: selectors_on_default. + + +File: am-utils.info, Node: sun_map_syntax Parameter, Prev: selectors_in_defaults Parameter, Up: Common Parameters + +6.4.9 sun_map_syntax Parameter +------------------------------ + +(type=boolean, default=`no'). If `yes', then Amd will parse the map +according to the Sun Automount syntax. + + +File: am-utils.info, Node: Global Parameters, Next: Regular Map Parameters, Prev: Common Parameters, Up: Amd Configuration File + +6.5 Global Parameters +===================== + +The following parameters are applicable to the `[global]' section only. + +* Menu: + +* arch Parameter:: +* auto_attrcache Parameter:: +* auto_dir Parameter:: +* cache_duration Parameter:: +* cluster Parameter:: +* debug_mtab_file Parameter:: +* debug_options Parameter:: +* dismount_interval Parameter:: +* domain_strip Parameter:: +* exec_map_timeout Parameter:: +* forced_unmounts Parameter:: +* full_os Parameter:: +* fully_qualified_hosts Parameter:: +* hesiod_base Parameter:: +* karch Parameter:: +* ldap_base Parameter:: +* ldap_cache_maxmem Parameter:: +* ldap_cache_seconds Parameter:: +* ldap_hostports Parameter:: +* ldap_proto_version Parameter:: +* local_domain Parameter:: +* localhost_address Parameter:: +* log_file Parameter:: +* log_options Parameter:: +* map_reload_interval Parameter:: +* nfs_allow_any_interface Parameter:: +* nfs_allow_insecure_port Parameter:: +* nfs_proto Parameter:: +* nfs_retransmit_counter Parameter:: +* nfs_retransmit_counter_udp Parameter:: +* nfs_retransmit_counter_tcp Parameter:: +* nfs_retransmit_counter_toplvl Parameter:: +* nfs_retry_interval Parameter:: +* nfs_retry_interval_udp Parameter:: +* nfs_retry_interval_tcp Parameter:: +* nfs_retry_interval_toplvl Parameter:: +* nfs_vers Parameter:: +* nis_domain Parameter:: +* normalize_hostnames Parameter:: +* normalize_slashes Parameter:: +* os Parameter:: +* osver Parameter:: +* pid_file Parameter:: +* plock Parameter:: +* portmap_program Parameter:: +* preferred_amq_port Parameter:: +* print_pid Parameter:: +* print_version Parameter:: +* restart_mounts Parameter:: +* show_statfs_entries Parameter:: +* truncate_log Parameter:: +* unmount_on_exit Parameter:: +* use_tcpwrappers Parameter:: +* vendor Parameter:: + + +File: am-utils.info, Node: arch Parameter, Next: auto_attrcache Parameter, Prev: Global Parameters, Up: Global Parameters + +6.5.1 arch Parameter +-------------------- + +(type=string, default to compiled in value). Same as the `-A' option +to Amd. Allows you to override the value of the arch Amd variable. + + +File: am-utils.info, Node: auto_attrcache Parameter, Next: auto_dir Parameter, Prev: arch Parameter, Up: Global Parameters + +6.5.2 auto_attrcache Parameter +------------------------------ + +(type=numeric, default=0). Specify in seconds (or units of 0.1 +seconds, depending on the OS), what is the (kernel-side) NFS attribute +cache timeout for Amd's own automount points. A value of 0 is supposed +to turn off attribute caching, meaning that Amd will be consulted via a +kernel-RPC each time someone stat()'s the mount point (which could be +abused as a denial-of-service attack). + + _WARNING_: Amd depends on being able to turn off the NFS attribute +cache of the client OS. If it cannot be turned off, then users may get +ESTALE errors or symlinks that point to the wrong places. This is more +likely under heavy use of Amd, for example if your system is +experiencing frequent map changes or frequent mounts/unmounts. +Therefore, under normal circumstances, this parameter should remain set +to 0, to ensure that the attribute cache is indeed off. + + Unfortunately, some kernels (e.g., certain BSDs) don't have a way to +turn off the NFS attribute cache. Setting this parameter to 0 is +supposed to turn off attribute caching entirely, but unfortunately it +does not; instead, the attribute cache is set to some internal +hard-coded default (usually anywhere from 5-30 seconds). If you +suspect that your OS doesn't have a reliable way of turning off the +attribute cache, then it is better to set this parameter to the +smallest possible non-zero value (set `auto_attrcache=1' in your +`amd.conf'). This will not eliminate the problem, but reduce the risk +window somewhat. The best solutions are (1) to use Amd in Autofs mode, +if it's supported in your OS, and (2) talk to your OS vendor to support +a true `noac' flag. See the README.attrcache +(http://www.am-utils.org/docs/am-utils/attrcache.txt) document for more +details. + + If you are able to turn off the attribute cache on your OS, alas, +Amd's performance may degrade (when not using Autofs) because every +traversal of an automounter-controlled pathname will result in a lookup +request from the kernel to Amd. Under heavy loads, for example when +using recursive tools like `find', `rdist', or `rsync', this +performance degradation can be noticeable. There are two possible +solutions that some administrators have chosen to improve performance: + + 1. First, you can turn off unmounting using the `nounmount' mount + option. This will ensure that no Amd symlink could ever change, + thereby the kernel's attribute cache and Amd will always be in + sync. However, this method will cause the number of mounts to keep + growing, even if some are no longer in use; this has the + disadvantage that your system could be more susceptible to hangs + if even one of those accumulating mounts hangs due to a downed + server. + + 2. Second, you can turn on attribute caching carefully by setting a + small automounter attribute cache value (say, one second), and a + relatively large dismount interval (say, one hour). (*Note + dismount_interval Parameter::.) For example, you can set this in + your `amd.conf': + + [global] + auto_attrcache = 1 + dismount_interval = 3600 + + This has the benefit of using the kernel's attribute cache and thus + improving performance. The disadvantage with this option is that + the window of vulnerability is not eliminated entirely: it is only + made smaller. + + + +File: am-utils.info, Node: auto_dir Parameter, Next: cache_duration Parameter, Prev: auto_attrcache Parameter, Up: Global Parameters + +6.5.3 auto_dir Parameter +------------------------ + +(type=string, default=`/a'). Same as the `-a' option to Amd. This +sets the private directory where Amd will create sub-directories for +its real mount points. + + +File: am-utils.info, Node: cache_duration Parameter, Next: cluster Parameter, Prev: auto_dir Parameter, Up: Global Parameters + +6.5.4 cache_duration Parameter +------------------------------ + +(type=numeric, default=300). Same as the `-c' option to Amd. Sets the +duration in seconds that looked-up or mounted map entries remain in the +cache. + + +File: am-utils.info, Node: cluster Parameter, Next: debug_mtab_file Parameter, Prev: cache_duration Parameter, Up: Global Parameters + +6.5.5 cluster Parameter +----------------------- + +(type=string, default no cluster). Same as the `-C' option to Amd. +Specifies the alternate HP-UX cluster to use. + + +File: am-utils.info, Node: debug_mtab_file Parameter, Next: debug_options Parameter, Prev: cluster Parameter, Up: Global Parameters + +6.5.6 debug_mtab_file Parameter +------------------------------- + +(type=string, default="/tmp/mtab"). Path to mtab file that is used by +Amd to store a list of mounted file systems during debug-mtab mode. +This option only applies to systems that store mtab information on disk. + + +File: am-utils.info, Node: debug_options Parameter, Next: dismount_interval Parameter, Prev: debug_mtab_file Parameter, Up: Global Parameters + +6.5.7 debug_options Parameter +----------------------------- + +(type=string, default no debug options). Same as the `-D' option to +Amd. Specify any debugging options for Amd. Works only if am-utils +was configured for debugging using the `--enable-debug' option. The +additional `mem' option can be turned on via `--enable-debug=mem'. +Otherwise debugging options are ignored. Options are comma delimited, +and can be preceded by the string `no' to negate their meaning. You +can get the list of supported debugging and logging options by running +`amd -H'. Possible values those listed for the -D option. *Note -D +Option::. + + +File: am-utils.info, Node: dismount_interval Parameter, Next: domain_strip Parameter, Prev: debug_options Parameter, Up: Global Parameters + +6.5.8 dismount_interval Parameter +--------------------------------- + +(type=numeric, default=120). Same as the `-w' option to Amd. Specify +in seconds, the time between attempts to dismount file systems that +have exceeded their cached times. + + +File: am-utils.info, Node: domain_strip Parameter, Next: exec_map_timeout Parameter, Prev: dismount_interval Parameter, Up: Global Parameters + +6.5.9 domain_strip Parameter +---------------------------- + +(type=boolean, default=`yes'). If `yes', then the domain name part +referred to by `${rhost}' is stripped off. This is useful to keep logs +and smaller. If `no', then the domain name part is left changed. This +is useful when using multiple domains with the same maps (as you may +have hosts whose domain-stripped name is identical). + + +File: am-utils.info, Node: exec_map_timeout Parameter, Next: forced_unmounts Parameter, Prev: domain_strip Parameter, Up: Global Parameters + +6.5.10 exec_map_timeout Parameter +--------------------------------- + +(type=numeric, default=10). The timeout in seconds that Amd will wait +for an executable map program before an answer is returned from that +program (or script). This value should be set to as small as possible +while still allowing normal replies to be returned before the timer +expires, because during the time that the executable map program is +queried, Amd is essentially waiting and is thus not responding to any +other queries. *Note Executable maps::. + + +File: am-utils.info, Node: forced_unmounts Parameter, Next: full_os Parameter, Prev: exec_map_timeout Parameter, Up: Global Parameters + +6.5.11 forced_unmounts Parameter +-------------------------------- + +(type=boolean, default=`no'). Sometimes, mount points are hung due to +unrecoverable conditions, such as when NFS servers migrate, change +their IP address, are down permanently, or due to hardware failures, +and more. In this case, attempting to unmount an existing mount point, +or even just to stat(2) it, results in one of three fatal errors: EIO, +ESTALE, or EBUSY. At that point, Amd can do little to recover that hung +point (in fact, the OS cannot automatically recover either). For that +reason, some OSs support special kinds of forced unmounts, which must +be used very carefully: they will force an unmount immediately (or +lazily on Linux), which could result in application data loss. +However, that may be the only way to recover the entire host (without +rebooting). Once a hung mount point is forced out, Amd can then +re-mount a replacement one (if available), bringing a mostly-hung +system back to operation and avoiding a potentially costly reboot. + + If the `forced_unmounts' option is set to `yes', and the client OS +supports forced or lazy unmounts, then Amd will attempt to use them if +it gets any of the three serious error conditions listed above. Note +that Amd will force the unmount of mount points that returned EBUSY +only for `type:=toplvl' mounts (*note Top-level Filesystem::): that is, +Amd's own mount points. This is useful to recover from a previously +hung Amd, and to ensure that an existing Amd can shutdown cleanly even +if some processes are keeping its mount points busy (i.e., when a +user's shell process uses `cd' to set its CWD to Amd's own mount point). + + If this option is set to `no' (the default), then Amd will not +attempt this special recovery procedure. + + +File: am-utils.info, Node: full_os Parameter, Next: fully_qualified_hosts Parameter, Prev: forced_unmounts Parameter, Up: Global Parameters + +6.5.12 full_os Parameter +------------------------ + +(type=string, default to compiled in value). The full name of the +operating system, along with its version. Allows you to override the +compiled-in full name and version of the operating system. Useful when +the compiled-in name is not desired. For example, the full operating +system name on linux comes up as `linux', but you can override it to +`linux-2.2.5'. + + +File: am-utils.info, Node: fully_qualified_hosts Parameter, Next: hesiod_base Parameter, Prev: full_os Parameter, Up: Global Parameters + +6.5.13 fully_qualified_hosts Parameter +-------------------------------------- + +(type=string, default=`no'). If `yes', Amd will perform RPC +authentication using fully-qualified host names. This is necessary for +some systems, and especially when performing cross-domain mounting. For +this function to work, the Amd variable `${hostd}' is used, requiring +that `${domain}' not be null. + + +File: am-utils.info, Node: hesiod_base Parameter, Next: karch Parameter, Prev: fully_qualified_hosts Parameter, Up: Global Parameters + +6.5.14 hesiod_base Parameter +---------------------------- + +(type=string, default=`automount'). Specify the base name for hesiod +maps. + + +File: am-utils.info, Node: karch Parameter, Next: ldap_base Parameter, Prev: hesiod_base Parameter, Up: Global Parameters + +6.5.15 karch Parameter +---------------------- + +(type=string, default to karch of the system). Same as the `-k' option +to Amd. Allows you to override the kernel-architecture of your system. +Useful for example on Sun (Sparc) machines, where you can build one +Amd binary, and run it on multiple machines, yet you want each one to +get the correct karch variable set (for example, sun4c, sun4m, sun4u, +etc.) Note that if not specified, Amd will use uname(2) to figure out +the kernel architecture of the machine. + + +File: am-utils.info, Node: ldap_base Parameter, Next: ldap_cache_maxmem Parameter, Prev: karch Parameter, Up: Global Parameters + +6.5.16 ldap_base Parameter +-------------------------- + +(type=string, default not set). Specify the base name for LDAP. This +often includes LDAP-specific values such as country and organization. + + +File: am-utils.info, Node: ldap_cache_maxmem Parameter, Next: ldap_cache_seconds Parameter, Prev: ldap_base Parameter, Up: Global Parameters + +6.5.17 ldap_cache_maxmem Parameter +---------------------------------- + +(type=numeric, default=131072). Specify the maximum memory Amd should +use to cache LDAP entries. + + +File: am-utils.info, Node: ldap_cache_seconds Parameter, Next: ldap_hostports Parameter, Prev: ldap_cache_maxmem Parameter, Up: Global Parameters + +6.5.18 ldap_cache_seconds Parameter +----------------------------------- + +(type=numeric, default=0). Specify the number of seconds to keep +entries in the cache. + + +File: am-utils.info, Node: ldap_hostports Parameter, Next: ldap_proto_version Parameter, Prev: ldap_cache_seconds Parameter, Up: Global Parameters + +6.5.19 ldap_hostports Parameter +------------------------------- + +(type=string, default not set). Specify the LDAP host and port values. + + +File: am-utils.info, Node: ldap_proto_version Parameter, Next: local_domain Parameter, Prev: ldap_hostports Parameter, Up: Global Parameters + +6.5.20 ldap_proto_version Parameter +----------------------------------- + +(type=numeric, default=2). Specify the LDAP protocol version to use. +With a value of 3 will use LDAPv3 protocol. + + +File: am-utils.info, Node: local_domain Parameter, Next: localhost_address Parameter, Prev: ldap_proto_version Parameter, Up: Global Parameters + +6.5.21 local_domain Parameter +----------------------------- + +(type=string, default no sub-domain). Same as the `-d' option to Amd. +Specify the local domain name. If this option is not given the domain +name is determined from the hostname, by removing the first component +of the fully-qualified host name. + + +File: am-utils.info, Node: localhost_address Parameter, Next: log_file Parameter, Prev: local_domain Parameter, Up: Global Parameters + +6.5.22 localhost_address Parameter +---------------------------------- + +(type=string, default to localhost or 127.0.0.1). Specify the name or +IP address for Amd to use when connecting the sockets for the local NFS +server and the RPC server. This defaults to 127.0.0.1 or whatever the +host reports as its local address. This parameter is useful on hosts +with multiple addresses where you want to force Amd to connect to a +specific address. + + +File: am-utils.info, Node: log_file Parameter, Next: log_options Parameter, Prev: localhost_address Parameter, Up: Global Parameters + +6.5.23 log_file Parameter +------------------------- + +(type=string, default=`stderr'). Same as the `-l' option to Amd. +Specify a file name to log Amd events to. If the string `/dev/stderr' +is specified, Amd will send its events to the standard error file +descriptor. + + If the string `syslog' is given, Amd will record its events with the +system logger syslogd(8). If your system supports syslog facilities, +then the default facility used is `LOG_DAEMON'. + + When using syslog, if you wish to change the facility, append its +name to the option name, delimited by a single colon. For example, if +it is the string `syslog:local7' then Amd will log messages via +syslog(3) using the `LOG_LOCAL7' facility. If the facility name +specified is not recognized, Amd will default to `LOG_DAEMON'. Note: +while you can use any syslog facility available on your system, it is +generally a bad idea to use those reserved for other services such as +`kern', `lpr', `cron', etc. + + +File: am-utils.info, Node: log_options Parameter, Next: map_reload_interval Parameter, Prev: log_file Parameter, Up: Global Parameters + +6.5.24 log_options Parameter +---------------------------- + +(type=string, default="defaults"). Same as the `-x' option to Amd. +Specify any logging options for Amd. Options are comma delimited, and +can be preceded by the string `no' to negate their meaning. The +`debug' logging option is only available if am-utils was configured +with `--enable-debug'. You can get the list of supported debugging +options by running `amd -H'. Possible values are: + +`all' + all messages + +`defaults' + an alias for "fatal,error,user,warning,info" + +`debug' + debug messages + +`error' + non-fatal system errors (cannot be turned off) + +`fatal' + fatal errors (cannot be turned off) + +`info' + information + +`map' + map errors + +`stats' + additional statistical information + +`user' + non-fatal user errors + +`warn' + warnings + +`warning' + warnings + + +File: am-utils.info, Node: map_reload_interval Parameter, Next: nfs_allow_any_interface Parameter, Prev: log_options Parameter, Up: Global Parameters + +6.5.25 map_reload_interval Parameter +------------------------------------ + +(type=numeric, default=3600). The number of seconds that Amd will wait +before it checks to see if any maps have changed at their source (NIS +servers, LDAP servers, files, etc.). Amd will reload only those maps +that have changed. + + +File: am-utils.info, Node: nfs_allow_any_interface Parameter, Next: nfs_allow_insecure_port Parameter, Prev: map_reload_interval Parameter, Up: Global Parameters + +6.5.26 nfs_allow_any_interface Parameter +---------------------------------------- + +(type=string, default=`no'). Normally Amd accepts local NFS packets +only from 127.0.0.1. If this parameter is set to `yes', then amd will +accept local NFS packets from any local interface; this is useful on +hosts that may have multiple interfaces where the system is forced to +send all outgoing packets (even those bound to the same host) via an +address other than 127.0.0.1. + + +File: am-utils.info, Node: nfs_allow_insecure_port Parameter, Next: nfs_proto Parameter, Prev: nfs_allow_any_interface Parameter, Up: Global Parameters + +6.5.27 nfs_allow_insecure_port Parameter +---------------------------------------- + +(type=string, default=`no'). Normally Amd will refuse requests coming +from unprivileged ports (i.e., ports >= 1024 on Unix systems), so that +only privileged users and the kernel can send NFS requests to it. +However, some kernels (certain versions of Darwin, MacOS X, and Linux) +have bugs that cause them to use unprivileged ports in certain +situations, which causes Amd to stop dead in its tracks. This +parameter allows Amd to operate normally even on such systems, at the +expense of a slight decrease in the security of its operations. If you +see messages like "ignoring request from foo:1234, port not reserved" +in your Amd log, try enabling this parameter and give it another go. + + +File: am-utils.info, Node: nfs_proto Parameter, Next: nfs_retransmit_counter Parameter, Prev: nfs_allow_insecure_port Parameter, Up: Global Parameters + +6.5.28 nfs_proto Parameter +-------------------------- + +(type=string, default to trying version tcp then udp). By default, Amd +tries `tcp' and then `udp'. This option forces the overall NFS +protocol used to TCP or UDP. It overrides what is in the Amd maps, and +is useful when Amd is compiled with TCP support in NFSv2/NFSv3 that may +not be stable. With this option you can turn off the complete usage of +TCP for NFS dynamically (without having to recompile Amd), and use UDP +only, until such time as TCP support is desired again. + + +File: am-utils.info, Node: nfs_retransmit_counter Parameter, Next: nfs_retransmit_counter_udp Parameter, Prev: nfs_proto Parameter, Up: Global Parameters + +6.5.29 nfs_retransmit_counter Parameter +--------------------------------------- + +(type=numeric, default=11). Same as the retransmit part of the `-t' +timeout.retransmit option to Amd. Specifies the number of NFS +retransmissions that the kernel will use to communicate with Amd using +either UDP or TCP mounts. *Note -t Option::. + + +File: am-utils.info, Node: nfs_retransmit_counter_udp Parameter, Next: nfs_retransmit_counter_tcp Parameter, Prev: nfs_retransmit_counter Parameter, Up: Global Parameters + +6.5.30 nfs_retransmit_counter_udp Parameter +------------------------------------------- + +(type=numeric, default=11). Same as the nfs_retransmit_counter +parameter, but applied globally only to UDP mounts. *Note +nfs_retransmit_counter Parameter::. + + +File: am-utils.info, Node: nfs_retransmit_counter_tcp Parameter, Next: nfs_retransmit_counter_toplvl Parameter, Prev: nfs_retransmit_counter_udp Parameter, Up: Global Parameters + +6.5.31 nfs_retransmit_counter_tcp Parameter +------------------------------------------- + +(type=numeric, default=11). Same as the nfs_retransmit_counter +parameter, but applied globally only to TCP mounts. *Note +nfs_retransmit_counter Parameter::. + + +File: am-utils.info, Node: nfs_retransmit_counter_toplvl Parameter, Next: nfs_retry_interval Parameter, Prev: nfs_retransmit_counter_tcp Parameter, Up: Global Parameters + +6.5.32 nfs_retransmit_counter_toplvl Parameter +---------------------------------------------- + +(type=numeric, default=11). Same as the nfs_retransmit_counter +parameter, applied only for Amd's top-level UDP mounts. On some +systems it is useful to set this differently than the OS default, so as +to better tune Amd's responsiveness under heavy scheduler loads. *Note +nfs_retransmit_counter Parameter::. + + +File: am-utils.info, Node: nfs_retry_interval Parameter, Next: nfs_retry_interval_udp Parameter, Prev: nfs_retransmit_counter_toplvl Parameter, Up: Global Parameters + +6.5.33 nfs_retry_interval Parameter +----------------------------------- + +(type=numeric, default=8). Same as the timeout part of the `-t' +timeout.retransmit option to Amd. Specifies the NFS timeout interval, +in _tenths_ of seconds, between NFS/RPC retries (for UDP or TCP). This +is the value that the kernel will use to communicate with Amd. *Note +-t Option::. + + Amd relies on the kernel RPC retransmit mechanism to trigger mount +retries. The values of the nfs_retransmit_counter and the +nfs_retry_interval parameters change the overall retry interval. Too +long an interval gives poor interactive response; too short an interval +causes excessive retries. + + +File: am-utils.info, Node: nfs_retry_interval_udp Parameter, Next: nfs_retry_interval_tcp Parameter, Prev: nfs_retry_interval Parameter, Up: Global Parameters + +6.5.34 nfs_retry_interval_udp Parameter +--------------------------------------- + +(type=numeric, default=8). Same as the nfs_retry_interval parameter, +but applied globally only to UDP mounts. *Note nfs_retry_interval +Parameter::. + + +File: am-utils.info, Node: nfs_retry_interval_tcp Parameter, Next: nfs_retry_interval_toplvl Parameter, Prev: nfs_retry_interval_udp Parameter, Up: Global Parameters + +6.5.35 nfs_retry_interval_tcp Parameter +--------------------------------------- + +(type=numeric, default=8). Same as the nfs_retry_interval parameter, +but applied globally only to TCP mounts. *Note nfs_retry_interval +Parameter::. + + +File: am-utils.info, Node: nfs_retry_interval_toplvl Parameter, Next: nfs_vers Parameter, Prev: nfs_retry_interval_tcp Parameter, Up: Global Parameters + +6.5.36 nfs_retry_interval_toplvl Parameter +------------------------------------------ + +(type=numeric, default=8). Same as the nfs_retry_interval parameter, +applied only for Amd's top-level UDP mounts. On some systems it is +useful to set this differently than the OS default, so as to better +tune Amd's responsiveness under heavy scheduler loads. *Note +nfs_retry_interval Parameter::. + + +File: am-utils.info, Node: nfs_vers Parameter, Next: nis_domain Parameter, Prev: nfs_retry_interval_toplvl Parameter, Up: Global Parameters + +6.5.37 nfs_vers Parameter +------------------------- + +(type=numeric, default to trying version 3 then 2). By default, Amd +tries version 3 and then version 2. This option forces the overall NFS +protocol used to version 3 or 2. It overrides what is in the Amd maps, +and is useful when Amd is compiled with NFSv3 support that may not be +stable. With this option you can turn off the complete usage of NFSv3 +dynamically (without having to recompile Amd), and use NFSv2 only, +until such time as NFSv3 support is desired again. + + +File: am-utils.info, Node: nis_domain Parameter, Next: normalize_hostnames Parameter, Prev: nfs_vers Parameter, Up: Global Parameters + +6.5.38 nis_domain Parameter +--------------------------- + +(type=string, default to local NIS domain name). Same as the `-y' +option to Amd. Specify an alternative NIS domain from which to fetch +the NIS maps. The default is the system domain name. This option is +ignored if NIS support is not available. + + +File: am-utils.info, Node: normalize_hostnames Parameter, Next: normalize_slashes Parameter, Prev: nis_domain Parameter, Up: Global Parameters + +6.5.39 normalize_hostnames Parameter +------------------------------------ + +(type=boolean, default=`no'). Same as the `-n' option to Amd. If +`yes', then the name referred to by `${rhost}' is normalized relative +to the host database before being used. The effect is to translate +aliases into "official" names. + + +File: am-utils.info, Node: normalize_slashes Parameter, Next: os Parameter, Prev: normalize_hostnames Parameter, Up: Global Parameters + +6.5.40 normalize_slashes Parameter +---------------------------------- + +(type=boolean, default=`yes'). If `yes' then amd will condense all +multiple `/' (slash) characters into one and remove all trailing +slashes. If `no', then amd will not touch strings that may contain +repeated or trailing slashes. The latter is sometimes useful with SMB +mounts, which often require multiple slash characters in pathnames. + + +File: am-utils.info, Node: os Parameter, Next: osver Parameter, Prev: normalize_slashes Parameter, Up: Global Parameters + +6.5.41 os Parameter +------------------- + +(type=string, default to compiled in value). Same as the `-O' option +to Amd. Allows you to override the compiled-in name of the operating +system. Useful when the built-in name is not desired for backward +compatibility reasons. For example, if the built-in name is `sunos5', +you can override it to `sos5', and use older maps which were written +with the latter in mind. + + +File: am-utils.info, Node: osver Parameter, Next: pid_file Parameter, Prev: os Parameter, Up: Global Parameters + +6.5.42 osver Parameter +---------------------- + +(type=string, default to compiled in value). Same as the `-o' option +to Amd. Allows you to override the compiled-in version number of the +operating system. Useful when the built-in version is not desired for +backward compatibility reasons. For example, if the build in version +is `2.5.1', you can override it to `5.5.1', and use older maps that +were written with the latter in mind. + + +File: am-utils.info, Node: pid_file Parameter, Next: plock Parameter, Prev: osver Parameter, Up: Global Parameters + +6.5.43 pid_file Parameter +------------------------- + +(type=string, default=`/dev/stdout'). Specify a file to store the +process ID of the running daemon into. If not specified, Amd will +print its process id onto the standard output. Useful for killing Amd +after it had run. Note that the PID of a running Amd can also be +retrieved via Amq (*note Amq -p option::). + + This file is used only if the `print_pid' option is on (*note +print_pid Parameter::). + + +File: am-utils.info, Node: plock Parameter, Next: portmap_program Parameter, Prev: pid_file Parameter, Up: Global Parameters + +6.5.44 plock Parameter +---------------------- + +(type=boolean, default=`yes'). Same as the `-S' option to Amd. If +`yes', lock the running executable pages of Amd into memory. To +improve Amd's performance, systems that support the plock(3) or +mlockall(2) call can lock the Amd process into memory. This way there +is less chance the operating system will schedule, page out, and swap +the Amd process as needed. This improves Amd's performance, at the +cost of reserving the memory used by the Amd process (making it +unavailable for other processes). + + +File: am-utils.info, Node: portmap_program Parameter, Next: preferred_amq_port Parameter, Prev: plock Parameter, Up: Global Parameters + +6.5.45 portmap_program Parameter +-------------------------------- + +(type=numeric, default=300019). Specify an alternate Port-mapper RPC +program number, other than the official number. This is useful when +running multiple Amd processes. For example, you can run another Amd +in "test" mode, without affecting the primary Amd process in any way. +For safety reasons, the alternate program numbers that can be specified +must be in the range 300019-300029, inclusive. Amq has an option `-P' +which can be used to specify an alternate program number of an Amd to +contact. In this way, amq can fully control any number of Amd +processes running on the same host. + + +File: am-utils.info, Node: preferred_amq_port Parameter, Next: print_pid Parameter, Prev: portmap_program Parameter, Up: Global Parameters + +6.5.46 preferred_amq_port Parameter +----------------------------------- + +(type=numeric, default=0). Specify an alternate Port-mapper RPC port +number for Amd's Amq service. This is used for both UDP and TCP. +Setting this value to 0 (or not defining it) will cause Amd to select +an arbitrary port number. Setting the Amq RPC service port to a +specific number is useful in firewalled or NAT'ed environments, where +you need to know which port Amd will listen on. + + +File: am-utils.info, Node: print_pid Parameter, Next: print_version Parameter, Prev: preferred_amq_port Parameter, Up: Global Parameters + +6.5.47 print_pid Parameter +-------------------------- + +(type=boolean, default=`no'). Same as the `-p' option to Amd. If +`yes', Amd will print its process ID upon starting. + + +File: am-utils.info, Node: print_version Parameter, Next: restart_mounts Parameter, Prev: print_pid Parameter, Up: Global Parameters + +6.5.48 print_version Parameter +------------------------------ + +(type=boolean, default=`no'). Same as the `-v' option to Amd, but the +version prints and Amd continues to run. If `yes', Amd will print its +version information string, which includes some configuration and +compilation values. + + +File: am-utils.info, Node: restart_mounts Parameter, Next: show_statfs_entries Parameter, Prev: print_version Parameter, Up: Global Parameters + +6.5.49 restart_mounts Parameter +------------------------------- + +(type=boolean, default=`no'). Same as the `-r' option to Amd. If +`yes' Amd will scan the mount table to determine which file systems are +currently mounted. Whenever one of these would have been auto-mounted, +Amd inherits it. + + +File: am-utils.info, Node: show_statfs_entries Parameter, Next: truncate_log Parameter, Prev: restart_mounts Parameter, Up: Global Parameters + +6.5.50 show_statfs_entries Parameter +------------------------------------ + +(type=boolean), default=`no'). If `yes', then all maps which are +browsable will also show the number of entries (keys) they have when +df(1) runs. (This is accomplished by returning non-zero values to the +statfs(2) system call). + + +File: am-utils.info, Node: truncate_log Parameter, Next: unmount_on_exit Parameter, Prev: show_statfs_entries Parameter, Up: Global Parameters + +6.5.51 truncate_log Parameter +----------------------------- + +(type=boolean), default=`no'). If `yes', then Amd will truncate the +log file (if it's a regular file) on startup. This could be useful +when conducting extensive testing on Amd maps (or Amd itself) and you +don't want to see log data from a previous run in the same file. + + +File: am-utils.info, Node: unmount_on_exit Parameter, Next: use_tcpwrappers Parameter, Prev: truncate_log Parameter, Up: Global Parameters + +6.5.52 unmount_on_exit Parameter +-------------------------------- + +(type=boolean, default=`no'). If `yes', then Amd will attempt to +unmount all file systems which it knows about. Normally it leaves all +(esp. NFS) mounted file systems intact. Note that Amd does not know +about file systems mounted before it starts up, unless the +`restart_mounts' option is used (*note restart_mounts Parameter::). + + +File: am-utils.info, Node: use_tcpwrappers Parameter, Next: vendor Parameter, Prev: unmount_on_exit Parameter, Up: Global Parameters + +6.5.53 use_tcpwrappers Parameter +-------------------------------- + +(type=boolean), default=`yes'). If `yes', then amd will use the +tcpwrappers (tcpd/librwap) library (if available) to control access to +Amd via the `/etc/hosts.allow' and `/etc/hosts.deny' files. Amd will +verify that the host running Amq is authorized to connect. The `amd' +service name must used in the `/etc/hosts.allow' and `/etc/hosts.deny' +files. For example, to allow only localhost to connect to Amd, add +this line to `/etc/hosts.allow': + + amd: localhost + + and this line to `/etc/hosts.deny': + + amd: ALL + + Consult the man pages for hosts_access(5) for more information on +using the tcpwrappers access-control library. + + Note that in particular, you should not configure your `hosts.allow' +file to spawn a command for Amd: that will cause Amd to not be able to +`waitpid' on the child process ID of any background un/mount that Amd +issued, resulting in a confused Amd that does not know what happened to +those background un/mount requests. + + +File: am-utils.info, Node: vendor Parameter, Prev: use_tcpwrappers Parameter, Up: Global Parameters + +6.5.54 vendor Parameter +----------------------- + +(type=string, default to compiled in value). The name of the vendor of +the operating system. Overrides the compiled-in vendor name. Useful +when the compiled-in name is not desired. For example, most Intel based +systems set the vendor name to `unknown', but you can set it to +`redhat'. + + +File: am-utils.info, Node: Regular Map Parameters, Next: amd.conf Examples, Prev: Global Parameters, Up: Amd Configuration File + +6.6 Regular Map Parameters +========================== + +The following parameters are applicable only to regular map sections. + +* Menu: + +* map_name Parameter:: +* tag Parameter:: + + +File: am-utils.info, Node: map_name Parameter, Next: tag Parameter, Prev: Regular Map Parameters, Up: Regular Map Parameters + +6.6.1 map_name Parameter +------------------------ + +(type=string, must be specified). Name of the map where the keys are +located. + + +File: am-utils.info, Node: tag Parameter, Prev: map_name Parameter, Up: Regular Map Parameters + +6.6.2 tag Parameter +------------------- + +(type=string, default no tag). Each map entry in the configuration file +can be tagged. If no tag is specified, that map section will always be +processed by Amd. If it is specified, then Amd will process the map if +the `-T' option was given to Amd, and the value given to that +command-line option matches that in the map section. + + +File: am-utils.info, Node: amd.conf Examples, Prev: Regular Map Parameters, Up: Amd Configuration File + +6.7 amd.conf Examples +===================== + +The following is the actual `amd.conf' file I used at the Computer +Science Department of Columbia University. + + # GLOBAL OPTIONS SECTION + [ global ] + normalize_hostnames = no + print_pid = no + #pid_file = /var/run/amd.pid + restart_mounts = yes + #unmount_on_exit = yes + auto_dir = /n + log_file = /var/log/amd + log_options = all + #debug_options = defaults + plock = no + selectors_in_defaults = yes + # config.guess picks up "sunos5" and I don't want to edit my maps yet + os = sos5 + # if you print_version after setting up "os", it will show it. + print_version = no + map_type = file + search_path = /etc/amdmaps:/usr/lib/amd:/usr/local/AMD/lib + browsable_dirs = yes + fully_qualified_hosts = no + + # DEFINE AN AMD MOUNT POINT + [ /u ] + map_name = amd.u + + [ /proj ] + map_name = amd.proj + + [ /src ] + map_name = amd.src + + [ /misc ] + map_name = amd.misc + + [ /import ] + map_name = amd.import + + [ /tftpboot/.amd ] + tag = tftpboot + map_name = amd.tftpboot + + +File: am-utils.info, Node: Run-time Administration, Next: FSinfo, Prev: Amd Configuration File, Up: Top + +7 Run-time Administration +************************* + +* Menu: + +* Starting Amd:: +* Stopping Amd:: +* Restarting Amd:: +* Controlling Amd:: + + +File: am-utils.info, Node: Starting Amd, Next: Stopping Amd, Prev: Run-time Administration, Up: Run-time Administration + +7.1 Starting Amd +================ + +Amd is best started from `/etc/rc.local' on BSD systems, or from the +appropriate start-level script in `/etc/init.d' on System V systems. + + if [ -f /usr/local/sbin/ctl-amd ]; then + /usr/local/sbin/ctl-amd start; (echo -n ' amd') > /dev/console + fi + +The shell script, `ctl-amd' is used to start, stop, or restart Amd. It +is a relatively generic script. All options you want to set should not +be made in this script, but rather updated in the `amd.conf' file. +*Note Amd Configuration File::. + + If you do not wish to use an Amd configuration file, you may start +Amd manually. For example, getting the map entries via NIS: + + amd -r -l /var/log/amd `ypcat -k auto.master` + + +File: am-utils.info, Node: Stopping Amd, Next: Restarting Amd, Prev: Starting Amd, Up: Run-time Administration + +7.2 Stopping Amd +================ + +Amd stops in response to two signals. + +`SIGTERM' + causes the top-level automount points to be unmounted and then Amd + to exit. Any automounted filesystems are left mounted. They can + be recovered by restarting Amd with the `-r' command line option. + +`SIGINT' + causes Amd to attempt to unmount any filesystems which it has + automounted, in addition to the actions of `SIGTERM'. This signal + is primarily used for debugging. + + Actions taken for other signals are undefined. + + The easiest and safest way to stop Amd, without having to find its +process ID by hand, is to use the `ctl-amd' script, as with: + + ctl-amd stop + + +File: am-utils.info, Node: Restarting Amd, Next: Controlling Amd, Prev: Stopping Amd, Up: Run-time Administration + +7.3 Restarting Amd +================== + +Before Amd can be started, it is vital to ensure that no other Amd +processes are managing any of the mount points, and that the previous +process(es) have terminated cleanly. When a terminating signal is set +to Amd, the automounter does _not_ terminate right then. Rather, it +starts by unmounting all of its managed mount mounts in the background, +and then terminates. It usually takes a few seconds for this process +to happen, but it can take an arbitrarily longer time. If two or more +Amd processes attempt to manage the same mount point, it usually will +result in a system lockup. + + The easiest and safest way to restart Amd, without having to find +its process ID by hand, sending it the `SIGTERM' signal, waiting for Amd +to die cleanly, and verifying so, is to use the `ctl-amd' script, as +with: + + ctl-amd restart + + The script will locate the process ID of Amd, kill it, and wait for +it to die cleanly before starting a new instance of the automounter. +`ctl-amd' will wait for a total of 30 seconds for Amd to die, and will +check once every 5 seconds if it had. + + +File: am-utils.info, Node: Controlling Amd, Prev: Restarting Amd, Up: Run-time Administration + +7.4 Controlling Amd +=================== + +It is sometimes desirable or necessary to exercise external control +over some of Amd's internal state. To support this requirement, Amd +implements an RPC interface which is used by the "Amq" program. A +variety of information is available. + + Amq generally applies an operation, specified by a single letter +option, to a list of mount points. The default operation is to obtain +statistics about each mount point. This is similar to the output shown +above but includes information about the number and type of accesses to +each mount point. + +* Menu: + +* Amq default:: Default command behavior. +* Amq -f option:: Flushing the map cache. +* Amq -h option:: Controlling a non-local host. +* Amq -H option:: Print help message. +* Amq -l option:: Controlling the log file. +* Amq -m option:: Obtaining mount statistics. +* Amq -p option:: Getting Amd's process ID. +* Amq -P option:: Contacting alternate Amd processes. +* Amq -q option:: Suppress synchronous unmounting errors. +* Amq -s option:: Obtaining global statistics. +* Amq -T option:: Use TCP transport. +* Amq -U option:: Use UDP transport. +* Amq -u option:: Forcing volumes to time out. +* Amq -v option:: Version information. +* Amq -w option:: Print Amd current working directory. +* Other Amq options:: Three other special options. + + +File: am-utils.info, Node: Amq default, Next: Amq -f option, Prev: Controlling Amd, Up: Controlling Amd + +7.4.1 Amq default information +----------------------------- + +With no arguments, "Amq" obtains a brief list of all existing mounts +created by Amd. This is different from the list displayed by df(1) +since the latter only includes system mount points. + +The output from this option includes the following information: + + * the automount point, + + * the filesystem type, + + * the mount map or mount information, + + * the internal, or system mount point. + +For example: + + / root "root" sky:(pid75) + /homes toplvl /usr/local/etc/amd.homes /homes + /home toplvl /usr/local/etc/amd.home /home + /homes/jsp nfs charm:/home/charm /a/charm/home/charm/jsp + /homes/phjk nfs toytown:/home/toytown /a/toytown/home/toytown/ai/phjk + +If an argument is given then statistics for that volume name will be +output. For example: + + What Uid Getattr Lookup RdDir RdLnk Statfs Mounted@ + /homes 0 1196 512 22 0 30 90/09/14 12:32:55 + /homes/jsp 0 0 0 0 1180 0 90/10/13 12:56:58 + +`What' + the volume name. + +`Uid' + ignored. + +`Getattr' + the count of NFS "getattr" requests on this node. This should + only be non-zero for directory nodes. + +`Lookup' + the count of NFS "lookup" requests on this node. This should only + be non-zero for directory nodes. + +`RdDir' + the count of NFS "readdir" requests on this node. This should only + be non-zero for directory nodes. + +`RdLnk' + the count of NFS "readlink" requests on this node. This should be + zero for directory nodes. + +`Statfs' + the count of NFS "statfs" requests on this node. This should only + be non-zero for top-level automount points. + +`Mounted@' + the date and time the volume name was first referenced. + + +File: am-utils.info, Node: Amq -f option, Next: Amq -h option, Prev: Amq default, Up: Controlling Amd + +7.4.2 Amq `-f' option +--------------------- + +The `-f' option causes Amd to flush the internal mount map cache. This +is useful for example in Hesiod maps since Amd will not automatically +notice when they have been updated. The map cache can also be +synchronized with the map source by using the `sync' option (*note +Automount Filesystem::). + + +File: am-utils.info, Node: Amq -h option, Next: Amq -H option, Prev: Amq -f option, Up: Controlling Amd + +7.4.3 Amq `-h' option +--------------------- + +By default the local host is used. In an HP-UX cluster the root server +is used since that is the only place in the cluster where Amd will be +running. To query Amd on another host the `-h' option should be used. + + +File: am-utils.info, Node: Amq -H option, Next: Amq -l option, Prev: Amq -h option, Up: Controlling Amd + +7.4.4 Amq `-H' option +--------------------- + +Print a brief help and usage string. + + +File: am-utils.info, Node: Amq -l option, Next: Amq -m option, Prev: Amq -H option, Up: Controlling Amd + +7.4.5 Amq `-l' option +--------------------- + +Tell Amd to use log_file as the log file name. For security reasons, +this _must_ be the same log file which Amd used when started. This +option is therefore only useful to refresh Amd's open file handle on +the log file, so that it can be rotated and compressed via daily cron +jobs. + + +File: am-utils.info, Node: Amq -m option, Next: Amq -p option, Prev: Amq -l option, Up: Controlling Amd + +7.4.6 Amq `-m' option +--------------------- + +The `-m' option displays similar information about mounted filesystems, +rather than automount points. The output includes the following +information: + + * the mount information, + + * the mount point, + + * the filesystem type, + + * the number of references to this filesystem, + + * the server hostname, + + * the state of the file server, + + * any error which has occurred. + + For example: + + "root" truth:(pid602) root 1 localhost is up + hesiod.home /home toplvl 1 localhost is up + hesiod.vol /vol toplvl 1 localhost is up + hesiod.homes /homes toplvl 1 localhost is up + amy:/home/amy /a/amy/home/amy nfs 5 amy is up + swan:/home/swan /a/swan/home/swan nfs 0 swan is up (Permission denied) + ex:/home/ex /a/ex/home/ex nfs 0 ex is down + + When the reference count is zero the filesystem is not mounted but +the mount point and server information is still being maintained by Amd. + + +File: am-utils.info, Node: Amq -p option, Next: Amq -P option, Prev: Amq -m option, Up: Controlling Amd + +7.4.7 Amq `-p' option +--------------------- + +Return the process ID of the remote or locally running Amd. Useful +when you need to send a signal to the local Amd process, and would +rather not have to search through the process table. This option is +used in the `ctl-amd' script. + + +File: am-utils.info, Node: Amq -P option, Next: Amq -q option, Prev: Amq -p option, Up: Controlling Amd + +7.4.8 Amq `-P' option +--------------------- + +Contact an alternate running Amd that had registered itself on a +different RPC PROGRAM_NUMBER and apply all other operations to that +instance of the automounter. This is useful when you run multiple +copies of Amd, and need to manage each one separately. If not +specified, Amq will use the default program number for Amd, 300019. +For security reasons, the only alternate program numbers Amd can use +range from 300019 to 300029, inclusive. + + For example, to kill an alternate running Amd: + + kill `amq -p -P 300020` + + +File: am-utils.info, Node: Amq -q option, Next: Amq -s option, Prev: Amq -P option, Up: Controlling Amd + +7.4.9 Amq `-q' option +--------------------- + +Suppress any error messages produced when a synchronous unmount fails. +See *Note Amq -u option::. + + +File: am-utils.info, Node: Amq -s option, Next: Amq -T option, Prev: Amq -q option, Up: Controlling Amd + +7.4.10 Amq `-s' option +---------------------- + +The `-s' option displays global statistics. If any other options are +specified or any filesystems named then this option is ignored. For +example: + + requests stale mount mount unmount + deferred fhandles ok failed failed + 1054 1 487 290 7017 + +`Deferred requests' + are those for which an immediate reply could not be constructed. + For example, this would happen if a background mount was required. + +`Stale filehandles' + counts the number of times the kernel passes a stale filehandle to + Amd. Large numbers indicate problems. + +`Mount ok' + counts the number of automounts which were successful. + +`Mount failed' + counts the number of automounts which failed. + +`Unmount failed' + counts the number of times a filesystem could not be unmounted. + Very large numbers here indicate that the time between unmount + attempts should be increased. + + +File: am-utils.info, Node: Amq -T option, Next: Amq -U option, Prev: Amq -s option, Up: Controlling Amd + +7.4.11 Amq `-T' option +---------------------- + +The `-T' option causes the Amq to contact Amd using the TCP transport +only (connection oriented). Normally, Amq will use TCP first, and if +that failed, will try UDP. + + +File: am-utils.info, Node: Amq -U option, Next: Amq -u option, Prev: Amq -T option, Up: Controlling Amd + +7.4.12 Amq `-U' option +---------------------- + +The `-U' option causes the Amq to contact Amd using the UDP transport +only (connectionless). Normally, Amq will use TCP first, and if that +failed, will try UDP. + + +File: am-utils.info, Node: Amq -u option, Next: Amq -v option, Prev: Amq -U option, Up: Controlling Amd + +7.4.13 Amq `-u' option +---------------------- + +The `-u' option causes the time-to-live interval of the named mount +points to be expired, thus causing an unmount attempt. This is the +only safe way to unmount an automounted filesystem. If `-u' is +repeated, then Amd will attempt to unmount the filesystem +synchronously. This makes things like + + amq -uu /t/cd0d && eject cd0 + +work as expected. Any error messages this might produce can be +suppressed with the `-q' option. See *Note Amq -q option::. + + +File: am-utils.info, Node: Amq -v option, Next: Amq -w option, Prev: Amq -u option, Up: Controlling Amd + +7.4.14 Amq `-v' option +---------------------- + +The `-v' option displays the version of Amd in a similar way to Amd's +`-v' option. + + +File: am-utils.info, Node: Amq -w option, Next: Other Amq options, Prev: Amq -v option, Up: Controlling Amd + +7.4.15 Amq `-w' option +---------------------- + +The `-w' option translates a full pathname as returned by getpwd(3) +into a short Amd pathname that goes through its mount points. This +option requires that Amd is running. + + +File: am-utils.info, Node: Other Amq options, Prev: Amq -w option, Up: Controlling Amd + +7.4.16 Other Amq options +------------------------ + +Two other operations are implemented. These modify the state of Amd as +a whole, rather than any particular filesystem. The `-x' and `-D' +options have exactly the same effect as Amd's corresponding command +line options. + + When Amd receives the `-x' flag, it disallows turning off the +`fatal' or `error' flags. Both are on by default. They are mandatory +so that Amd could report important errors, including errors relating to +turning flags on/off. + + +File: am-utils.info, Node: FSinfo, Next: Hlfsd, Prev: Run-time Administration, Up: Top + +8 FSinfo +******** + +XXX: this chapter should be reviewed by someone knowledgeable with +fsinfo. + +* Menu: + +* FSinfo Overview:: Introduction to FSinfo. +* Using FSinfo:: Basic concepts. +* FSinfo Grammar:: Language syntax, semantics and examples. +* FSinfo host definitions:: Defining a new host. +* FSinfo host attributes:: Definable host attributes. +* FSinfo filesystems:: Defining locally attached filesystems. +* FSinfo static mounts:: Defining additional static mounts. +* FSinfo automount definitions:: +* FSinfo Command Line Options:: +* FSinfo errors:: + + +File: am-utils.info, Node: FSinfo Overview, Next: Using FSinfo, Prev: FSinfo, Up: FSinfo + +8.1 FSinfo overview +=================== + +FSinfo is a filesystem management tool. It has been designed to work +with Amd to help system administrators keep track of the ever +increasing filesystem namespace under their control. + + The purpose of FSinfo is to generate all the important standard +filesystem data files from a single set of input data. Starting with a +single data source guarantees that all the generated files are +self-consistent. One of the possible output data formats is a set of +Amd maps which can be used among the set of hosts described in the +input data. + + FSinfo implements a declarative language. This language is +specifically designed for describing filesystem namespace and physical +layouts. The basic declaration defines a mounted filesystem including +its device name, mount point, and all the volumes and access +permissions. FSinfo reads this information and builds an internal map +of the entire network of hosts. Using this map, many different data +formats can be produced including `/etc/fstab', `/etc/exports', Amd +mount maps and `/etc/bootparams'. + + +File: am-utils.info, Node: Using FSinfo, Next: FSinfo Grammar, Prev: FSinfo Overview, Up: FSinfo + +8.2 Using FSinfo +================ + +The basic strategy when using FSinfo is to gather all the information +about all disks on all machines into one set of declarations. For each +machine being managed, the following data is required: + + * Hostname + + * List of all filesystems and, optionally, their mount points. + + * Names of volumes stored on each filesystem. + + * NFS export information for each volume. + + * The list of static filesystem mounts. + + The following information can also be entered into the same +configuration files so that all data can be kept in one place. + + * List of network interfaces + + * IP address of each interface + + * Hardware address of each interface + + * Dumpset to which each filesystem belongs + + * and more ... + + To generate Amd mount maps, the automount tree must also be defined +(*note FSinfo automount definitions::). This will have been designed at +the time the volume names were allocated. Some volume names will not be +automounted, so FSinfo needs an explicit list of which volumes should +be automounted. + + Hostnames are required at several places in the FSinfo language. It +is important to stick to either fully qualified names or unqualified +names. Using a mixture of the two will inevitably result in confusion. + + Sometimes volumes need to be referenced which are not defined in the +set of hosts being managed with FSinfo. The required action is to add a +dummy set of definitions for the host and volume names required. Since +the files generated for those particular hosts will not be used on them, +the exact values used is not critical. + + +File: am-utils.info, Node: FSinfo Grammar, Next: FSinfo host definitions, Prev: Using FSinfo, Up: FSinfo + +8.3 FSinfo grammar +================== + +FSinfo has a relatively simple grammar. Distinct syntactic constructs +exist for each of the different types of data, though they share a +common flavor. Several conventions are used in the grammar fragments +below. + + The notation, list(xxx), indicates a list of zero or more xxx's. +The notation, opt(xxx), indicates zero or one xxx. Items in double +quotes, eg "host", represent input tokens. Items in angle brackets, eg +<HOSTNAME>, represent strings in the input. Strings need not be in +double quotes, except to differentiate them from reserved words. +Quoted strings may include the usual set of C "\" escape sequences with +one exception: a backslash-newline-whitespace sequence is squashed into +a single space character. To defeat this feature, put a further +backslash at the start of the second line. + + At the outermost level of the grammar, the input consists of a +sequence of host and automount declarations. These declarations are +all parsed before they are analyzed. This means they can appear in any +order and cyclic host references are possible. + + fsinfo : list(fsinfo_attr) ; + + fsinfo_attr : host | automount ; + +* Menu: + +* FSinfo host definitions:: +* FSinfo automount definitions:: + + +File: am-utils.info, Node: FSinfo host definitions, Next: FSinfo host attributes, Prev: FSinfo Grammar, Up: FSinfo + +8.4 FSinfo host definitions +=========================== + +A host declaration consists of three parts: a set of machine attribute +data, a list of filesystems physically attached to the machine, and a +list of additional statically mounted filesystems. + + host : "host" host_data list(filesystem) list(mount) ; + + Each host must be declared in this way exactly once. Such things as +the hardware address, the architecture and operating system types and +the cluster name are all specified within the "host data". + + All the disks the machine has should then be described in the "list +of filesystems". When describing disks, you can specify what "volname" +the disk/partition should have and all such entries are built up into a +dictionary which can then be used for building the automounter maps. + + The "list of mounts" specifies all the filesystems that should be +statically mounted on the machine. + +* Menu: + +* FSinfo host attributes:: +* FSinfo filesystems:: +* FSinfo static mounts:: + + +File: am-utils.info, Node: FSinfo host attributes, Next: FSinfo filesystems, Prev: FSinfo host definitions, Up: FSinfo host definitions + +8.5 FSinfo host attributes +========================== + +The host data, "host_data", always includes the "hostname". In +addition, several other host attributes can be given. + + host_data : <HOSTNAME> + | "{" list(host_attrs) "}" <HOSTNAME> + ; + + host_attrs : host_attr "=" <STRING> + | netif + ; + + host_attr : "config" + | "arch" + | "os" + | "cluster" + ; + + The "hostname" is, typically, the fully qualified hostname of the +machine. + + Examples: + + host dylan.doc.ic.ac.uk + + host { + os = hpux + arch = hp300 + } dougal.doc.ic.ac.uk + + The options that can be given as host attributes are shown below. + +* Menu: + +* FSinfo netif Option:: FSinfo host netif. +* FSinfo config Option:: FSinfo host config. +* FSinfo arch Option:: FSinfo host arch. +* FSinfo os Option:: FSinfo host os. +* FSinfo cluster Option:: FSinfo host cluster. + + +File: am-utils.info, Node: FSinfo netif Option, Next: FSinfo config Option, Up: FSinfo host attributes + +8.5.1 netif Option +------------------ + +This defines the set of network interfaces configured on the machine. +The interface attributes collected by FSinfo are the IP address, subnet +mask and hardware address. Multiple interfaces may be defined for +hosts with several interfaces by an entry for each interface. The +values given are sanity checked, but are currently unused for anything +else. + + netif : "netif" <STRING> "{" list(netif_attrs) "}" ; + + netif_attrs : netif_attr "=" <STRING> ; + + netif_attr : "inaddr" | "netmask" | "hwaddr" ; + + Examples: + + netif ie0 { + inaddr = 129.31.81.37 + netmask = 0xfffffe00 + hwaddr = "08:00:20:01:a6:a5" + } + + netif ec0 { } + + +File: am-utils.info, Node: FSinfo config Option, Next: FSinfo arch Option, Prev: FSinfo netif Option, Up: FSinfo host attributes + +8.5.2 config Option +------------------- + +This option allows you to specify configuration variables for the +startup scripts (`rc' scripts). A simple string should immediately +follow the keyword. + + Example: + + config "NFS_SERVER=true" + config "ZEPHYR=true" + + This option is currently unsupported. + + +File: am-utils.info, Node: FSinfo arch Option, Next: FSinfo os Option, Prev: FSinfo config Option, Up: FSinfo host attributes + +8.5.3 arch Option +----------------- + +This defines the architecture of the machine. For example: + + arch = hp300 + + This is intended to be of use when building architecture specific +mountmaps, however, the option is currently unsupported. + + +File: am-utils.info, Node: FSinfo os Option, Next: FSinfo cluster Option, Prev: FSinfo arch Option, Up: FSinfo host attributes + +8.5.4 os Option +--------------- + +This defines the operating system type of the host. For example: + + os = hpux + + This information is used when creating the `fstab' files, for +example in choosing which format to use for the `fstab' entries within +the file. + + +File: am-utils.info, Node: FSinfo cluster Option, Prev: FSinfo os Option, Up: FSinfo host attributes + +8.5.5 cluster Option +-------------------- + +This is used for specifying in which cluster the machine belongs. For +example: + + cluster = "theory" + + The cluster is intended to be used when generating the automount +maps, although it is currently unsupported. + + +File: am-utils.info, Node: FSinfo filesystems, Next: FSinfo static mounts, Prev: FSinfo host attributes, Up: FSinfo host definitions + +8.6 FSinfo filesystems +====================== + +The list of physically attached filesystems follows the machine +attributes. These should define all the filesystems available from this +machine, whether exported or not. In addition to the device name, +filesystems have several attributes, such as filesystem type, mount +options, and `fsck' pass number which are needed to generate `fstab' +entries. + + filesystem : "fs" <DEVICE> "{" list(fs_data) "}" ; + + fs_data : fs_data_attr "=" <STRING> + | mount + ; + + fs_data_attr + : "fstype" | "opts" | "passno" + | "freq" | "dumpset" | "log" + ; + + Here, <DEVICE> is the device name of the disk (for example, +`/dev/dsk/2s0'). The device name is used for building the mount maps +and for the `fstab' file. The attributes that can be specified are +shown in the following section. + + The FSinfo configuration file for `dylan.doc.ic.ac.uk' is listed +below. + + host dylan.doc.ic.ac.uk + + fs /dev/dsk/0s0 { + fstype = swap + } + + fs /dev/dsk/0s0 { + fstype = hfs + opts = rw,noquota,grpid + passno = 0; + freq = 1; + mount / { } + } + + fs /dev/dsk/1s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount /usr { + local { + exportfs "dougal eden dylan zebedee brian" + volname /nfs/hp300/local + } + } + } + + fs /dev/dsk/2s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default { + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk2 + } + } + + fs /dev/dsk/3s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default { + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk3 + } + } + + fs /dev/dsk/5s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default { + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk5 + } + } + +* Menu: + +* FSinfo fstype Option:: FSinfo filesystems fstype. +* FSinfo opts Option:: FSinfo filesystems opts. +* FSinfo passno Option:: FSinfo filesystems passno. +* FSinfo freq Option:: FSinfo filesystems freq. +* FSinfo mount Option:: FSinfo filesystems mount. +* FSinfo dumpset Option:: FSinfo filesystems dumpset. +* FSinfo log Option:: FSinfo filesystems log. + + +File: am-utils.info, Node: FSinfo fstype Option, Next: FSinfo opts Option, Up: FSinfo filesystems + +8.6.1 fstype Option +------------------- + +This specifies the type of filesystem being declared and will be placed +into the `fstab' file as is. The value of this option will be handed +to `mount' as the filesystem type--it should have such values as `4.2', +`nfs' or `swap'. The value is not examined for correctness. + + There is one special case. If the filesystem type is specified as +`export' then the filesystem information will not be added to the +host's `fstab' information, but it will still be visible on the +network. This is useful for defining hosts which contain referenced +volumes but which are not under full control of FSinfo. + + Example: + + fstype = swap + + +File: am-utils.info, Node: FSinfo opts Option, Next: FSinfo passno Option, Prev: FSinfo fstype Option, Up: FSinfo filesystems + +8.6.2 opts Option +----------------- + +This defines any options that should be given to mount(8) in the +`fstab' file. For example: + + opts = rw,nosuid,grpid + + +File: am-utils.info, Node: FSinfo passno Option, Next: FSinfo freq Option, Prev: FSinfo opts Option, Up: FSinfo filesystems + +8.6.3 passno Option +------------------- + +This defines the fsck(8) pass number in which to check the filesystem. +This value will be placed into the `fstab' file. + + Example: + + passno = 1 + + +File: am-utils.info, Node: FSinfo freq Option, Next: FSinfo mount Option, Prev: FSinfo passno Option, Up: FSinfo filesystems + +8.6.4 freq Option +----------------- + +This defines the interval (in days) between dumps. The value is placed +as is into the `fstab' file. + + Example: + + freq = 3 + + +File: am-utils.info, Node: FSinfo mount Option, Next: FSinfo dumpset Option, Prev: FSinfo freq Option, Up: FSinfo filesystems + +8.6.5 mount Option +------------------ + +This defines the mountpoint at which to place the filesystem. If the +mountpoint of the filesystem is specified as `default', then the +filesystem will be mounted in the automounter's tree under its volume +name and the mount will automatically be inherited by the automounter. + + Following the mountpoint, namespace information for the filesystem +may be described. The options that can be given here are `exportfs', +`volname' and `sel'. + + The format is: + + mount : "mount" vol_tree ; + + vol_tree : list(vol_tree_attr) ; + + vol_tree_attr + : <STRING> "{" list(vol_tree_info) vol_tree "}" ; + + vol_tree_info + : "exportfs" <EXPORT-DATA> + | "volname" <VOLNAME> + | "sel" <SELECTOR-LIST> + ; + + Example: + + mount default { + exportfs "dylan dougal florence zebedee" + volname /vol/andrew + } + + In the above example, the filesystem currently being declared will +have an entry placed into the `exports' file allowing the filesystem to +be exported to the machines `dylan', `dougal', `florence' and +`zebedee'. The volume name by which the filesystem will be referred to +remotely, is `/vol/andrew'. By declaring the mountpoint to be +`default', the filesystem will be mounted on the local machine in the +automounter tree, where Amd will automatically inherit the mount as +`/vol/andrew'. + +`exportfs' + a string defining which machines the filesystem may be exported to. + This is copied, as is, into the `exports' file--no sanity checking + is performed on this string. + +`volname' + a string which declares the remote name by which to reference the + filesystem. The string is entered into a dictionary and allows + you to refer to this filesystem in other places by this volume + name. + +`sel' + a string which is placed into the automounter maps as a selector + for the filesystem. + + + +File: am-utils.info, Node: FSinfo dumpset Option, Next: FSinfo log Option, Prev: FSinfo mount Option, Up: FSinfo filesystems + +8.6.6 dumpset Option +-------------------- + +This provides support for Imperial College's local file backup tools and +is not documented further here. + + +File: am-utils.info, Node: FSinfo log Option, Prev: FSinfo dumpset Option, Up: FSinfo filesystems + +8.6.7 log Option +---------------- + +Specifies the log device for the current filesystem. This is ignored if +not required by the particular filesystem type. + + +File: am-utils.info, Node: FSinfo static mounts, Next: FSinfo automount definitions, Prev: FSinfo filesystems, Up: FSinfo host definitions + +8.7 FSinfo static mounts +======================== + +Each host may also have a number of statically mounted filesystems. For +example, the host may be a diskless workstation in which case it will +have no `fs' declarations. In this case the `mount' declaration is +used to determine from where its filesystems will be mounted. In +addition to being added to the `fstab' file, this information can also +be used to generate a suitable `bootparams' file. + + mount : "mount" <VOLNAME> list(localinfo) ; + + localinfo : localinfo_attr <STRING> ; + + localinfo_attr + : "as" + | "from" + | "fstype" + | "opts" + ; + + The filesystem specified to be mounted will be searched for in the +dictionary of volume names built when scanning the list of hosts' +definitions. + + The attributes have the following semantics: +`from MACHINE' + mount the filesystem from the machine with the hostname of + "machine". + +`as MOUNTPOINT' + mount the filesystem locally as the name given, in case this is + different from the advertised volume name of the filesystem. + +`opts OPTIONS' + native mount(8) options. + +`fstype TYPE' + type of filesystem to be mounted. + + An example: + + mount /export/exec/hp300/local as /usr/local + + If the mountpoint specified is either `/' or `swap', the machine +will be considered to be booting off the net and this will be noted for +use in generating a `bootparams' file for the host which owns the +filesystems. + + +File: am-utils.info, Node: FSinfo automount definitions, Next: FSinfo Command Line Options, Prev: FSinfo static mounts, Up: FSinfo + +8.8 Defining an Amd Mount Map in FSinfo +======================================= + +The maps used by Amd can be constructed from FSinfo by defining all the +automount trees. FSinfo takes all the definitions found and builds one +map for each top level tree. + + The automount tree is usually defined last. A single automount +configuration will usually apply to an entire management domain. One +`automount' declaration is needed for each Amd automount point. FSinfo +determines whether the automount point is "direct" (*note Direct +Automount Filesystem::) or "indirect" (*note Top-level Filesystem::). +Direct automount points are distinguished by the fact that there is no +underlying "automount_tree". + + automount : "automount" opt(auto_opts) automount_tree ; + + auto_opts : "opts" <MOUNT-OPTIONS> ; + + automount_tree + : list(automount_attr) + ; + + automount_attr + : <STRING> "=" <VOLNAME> + | <STRING> "->" <SYMLINK> + | <STRING> "{" automount_tree "}" + ; + + If <MOUNT-OPTIONS> is given, then it is the string to be placed in +the maps for Amd for the `opts' option. + + A "map" is typically a tree of filesystems, for example `home' +normally contains a tree of filesystems representing other machines in +the network. + + A map can either be given as a name representing an already defined +volume name, or it can be a tree. A tree is represented by placing +braces after the name. For example, to define a tree `/vol', the +following map would be defined: + + automount /vol { } + + Within a tree, the only items that can appear are more maps. For +example: + + automount /vol { + andrew { } + X11 { } + } + + In this case, FSinfo will look for volumes named `/vol/andrew' and +`/vol/X11' and a map entry will be generated for each. If the volumes +are defined more than once, then FSinfo will generate a series of +alternate entries for them in the maps. + + Instead of a tree, either a link (NAME `->' DESTINATION) or a +reference can be specified (NAME `=' DESTINATION). A link creates a +symbolic link to the string specified, without further processing the +entry. A reference will examine the destination filesystem and +optimize the reference. For example, to create an entry for `njw' in +the `/homes' map, either of the two forms can be used: + + automount /homes { + njw -> /home/dylan/njw + } + + or + + automount /homes { + njw = /home/dylan/njw + } + + In the first example, when `/homes/njw' is referenced from Amd, a +link will be created leading to `/home/dylan/njw' and the automounter +will be referenced a second time to resolve this filename. The map +entry would be: + + njw type:=link;fs:=/home/dylan/njw + + In the second example, the destination directory is analyzed and +found to be in the filesystem `/home/dylan' which has previously been +defined in the maps. Hence the map entry will look like: + + njw rhost:=dylan;rfs:=/home/dylan;sublink:=njw + + Creating only one symbolic link, and one access to Amd. + + +File: am-utils.info, Node: FSinfo Command Line Options, Next: FSinfo errors, Prev: FSinfo automount definitions, Up: FSinfo + +8.9 FSinfo Command Line Options +=============================== + +FSinfo is started from the command line by using the command: + + fsinfo [options] files ... + + The input to FSinfo is a single set of definitions of machines and +automount maps. If multiple files are given on the command-line, then +the files are concatenated together to form the input source. The files +are passed individually through the C pre-processor before being parsed. + + Several options define a prefix for the name of an output file. If +the prefix is not specified no output of that type is produced. The +suffix used will correspond either to the hostname to which a file +belongs, or to the type of output if only one file is produced. +Dumpsets and the `bootparams' file are in the latter class. To put the +output into a subdirectory simply put a `/' at the end of the prefix, +making sure that the directory has already been made before running +Fsinfo. + +* Menu: + +* -a FSinfo Option:: Amd automount directory: +* -b FSinfo Option:: Prefix for bootparams files. +* -d FSinfo Option:: Prefix for dumpset data files. +* -e FSinfo Option:: Prefix for exports files. +* -f FSinfo Option:: Prefix for fstab files. +* -h FSinfo Option:: Local hostname. +* -m FSinfo Option:: Prefix for automount maps. +* -q FSinfo Option:: Ultra quiet mode. +* -v FSinfo Option:: Verbose mode. +* -I FSinfo Option:: Define new #include directory. +* -D-FSinfo Option:: Define macro. +* -U FSinfo Option:: Undefine macro. + + +File: am-utils.info, Node: -a FSinfo Option, Next: -b FSinfo Option, Prev: FSinfo Command Line Options, Up: FSinfo Command Line Options + +8.9.1 `-a' AUTODIR +------------------ + +Specifies the directory name in which to place the automounter's +mountpoints. This defaults to `/a'. Some sites have the autodir set +to be `/amd', and this would be achieved by: + + fsinfo -a /amd ... + + +File: am-utils.info, Node: -b FSinfo Option, Next: -d FSinfo Option, Prev: -a FSinfo Option, Up: FSinfo Command Line Options + +8.9.2 `-b' BOOTPARAMS +--------------------- + +This specifies the prefix for the `bootparams' filename. If it is not +given, then the file will not be generated. The `bootparams' file will +be constructed for the destination machine and will be placed into a +file named `bootparams' and prefixed by this string. The file +generated contains a list of entries describing each diskless client +that can boot from the destination machine. + + As an example, to create a `bootparams' file in the directory +`generic', the following would be used: + + fsinfo -b generic/ ... + + +File: am-utils.info, Node: -d FSinfo Option, Next: -e FSinfo Option, Prev: -b FSinfo Option, Up: FSinfo Command Line Options + +8.9.3 `-d' DUMPSETS +------------------- + +This specifies the prefix for the `dumpsets' file. If it is not +specified, then the file will not be generated. The file will be for +the destination machine and will be placed into a filename `dumpsets', +prefixed by this string. The `dumpsets' file is for use by Imperial +College's local backup system. + + For example, to create a `dumpsets' file in the directory `generic', +then you would use the following: + + fsinfo -d generic/ ... + + +File: am-utils.info, Node: -e FSinfo Option, Next: -f FSinfo Option, Prev: -d FSinfo Option, Up: FSinfo Command Line Options + +8.9.4 `-e' EXPORTFS +------------------- + +Defines the prefix for the `exports' files. If it is not given, then +the file will not be generated. For each machine defined in the +configuration files as having disks, an `exports' file is constructed +and given a filename determined by the name of the machine, prefixed +with this string. If a machine is defined as diskless, then no +`exports' file will be created for it. The files contain entries for +directories on the machine that may be exported to clients. + + Example: To create the `exports' files for each diskfull machine and +place them into the directory `exports': + + fsinfo -e exports/ ... + + +File: am-utils.info, Node: -f FSinfo Option, Next: -h FSinfo Option, Prev: -e FSinfo Option, Up: FSinfo Command Line Options + +8.9.5 `-f' FSTAB +---------------- + +This defines the prefix for the `fstab' files. The files will only be +created if this prefix is defined. For each machine defined in the +configuration files, a `fstab' file is created with the filename +determined by prefixing this string with the name of the machine. These +files contain entries for filesystems and partitions to mount at boot +time. + + Example, to create the files in the directory `fstabs': + + fsinfo -f fstabs/ ... + + +File: am-utils.info, Node: -h FSinfo Option, Next: -m FSinfo Option, Prev: -f FSinfo Option, Up: FSinfo Command Line Options + +8.9.6 `-h' HOSTNAME +------------------- + +Defines the hostname of the destination machine to process for. If this +is not specified, it defaults to the local machine name, as returned by +gethostname(2). + + Example: + + fsinfo -h dylan.doc.ic.ac.uk ... + + +File: am-utils.info, Node: -m FSinfo Option, Next: -q FSinfo Option, Prev: -h FSinfo Option, Up: FSinfo Command Line Options + +8.9.7 `-m' MOUNT-MAPS +--------------------- + +Defines the prefix for the automounter files. The maps will only be +produced if this prefix is defined. The mount maps suitable for the +network defined by the configuration files will be placed into files +with names calculated by prefixing this string to the name of each map. + + For example, to create the automounter maps and place them in the +directory `automaps': + + fsinfo -m automaps/ ... + + +File: am-utils.info, Node: -q FSinfo Option, Next: -v FSinfo Option, Prev: -m FSinfo Option, Up: FSinfo Command Line Options + +8.9.8 `-q' +---------- + +Selects quiet mode. FSinfo suppress the "running commentary" and only +outputs any error messages which are generated. + + +File: am-utils.info, Node: -v FSinfo Option, Next: -D-FSinfo Option, Prev: -q FSinfo Option, Up: FSinfo Command Line Options + +8.9.9 `-v' +---------- + +Selects verbose mode. When this is activated, the program will display +more messages, and display all the information discovered when +performing the semantic analysis phase. Each verbose message is output +to `stdout' on a line starting with a `#' character. + + +File: am-utils.info, Node: -D-FSinfo Option, Next: -I FSinfo Option, Prev: -v FSinfo Option, Up: FSinfo Command Line Options + +8.9.10 `-D' NAME[=defn] +----------------------- + +Defines a symbol "name" for the preprocessor when reading the +configuration files. Equivalent to `#define' directive. + + +File: am-utils.info, Node: -I FSinfo Option, Next: -U FSinfo Option, Prev: -D-FSinfo Option, Up: FSinfo Command Line Options + +8.9.11 `-I' DIRECTORY +--------------------- + +This option is passed into the preprocessor for the configuration files. +It specifies directories in which to find include files + + +File: am-utils.info, Node: -U FSinfo Option, Prev: -I FSinfo Option, Up: FSinfo Command Line Options + +8.9.12 `-U' NAME +---------------- + +Removes any initial definition of the symbol "name". Inverse of the +`-D' option. + + +File: am-utils.info, Node: FSinfo errors, Prev: FSinfo Command Line Options, Up: FSinfo + +8.10 Errors produced by FSinfo +============================== + +The following table documents the errors and warnings which FSinfo may +produce. + +" expected + Occurs if an unescaped newline is found in a quoted string. + +ambiguous mount: VOLUME is a replicated filesystem + If several filesystems are declared as having the same volume + name, they will be considered replicated filesystems. To mount a + replicated filesystem statically, a specific host will need to be + named, to say which particular copy to try and mount, else this + error will result. + +can't open FILENAME for writing + Occurs if any errors are encountered when opening an output file. + +cannot determine localname since volname VOLUME is not uniquely defined + If a volume is replicated and an attempt is made to mount the + filesystem statically without specifying a local mountpoint, + FSinfo cannot calculate a mountpoint, as the desired pathname + would be ambiguous. + +DEVICE has duplicate exportfs data + Produced if the `exportfs' option is used multiple times within the + same branch of a filesystem definition. For example, if you + attempt to set the `exportfs' data at different levels of the + mountpoint directory tree. + +dump frequency for HOST:DEVICE is non-zero + Occurs if DEVICE has its `fstype' declared to be `swap' or + `export' and the `dump' option is set to a value greater than + zero. Swap devices should not be dumped. + +duplicate host HOSTNAME! + If a host has more than one definition. + +end of file within comment + A comment was unterminated before the end of one of the + configuration files. + +FILENAME: cannot open for reading + If a file specified on the command line as containing + configuration data could not be opened. + +FILESYSTEM has a volname but no exportfs data + Occurs when a volume name is declared for a file system, but the + string specifying what machines the filesystem can be exported to + is missing. + +fs field "FIELD-NAME" already set + Occurs when multiple definitions are given for one of the + attributes of a host's filesystem. + +host field "FIELD-NAME" already set + If duplicate definitions are given for any of the fields with a + host definition. + +HOST:DEVICE has more than one mount point + Occurs if the mount option for a host's filesystem specifies + multiple trees at which to place the mountpoint. + +HOST:DEVICE has no mount point + Occurs if the `mount' option is not specified for a host's + filesystem. + +HOST:DEVICE needs field "FIELD-NAME" + Occurs when a filesystem is missing a required field. FIELD-NAME + could be one of `fstype', `opts', `passno' or `mount'. + +HOST:mount field specified for swap partition + Occurs if a mountpoint is given for a filesystem whose type is + declared to be `swap'. + +malformed IP dotted quad: ADDRESS + If the Internet address of an interface is incorrectly specified. + An Internet address definition is handled to inet_addr(3N) to see + if it can cope. If not, then this message will be displayed. + +malformed netmask: NETMASK + If the netmask cannot be decoded as though it were a hexadecimal + number, then this message will be displayed. It will typically be + caused by incorrect characters in the NETMASK value. + +mount field "FIELD-NAME" already set + Occurs when a static mount has multiple definitions of the same + field. + +mount tree field "FIELD-NAME" already set + Occurs when the FIELD-NAME is defined more than once during the + definition of a filesystems mountpoint. + +netif field FIELD-NAME already set + Occurs if you attempt to define an attribute of an interface more + than once. + +network booting requires both root and swap areas + Occurs if a machine has mount declarations for either the root + partition or the swap area, but not both. You cannot define a + machine to only partially boot via the network. + +no disk mounts on HOSTNAME + If there are no static mounts, nor local disk mounts specified for + a machine, this message will be displayed. + +no volname given for HOST:DEVICE + Occurs when a filesystem is defined to be mounted on `default', but + no volume name is given for the file system, then the mountpoint + cannot be determined. + +not allowed '/' in a directory name + Occurs when a pathname with multiple directory elements is + specified as the name for an automounter tree. A tree should only + have one name at each level. + +pass number for HOST:DEVICE is non-zero + Occurs if DEVICE has its `fstype' declared to be `swap' or + `export' and the fsck(8) pass number is set. Swap devices should + not be fsck'd. *Note FSinfo fstype Option::. + +sub-directory DIRECTORY of DIRECTORY-TREE starts with '/' + Within the filesystem specification for a host, if an element + DIRECTORY of the mountpoint begins with a `/' and it is not the + start of the tree. + +sub-directory of DIRECTORY-TREE is named "default" + `default' is a keyword used to specify if a mountpoint should be + automatically calculated by FSinfo. If you attempt to specify a + directory name as this, it will use the filename of `default' but + will produce this warning. + +unknown \ sequence + Occurs if an unknown escape sequence is found inside a string. + Within a string, you can give the standard C escape sequences for + strings, such as newlines and tab characters. + +unknown directory attribute + If an unknown keyword is found while reading the definition of a + host's filesystem mount option. + +unknown filesystem attribute + Occurs if an unrecognized keyword is used when defining a host's + filesystems. + +unknown host attribute + Occurs if an unrecognized keyword is used when defining a host. + +unknown mount attribute + Occurs if an unrecognized keyword is found while parsing the list + of static mounts. + +unknown volname VOLUME automounted [ on name ] + Occurs if VOLUME is used in a definition of an automount map but + the volume name has not been declared during the host filesystem + definitions. + +volname VOLUME is unknown + Occurs if an attempt is made to mount or reference a volume name + which has not been declared during the host filesystem definitions. + +volname VOLUME not exported from MACHINE + Occurs if you attempt to mount the volume VOLUME from a machine + which has not declared itself to have such a filesystem available. + + + +File: am-utils.info, Node: Hlfsd, Next: Assorted Tools, Prev: FSinfo, Up: Top + +9 Hlfsd +******* + +Hlfsd is a daemon which implements a filesystem containing a symbolic +link to subdirectory within a user's home directory, depending on the +user which accessed that link. It was primarily designed to redirect +incoming mail to users' home directories, so that it can be read from +anywhere. It was designed and implemented by Erez Zadok +(http://www.cs.sunysb.edu/~ezk) and Alexander Dupuy <dupuy AT +cs.columbia.edu>, at the Computer Science Department +(http://www.cs.columbia.edu/) of Columbia University +(http://www.columbia.edu/). A paper +(http://www.fsl.cs.sunysb.edu/docs/hlfsd/hlfsd.html) on Hlfsd was +presented at the Usenix LISA VII conference in 1993. + + Hlfsd operates by mounting itself as an NFS server for the directory +containing linkname, which defaults to `/hlfs/home'. Lookups within +that directory are handled by Hlfsd, which uses the password map to +determine how to resolve the lookup. The directory will be created if +it doesn't already exist. The symbolic link will be to the accessing +user's home directory, with subdir appended to it. If not specified, +subdir defaults to `.hlfsdir'. This directory will also be created if +it does not already exist. + + A `SIGTERM' sent to Hlfsd will cause it to shutdown. A `SIGHUP' +will flush the internal caches, and reload the password map. It will +also close and reopen the log file, to enable the original log file to +be removed or rotated. A `SIGUSR1' will cause it to dump its internal +table of user IDs and home directories to the file `/tmp/hlfsddump'. + +* Menu: + +* Introduction to Hlfsd:: +* Background to Mail Delivery:: +* Using Hlfsd:: + + +File: am-utils.info, Node: Introduction to Hlfsd, Next: Background to Mail Delivery, Prev: Hlfsd, Up: Hlfsd + +9.1 Introduction to Hlfsd +========================= + +Electronic mail has become one of the major applications for many +computer networks, and use of this service is expected to increase over +time, as networks proliferate and become faster. Providing a convenient +environment for users to read, compose, and send electronic mail has +become a requirement for systems administrators (SAs). + + Widely used methods for handling mail usually require users to be +logged into a designated "home" machine, where their mailbox files +reside. Only on that one machine can they read newly arrived mail. +Since users have to be logged into that system to read their mail, they +often find it convenient to run all of their other processes on that +system as well, including memory and CPU-intensive jobs. For example, +in our department, we have allocated and configured several +multi-processor servers to handle such demanding CPU/memory +applications, but these were underutilized, in large part due to the +inconvenience of not being able to read mail on those machines. (No +home directories were located on these designated CPU-servers, since we +did not want NFS service for users' home directories to have to compete +with CPU-intensive jobs. At the same time, we discouraged users from +running demanding applications on their home machines.) + + Many different solutions have been proposed to allow users to read +their mail on any host. However, all of these solutions fail in one or +more of several ways: + + * they introduce new single points of failure + + * they require using different mail transfer agents (MTAs) or user + agents (UAs) + + * they do not solve the problem for all cases, i.e. the solution is + only partially successful for a particular environment. + + + We have designed a simple filesystem, called the "Home-Link File +System", to provide the ability to deliver mail to users' home +directories, without modification to mail-related applications. We have +endeavored to make it as stable as possible. Of great importance to us +was to make sure the HLFS daemon, `hlfsd' , would not hang under any +circumstances, and would take the next-best action when faced with +problems. Compared to alternative methods, Hlfsd is a stable, more +general solution, and easier to install/use. In fact, in some ways, we +have even managed to improve the reliability and security of mail +service. + + Our server implements a small filesystem containing a symbolic link +to a subdirectory of the invoking user's home directory, and named +symbolic links to users' mailbox files. + + The Hlfsd server finds out the UID of the process that is accessing +its mount point, and resolves the pathname component `home' as a +symbolic link to a subdirectory within the home directory given by the +UID's entry in the password file. If the GID of the process that +attempts to access a mailbox file is a special one (called HLFS_GID), +then the server maps the name of the _next_ pathname component directly +to the user's mailbox. This is necessary so that access to a mailbox +file by users other than the owner can succeed. The server has safety +features in case of failures such as hung filesystems or home directory +filesystems that are inaccessible or full. + + On most of our machines, mail gets delivered to the directory +`/var/spool/mail'. Many programs, including UAs, depend on that path. +Hlfsd creates a directory `/mail', and mounts itself on top of that +directory. Hlfsd implements the path name component called `home', +pointing to a subdirectory of the user's home directory. We have made +`/var/spool/mail' a symbolic link to `/mail/home', so that accessing +`/var/spool/mail' actually causes access to a subdirectory within a +user's home directory. + + The following table shows an example of how resolving the pathname +`/var/mail/NAME' to `/users/ezk/.mailspool/NAME' proceeds. + +Resolving Component Pathname left to resolve Value if symbolic link +/ var/mail/NAME +var/ mail/NAME +mail@ /mail/home/NAME mail@ -> /mail/home +/ mail/home/NAME +mail/ home/NAME +home@ NAME home@ -> + /users/ezk/.mailspool +/ users/ezk/.mailspool/NAME +users/ ezk/.mailspool/NAME +ezk/ .mailspool/NAME +.mailspool/ NAME +NAME + + +File: am-utils.info, Node: Background to Mail Delivery, Next: Using Hlfsd, Prev: Introduction to Hlfsd, Up: Hlfsd + +9.2 Background to Mail Delivery +=============================== + +This section provides an in-depth discussion of why available methods +for delivering mail to home directories are not as good as the one used +by Hlfsd. + +* Menu: + +* Single-Host Mail Spool Directory:: +* Centralized Mail Spool Directory:: +* Distributed Mail Spool Service:: +* Why Deliver Into the Home Directory?:: + + +File: am-utils.info, Node: Single-Host Mail Spool Directory, Next: Centralized Mail Spool Directory, Prev: Background to Mail Delivery, Up: Background to Mail Delivery + +9.2.1 Single-Host Mail Spool Directory +-------------------------------------- + +The most common method for mail delivery is for mail to be appended to a +mailbox file in a standard spool directory on the designated "mail +home" machine of the user. The greatest advantage of this method is +that it is the default method most vendors provide with their systems, +thus very little (if any) configuration is required on the SA's part. +All they need to set up are mail aliases directing mail to the host on +which the user's mailbox file is assigned. (Otherwise, mail is +delivered locally, and users find mailboxes on many machines.) + + As users become more sophisticated, and aided by windowing systems, +they find themselves logging in on multiple hosts at once, performing +several tasks concurrently. They ask to be able to read their mail on +any host on the network, not just the one designated as their "mail +home". + + +File: am-utils.info, Node: Centralized Mail Spool Directory, Next: Distributed Mail Spool Service, Prev: Single-Host Mail Spool Directory, Up: Background to Mail Delivery + +9.2.2 Centralized Mail Spool Directory +-------------------------------------- + +A popular method for providing mail readability from any host is to have +all mail delivered to a mail spool directory on a designated +"mail-server" which is exported via NFS to all of the hosts on the +network. Configuring such a system is relatively easy. On most +systems, the bulk of the work is a one-time addition to one or two +configuration files in `/etc'. The file-server's spool directory is +then hard-mounted across every machine on the local network. In small +environments with only a handful of hosts this can be an acceptable +solution. In our department, with a couple of hundred active hosts and +thousands of mail messages processed daily, this was deemed completely +unacceptable, as it introduced several types of problems: + +Scalability and Performance + As more and more machines get added to the network, more mail + traffic has to go over NFS to and from the mail-server. Users like + to run mail-watchers, and read their mail often. The stress on the + shared infrastructure increases with every user and host added; + loads on the mail server would most certainly be high since all + mail delivery goes through that one machine.(1) This leads to + lower reliability and performance. To reduce the number of + concurrent connections between clients and the server host, some + SAs have resorted to automounting the mail-spool directory. But + this solution only makes things worse: since users often run mail + watchers, and many popular applications such as `trn', `emacs', + `csh' or `ksh' check periodically for new mail, the automounted + directory would be effectively permanently mounted. If it gets + unmounted automatically by the automounter program, it is most + likely to get mounted shortly afterwards, consuming more I/O + resources by the constant cycle of mount and umount calls. + +Reliability + The mail-server host and its network connectivity must be very + reliable. Worse, since the spool directory has to be + hard-mounted,(2) many processes which access the spool directory + (various shells, `login', `emacs', etc.) would be hung as long as + connectivity to the mail-server is severed. To improve + reliability, SAs may choose to backup the mail-server's spool + partition several times a day. This may make things worse since + reading or delivering mail while backups are in progress may cause + backups to be inconsistent; more backups consume more backup-media + resources, and increase the load on the mail-server host. + + + ---------- Footnotes ---------- + + (1) Delivery via NFS-mounted filesystems may require usage of +`rpc.lockd' and `rpc.statd' to provide distributed file-locking, both +of which are widely regarded as unstable and unreliable. Furthermore, +this will degrade performance, as local processes as well as remote +`nfsd' processes are kept busy. + + (2) No SA in their right minds would soft-mount read/write +partitions -- the chances for data loss are too great. + + +File: am-utils.info, Node: Distributed Mail Spool Service, Next: Why Deliver Into the Home Directory?, Prev: Centralized Mail Spool Directory, Up: Background to Mail Delivery + +9.2.3 Distributed Mail Spool Service +------------------------------------ + +Despite the existence of a few systems that support delivery to users' +home directories, mail delivery to home directories hasn't caught on. +We believe the main reason is that there are too many programs that +"know" where mailbox files reside. Besides the obvious (the delivery +program `/bin/mail' and mail readers like `/usr/ucb/Mail', `mush', +`mm', etc.), other programs that know mailbox location are login, from, +almost every shell, `xbiff', `xmailbox', and even some programs not +directly related to mail, such as `emacs' and `trn'. Although some of +these programs can be configured to look in different directories with +the use of environment variables and other resources, many of them +cannot. The overall porting work is significant. + + Other methods that have yet to catch on require the use of a special +mail-reading server, such as IMAP or POP. The main disadvantage of +these systems is that UAs need to be modified to use these services -- +a long and involved task. That is why they are not popular at this +time. + + Several other ideas have been proposed and even used in various +environments. None of them is robust. They are mostly very +specialized, inflexible, and do not extend to the general case. Some of +the ideas are plain bad, potentially leading to lost or corrupt mail: + +automounters + Using an automounter such as Amd to provide a set of symbolic links + from the normal spool directory to user home directories is not + sufficient. UAs rename, unlink, and recreate the mailbox as a + regular file, therefore it must be a real file, not a symbolic + link. Furthermore, it must reside in a real directory which is + writable by the UAs and MTAs. This method may also require + populating `/var/spool/mail' with symbolic links and making sure + they are updated. Making Amd manage that directory directly + fails, since many various lock files need to be managed as well. + Also, Amd does not provide all of the NFS operations which are + required to write mail such as write, create, remove, and unlink. + +`$MAIL' + Setting this variable to an automounted directory pointing to the + user's mail spool host only solves the problem for those programs + which know and use `$MAIL'. Many programs don't, therefore this + solution is partial and of limited flexibility. Also, it requires + the SAs or the users to set it themselves -- an added level of + inconvenience and possible failures. + +/bin/mail + Using a different mail delivery agent could be the solution. One + such example is `hdmail'. However, `hdmail' still requires + modifying all UAs, the MTA's configuration, installing new + daemons, and changing login scripts. This makes the system less + upgradable or compatible with others, and adds one more + complicated system for SAs to deal with. It is not a complete + solution because it still requires each user have their `$MAIL' + variable setup correctly, and that every program use this variable. + + + +File: am-utils.info, Node: Why Deliver Into the Home Directory?, Prev: Distributed Mail Spool Service, Up: Background to Mail Delivery + +9.2.4 Why Deliver Into the Home Directory? +------------------------------------------ + +There are several major reasons why SAs might want to deliver mail +directly into the users' home directories: + +Location + Many mail readers need to move mail from the spool directory to the + user's home directory. It speeds up this operation if the two are + on the same filesystem. If for some reason the user's home + directory is inaccessible, it isn't that useful to be able to read + mail, since there is no place to move it to. In some cases, + trying to move mail to a non-existent or hung filesystem may + result in mail loss. + +Distribution + Having all mail spool directories spread among the many more + filesystems minimizes the chances that complete environments will + grind to a halt when a single server is down. It does increase + the chance that there will be someone who is not able to read + their mail when a machine is down, but that is usually preferred + to having no one be able to read their mail because a centralized + mail server is down. The problem of losing some mail due to the + (presumably) higher chances that a user's machine is down is + minimized in HLFS. + +Security + Delivering mail to users' home directories has another advantage -- + enhanced security and privacy. Since a shared system mail spool + directory has to be world-readable and searchable, any user can see + whether other users have mail, when they last received new mail, + or when they last read their mail. Programs such as `finger' + display this information, which some consider an infringement of + privacy. While it is possible to disable this feature of `finger' + so that remote users cannot see a mailbox file's status, this + doesn't prevent local users from getting the information. + Furthermore, there are more programs which make use of this + information. In shared environments, disabling such programs has + to be done on a system-wide basis, but with mail delivered to + users' home directories, users less concerned with privacy who do + want to let others know when they last received or read mail can + easily do so using file protection bits. + + + In summary, delivering mail to home directories provides users the +functionality sought, and also avoids most of the problems just +discussed. + + +File: am-utils.info, Node: Using Hlfsd, Prev: Background to Mail Delivery, Up: Hlfsd + +9.3 Using Hlfsd +=============== + +* Menu: + +* Controlling Hlfsd:: +* Hlfsd Options:: +* Hlfsd Files:: + + +File: am-utils.info, Node: Controlling Hlfsd, Next: Hlfsd Options, Prev: Using Hlfsd, Up: Using Hlfsd + +9.3.1 Controlling Hlfsd +----------------------- + +Much the same way Amd is controlled by `ctl-amd', so does Hlfsd get +controlled by the `ctl-hlfsd' script: + +ctl-hlfsd start + Start a new Hlfsd. + +ctl-hlfsd stop + Stop a running Hlfsd. + +ctl-hlfsd restart + Stop a running Hlfsd, wait for 10 seconds, and then start a new + one. It is hoped that within 10 seconds, the previously running + Hlfsd terminate properly; otherwise, starting a second one could + cause system lockup. + + + For example, on our systems, we start Hlfsd within `ctl-hlfsd' as +follows on Solaris 2 systems: + + hlfsd -a /var/alt_mail -x all -l /var/log/hlfsd /mail/home .mailspool + + The directory `/var/alt_mail' is a directory in the root partition +where alternate mail will be delivered into, when it cannot be delivered +into the user's home directory. + + Normal mail gets delivered into `/var/mail', but on our systems, +that is a symbolic link to `/mail/home'. `/mail' is managed by Hlfsd, +which creates a dynamic symlink named `home', pointing to the +subdirectory `.mailspool' _within_ the accessing user's home directory. +This results in mail which normally should go to `/var/mail/`$USER'', +to go to ``$HOME'/.mailspool/`$USER''. + + Hlfsd does not create the `/var/mail' symlink. This needs to be +created (manually) once on each host, by the system administrators, as +follows: + + mv /var/mail /var/alt_mail + ln -s /mail/home /var/mail + + Hlfsd also responds to the following signals: + + A `SIGHUP' signal sent to Hlfsd will force it to reload the password +map immediately. + + A `SIGUSR1' signal sent to Hlfsd will cause it to dump its internal +password map to the file `/usr/tmp/hlfsd.dump.XXXXXX', where `XXXXXX' +will be replaced by a random string generated by mktemp(3) or (the more +secure) mkstemp(3). + + +File: am-utils.info, Node: Hlfsd Options, Next: Hlfsd Files, Prev: Controlling Hlfsd, Up: Using Hlfsd + +9.3.2 Hlfsd Options +------------------- + +-a ALT_DIR + Alternate directory. The name of the directory to which the + symbolic link returned by Hlfsd will point, if it cannot access + the home directory of the user. This defaults to `/var/hlfs'. + This directory will be created if it doesn't exist. It is + expected that either users will read these files, or the system + administrators will run a script to resend this "lost mail" to its + owner. + +-c CACHE-INTERVAL + Caching interval. Hlfsd will cache the validity of home + directories for this interval, in seconds. Entries which have + been verified within the last CACHE-INTERVAL seconds will not be + verified again, since the operation could be expensive, and the + entries are most likely still valid. After the interval has + expired, Hlfsd will re-verify the validity of the user's home + directory, and reset the cache time-counter. The default value + for CACHE-INTERVAL is 300 seconds (5 minutes). + +-f + Force fast startup. This option tells Hlfsd to skip startup-time + consistency checks such as existence of mount directory, alternate + spool directory, symlink to be hidden under the mount directory, + their permissions and validity. + +-g GROUP + Set the special group HLFS_GID to GROUP. Programs such as + `/usr/ucb/from' or `/usr/sbin/in.comsat', which access the + mailboxes of other users, must be setgid `HLFS_GID' to work + properly. The default group is `hlfs'. If no group is provided, + and there is no group `hlfs', this feature is disabled. + +-h + Help. Print a brief help message, and exit. + +-i RELOAD-INTERVAL + Map-reloading interval. Each RELOAD-INTERVAL seconds, Hlfsd will + reload the password map. Hlfsd needs the password map for the + UIDs and home directory pathnames. Hlfsd schedules a `SIGALRM' to + reload the password maps. A `SIGHUP' sent to Hlfsd will force it + to reload the maps immediately. The default value for + RELOAD-INTERVAL is 900 seconds (15 minutes.) + +-l LOGFILE + Specify a log file to which Hlfsd will record events. If LOGFILE + is the string `syslog' then the log messages will be sent to the + system log daemon by syslog(3), using the `LOG_DAEMON' facility. + This is also the default. + +-n + No verify. Hlfsd will not verify the validity of the symbolic link + it will be returning, or that the user's home directory contains + sufficient disk-space for spooling. This can speed up Hlfsd at the + cost of possibly returning symbolic links to home directories + which are not currently accessible or are full. By default, Hlfsd + validates the symbolic-link in the background. The `-n' option + overrides the meaning of the `-c' option, since no caching is + necessary. + +-o MOUNT-OPTIONS + Mount options which Hlfsd will use to mount itself on top of + DIRNAME. By default, MOUNT-OPTIONS is set to `ro'. If the system + supports symbolic-link caching, default options are set to + `ro,nocache'. + +-p + Print PID. Outputs the process-id of Hlfsd to standard output + where it can be saved into a file. + +-v + Version. Displays version information to standard error. + +-x LOG-OPTIONS + Specify run-time logging options. The options are a comma + separated list chosen from: `fatal', `error', `user', `warn', + `info', `map', `stats', `all'. + +-C + Force Hlfsd to run on systems that cannot turn off the NFS + attribute-cache. Use of this option on those systems is + discouraged, as it may result in loss or misdelivery of mail. The + option is ignored on systems that can turn off the attribute-cache. + +-D LOG-OPTIONS + Select from a variety of debugging options. Prefixing an option + with the string `no' reverses the effect of that option. Options + are cumulative. The most useful option is `all'. Since this + option is only used for debugging other options are not documented + here. A fuller description is available in the program source. + +-P PASSWORD-FILE + Read the user-name, user-id, and home directory information from + the file PASSWORD-FILE. Normally, Hlfsd will use getpwent(3) to + read the password database. This option allows you to override the + default database, and is useful if you want to map users' mail + files to a directory other than their home directory. Only the + username, uid, and home-directory fields of the file PASSWORD-FILE + are read and checked. All other fields are ignored. The file + PASSWORD-FILE must otherwise be compliant with Unix Version 7 + colon-delimited format passwd(4). + + + +File: am-utils.info, Node: Hlfsd Files, Prev: Hlfsd Options, Up: Using Hlfsd + +9.3.3 Hlfsd Files +----------------- + +The following files are used by Hlfsd: + +`/hlfs' + directory under which Hlfsd mounts itself and manages the symbolic + link `home'. + +`.hlfsdir' + default sub-directory in the user's home directory, to which the + `home' symbolic link returned by Hlfsd points. + +`/var/hlfs' + directory to which `home' symbolic link returned by Hlfsd points + if it is unable to verify the that user's home directory is + accessible. + +`/usr/tmp/hlfsd.dump.XXXXXX' + file to which Hlfsd will dump its internal password map when it + receives the `SIGUSR1' signal. `XXXXXX' will be replaced by a + random string generated by mktemp(3) or (the more secure) + mkstemp(3). + + + For discussion on other files used by Hlfsd, see *Note +lostaltmail::, and *Note lostaltmail.conf-sample::. + + +File: am-utils.info, Node: Assorted Tools, Next: Examples, Prev: Hlfsd, Up: Top + +10 Assorted Tools +***************** + +The following are additional utilities and scripts included with +am-utils, and get installed. + +* Menu: + +* am-eject:: +* amd.conf-sample:: +* amd2ldif:: +* amd2sun:: +* automount2amd:: +* ctl-amd:: +* ctl-hlfsd:: +* expn:: +* fix-amd-map:: +* fixmount:: +* fixrmtab:: +* lostaltmail:: +* lostaltmail.conf-sample:: +* mk-amd-map:: +* pawd:: +* redhat-ctl-amd:: +* wait4amd:: +* wait4amd2die:: +* wire-test:: + + +File: am-utils.info, Node: am-eject, Next: amd.conf-sample, Prev: Assorted Tools, Up: Assorted Tools + +10.1 am-eject +============= + +A shell script unmounts a floppy or CD-ROM that is automounted, and +then attempts to eject the removable device. + + +File: am-utils.info, Node: amd.conf-sample, Next: amd2ldif, Prev: am-eject, Up: Assorted Tools + +10.2 amd.conf-sample +==================== + +A sample Amd configuration file. *Note Amd Configuration File::. + + +File: am-utils.info, Node: amd2ldif, Next: amd2sun, Prev: amd.conf-sample, Up: Assorted Tools + +10.3 amd2ldif +============= + +A script to convert Amd maps to LDAP input files. Use it as follows: + + amd2ldif mapname base < amd.mapfile > mapfile.ldif + + +File: am-utils.info, Node: amd2sun, Next: automount2amd, Prev: amd2ldif, Up: Assorted Tools + +10.4 amd2sun +============ + +A script to convert Amd maps to Sun Automounter maps. Use it as follows + + amd2sun < amd.mapfile > auto_mapfile + + +File: am-utils.info, Node: automount2amd, Next: ctl-amd, Prev: amd2sun, Up: Assorted Tools + +10.5 automount2amd +================== + +A script to convert old Sun Automounter maps to Amd maps. + + Say you have the Sun automount file auto.foo, with these two lines: + home earth:/home + moon -ro,intr server:/proj/images + Running + automount2amd auto.foo > amd.foo + + will produce the Amd map amd.foo with this content: + + # generated by automount2amd on Sat Aug 14 17:59:32 US/Eastern 1999 + + /defaults \\ + type:=nfs;opts:=rw,grpid,nosuid,utimeout=600 + + home \ + host==earth;type:=link;fs:=/home \\ + rhost:=earth;rfs:=/home + + moon \ + -addopts:=ro,intr \\ + host==server;type:=link;fs:=/proj/images \\ + rhost:=server;rfs:=/proj/images + + This perl script will use the following /default entry + type:=nfs;opts:=rw,grpid,nosuid,utimeout=600 + If you wish to override that, define the $DEFAULTS environment +variable, or modify the script. + + If you wish to generate Amd maps using the hostd (*note hostd +Selector Variable::) Amd map syntax, then define the environment +variable $DOMAIN or modify the script. + + Note that automount2amd does not understand the syntax in newer Sun +Automount maps, those used with autofs. + + +File: am-utils.info, Node: ctl-amd, Next: ctl-hlfsd, Prev: automount2amd, Up: Assorted Tools + +10.6 ctl-amd +============ + +A script to start, stop, or restart Amd. Use it as follows: + +ctl-amd start + Start a new Amd process. + +ctl-amd stop + Stop the running Amd. + +ctl-amd restart + Stop the running Amd (if any), safely wait for it to terminate, and + then start a new process -- only if the previous one died cleanly. + + *Note Run-time Administration::, for more details. + + +File: am-utils.info, Node: ctl-hlfsd, Next: expn, Prev: ctl-amd, Up: Assorted Tools + +10.7 ctl-hlfsd +============== + +A script for controlling Hlfsd, much the same way `ctl-amd' controls +Amd. Use it as follows: + +ctl-hlfsd start + Start a new Hlfsd process. + +ctl-hlfsd stop + Stop the running Hlfsd. + +ctl-hlfsd restart + Stop the running Hlfsd (if any), wait for 10 seconds for it to + terminate, and then start a new process -- only if the previous one + died cleanly. + + *Note Hlfsd::, for more details. + + +File: am-utils.info, Node: expn, Next: fix-amd-map, Prev: ctl-hlfsd, Up: Assorted Tools + +10.8 expn +========= + +A script to expand email addresses into their full name. It is +generally useful when using with the `lostaltmail' script, but is a +useful tools otherwise. + + $ expn -v ezk@example.com + ezk@example.com -> + ezk@shekel.example.com + ezk@shekel.example.com -> + Erez Zadok <"| /usr/local/mh/lib/slocal -user ezk || exit 75> + Erez Zadok <\ezk> + Erez Zadok </u/zing/ezk/.mailspool/backup> + + +File: am-utils.info, Node: fix-amd-map, Next: fixmount, Prev: expn, Up: Assorted Tools + +10.9 fix-amd-map +================ + +Am-utils changed some of the syntax and default values of some +variables. For example, the default value for `${os}' for Solaris 2.x +(aka SunOS 5.x) systems used to be `sos5', it is now more automatically +generated from `config.guess' and its value is `sunos5'. + + This script converts older Amd maps to new ones. Use it as follows: + + fix-amd-map < old.map > new.map + + +File: am-utils.info, Node: fixmount, Next: fixrmtab, Prev: fix-amd-map, Up: Assorted Tools + +10.10 fixmount +============== + +`fixmount' is a variant of showmount(8) that can delete bogus mount +entries in remote mountd(8) daemons. This is useful to cleanup +otherwise ever-accumulating "junk". Use it for example: + + fixmount -r host + + See the online manual page for `fixmount' for more details of its +usage. + + +File: am-utils.info, Node: fixrmtab, Next: lostaltmail, Prev: fixmount, Up: Assorted Tools + +10.11 fixrmtab +============== + +A script to invalidate `/etc/rmtab' entries for hosts named. Also +restart mountd for changes to take effect. Use it for example: + + fixrmtab host1 host2 ... + + +File: am-utils.info, Node: lostaltmail, Next: lostaltmail.conf-sample, Prev: fixrmtab, Up: Assorted Tools + +10.12 lostaltmail +================= + +A script used with Hlfsd to resend any "lost" mail. Hlfsd redirects +mail which cannot be written into the user's home directory to an +alternate directory. This is useful to continue delivering mail, even +if the user's file system was unavailable, full, or over quota. But, +the mail which gets delivered to the alternate directory needs to be +resent to its respective users. This is what the `lostaltmail' script +does. + + Use it as follows: + + lostaltmail + + This script needs a configuration file `lostaltmail.conf' set up +with the right parameters to properly work. *Note Hlfsd::, for more +details. + + +File: am-utils.info, Node: lostaltmail.conf-sample, Next: mk-amd-map, Prev: lostaltmail, Up: Assorted Tools + +10.13 lostaltmail.conf-sample +============================= + +This is a text file with configuration parameters needed for the +`lostaltmail' script. The script includes comments explaining each of +the configuration variables. See it for more information. Also *note +Hlfsd:: for general information. + + +File: am-utils.info, Node: mk-amd-map, Next: pawd, Prev: lostaltmail.conf-sample, Up: Assorted Tools + +10.14 mk-amd-map +================ + +This program converts a normal Amd map file into an ndbm database with +the same prefix as the named file. Use it as follows: + + mk-amd-map mapname + + +File: am-utils.info, Node: pawd, Next: redhat-ctl-amd, Prev: mk-amd-map, Up: Assorted Tools + +10.15 pawd +========== + +Pawd is used to print the current working directory, adjusted to +reflect proper paths that can be reused to go through the automounter +for the shortest possible path. In particular, the path printed back +does not include any of Amd's local mount points. Using them is +unsafe, because Amd may unmount managed file systems from the mount +points, and thus including them in paths may not always find the files +within. + + Without any arguments, Pawd will print the automounter adjusted +current working directory. With any number of arguments, it will print +the adjusted path of each one of the arguments. + + +File: am-utils.info, Node: redhat-ctl-amd, Next: wait4amd, Prev: pawd, Up: Assorted Tools + +10.16 redhat-ctl-amd +==================== + +This script is similar to ctl-amd (*note ctl-amd::) but is intended for +Red Hat Linux systems. You can safely copy redhat-ctl-amd onto +`/etc/rc.d/init.d/amd'. The script supplied by Am-utils is usually +better than the one provided by Red Hat, because the Red Hat script +does not correctly kill Amd processes: it is too quick to kill the +wrong processes, leaving stale or hung mount points behind. + + +File: am-utils.info, Node: wait4amd, Next: wait4amd2die, Prev: redhat-ctl-amd, Up: Assorted Tools + +10.17 wait4amd +============== + +A script to wait for Amd to start on a particular host before +performing an arbitrary command. The command is executed repeatedly, +with 1 second intervals in between. You may interrupt the script using +`^C' (or whatever keyboard sequence your terminal's `intr' function is +bound to). + + Examples: + +wait4amd saturn amq -p -h saturn + When Amd is up on host `saturn', get the process ID of that + running Amd. + +wait4amd pluto rlogin pluto + Remote login to host `pluto' when Amd is up on that host. It is + generally necessary to wait for Amd to properly start and + initialize on a remote host before logging in to it, because + otherwise user home directories may not be accessible across the + network. + +wait4amd pluto + A short-hand version of the previous command, since the most useful + reason for this script is to login to a remote host. I use it very + often when testing out new versions of Amd, and need to reboot hung + hosts. + + +File: am-utils.info, Node: wait4amd2die, Next: wire-test, Prev: wait4amd, Up: Assorted Tools + +10.18 wait4amd2die +================== + +This script is used internally by `ctl-amd' when used to restart Amd. +It waits for Amd to terminate. If it detected that Amd terminated +cleanly, this script will return an exist status of zero. Otherwise, +it will return a non-zero exit status. + + The script tests for Amd's existence once every 5 seconds, six +times, for a total of 30 seconds. It will return a zero exist status as +soon as it detects that Amd dies. + + +File: am-utils.info, Node: wire-test, Prev: wait4amd2die, Up: Assorted Tools + +10.19 wire-test +=============== + +A simple program to test if some of the most basic networking functions +in am-util's library `libamu' work. It also tests the combination of +NFS protocol and version number that are supported from the current +host, to a remote one. + + For example, in this test a machine which only supports NFS Version +2 is contacting a remote host that can support the same version, but +using both UDP and TCP. If no host name is specified, `wire-test' will +try `localhost'. + + $ wire-test moisil + Network name is "mcl-lab-net.cs.columbia.edu" + Network number is "128.59.13" + Network name is "old-net.cs.columbia.edu" + Network number is "128.59.16" + My IP address is 0x7f000001. + NFS Version and protocol tests to host "moisil"... + testing vers=2, proto="udp" -> found version 2. + testing vers=3, proto="udp" -> failed! + testing vers=2, proto="tcp" -> found version 2. + testing vers=3, proto="tcp" -> failed! + + +File: am-utils.info, Node: Examples, Next: Internals, Prev: Assorted Tools, Up: Top + +11 Examples +*********** + +* Menu: + +* User Filesystems:: +* Home Directories:: +* Architecture Sharing:: +* Wildcard Names:: +* rwho servers:: +* /vol:: +* /defaults with selectors:: +* /tftpboot in a chroot-ed environment:: + + +File: am-utils.info, Node: User Filesystems, Next: Home Directories, Prev: Examples, Up: Examples + +11.1 User Filesystems +===================== + +With more than one fileserver, the directories most frequently +cross-mounted are those containing user home directories. A common +convention used at Imperial College is to mount the user disks under +/home/machine. + + Typically, the `/etc/fstab' file contained a long list of entries +such as: + + machine:/home/machine /home/machine nfs ... + + for each fileserver on the network. + + There are numerous problems with this system. The mount list can +become quite large and some of the machines may be down when a system is +booted. When a new fileserver is installed, `/etc/fstab' must be +updated on every machine, the mount directory created and the filesystem +mounted. + + In many environments most people use the same few workstations, but +it is convenient to go to a colleague's machine and access your own +files. When a server goes down, it can cause a process on a client +machine to hang. By minimizing the mounted filesystems to only include +those actively being used, there is less chance that a filesystem will +be mounted when a server goes down. + + The following is a short extract from a map taken from a research +fileserver at Imperial College. + + Note the entry for `localhost' which is used for users such as the +operator (`opr') who have a home directory on most machine as +`/home/localhost/opr'. + + /defaults opts:=rw,intr,grpid,nosuid + charm host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \ + host==${key};type:=ufs;dev:=/dev/xd0g + # + ... + + # + localhost type:=link;fs:=${host} + ... + # + # dylan has two user disks so have a + # top directory in which to mount them. + # + dylan type:=auto;fs:=${map};pref:=${key}/ + # + dylan/dk2 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/${key} \ + host==dylan;type:=ufs;dev:=/dev/dsk/2s0 + # + dylan/dk5 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/${key} \ + host==dylan;type:=ufs;dev:=/dev/dsk/5s0 + ... + # + toytown host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \ + host==${key};type:=ufs;dev:=/dev/xy1g + ... + # + zebedee host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \ + host==${key};type:=ufs;dev:=/dev/dsk/1s0 + # + # Just for access... + # + gould type:=auto;fs:=${map};pref:=${key}/ + gould/staff host!=gould;type:=nfs;rhost:=gould;rfs:=/home/${key} + # + gummo host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} + ... + + This map is shared by most of the machines listed so on those +systems any of the user disks is accessible via a consistent name. Amd +is started with the following command + + amd /home amd.home + + Note that when mounting a remote filesystem, the "automounted" mount +point is referenced, so that the filesystem will be mounted if it is +not yet (at the time the remote `mountd' obtains the file handle). + + +File: am-utils.info, Node: Home Directories, Next: Architecture Sharing, Prev: User Filesystems, Up: Examples + +11.2 Home Directories +===================== + +One convention for home directories is to locate them in `/homes' so +user `jsp''s home directory is `/homes/jsp'. With more than a single +fileserver it is convenient to spread user files across several +machines. All that is required is a mount-map which converts login +names to an automounted directory. + + Such a map might be started by the command: + + amd /homes amd.homes + + where the map `amd.homes' contained the entries: + + /defaults type:=link # All the entries are of type:=link + jsp fs:=/home/charm/jsp + njw fs:=/home/dylan/dk5/njw + ... + phjk fs:=/home/toytown/ai/phjk + sjv fs:=/home/ganymede/sjv + + Whenever a login name is accessed in `/homes' a symbolic link +appears pointing to the real location of that user's home directory. In +this example, `/homes/jsp' would appear to be a symbolic link pointing +to `/home/charm/jsp'. Of course, `/home' would also be an automount +point. + + This system causes an extra level of symbolic links to be used. +Although that turns out to be relatively inexpensive, an alternative is +to directly mount the required filesystems in the `/homes' map. The +required map is simple, but long, and its creation is best automated. +The entry for `jsp' could be: + + jsp -sublink:=${key};rfs:=/home/charm \ + host==charm;type:=ufs;dev:=/dev/xd0g \ + host!=charm;type:=nfs;rhost:=charm + + This map can become quite big if it contains a large number of +entries. By combining two other features of Amd it can be greatly +simplified. + + First the UFS partitions should be mounted under the control of +`/etc/fstab', taking care that they are mounted in the same place that +Amd would have automounted them. In most cases this would be something +like `/a/"host"/home/"host"' and `/etc/fstab' on host `charm' would +have a line: + + /dev/xy0g /a/charm/home/charm 4.2 rw,nosuid,grpid 1 5 + + The map can then be changed to: + + /defaults type:=nfs;sublink:=${key};opts:=rw,intr,nosuid,grpid + jsp rhost:=charm;rfs:=/home/charm + njw rhost:=dylan;rfs:=/home/dylan/dk5 + ... + phjk rhost:=toytown;rfs:=/home/toytown;sublink:=ai/${key} + sjv rhost:=ganymede;rfs:=/home/ganymede + + This map operates as usual on a remote machine (ie `${host}' not +equal to `${rhost}'). On the machine where the filesystem is stored +(ie `${host}' equal to `${rhost}'), Amd will construct a local +filesystem mount point which corresponds to the name of the locally +mounted UFS partition. If Amd is started with the `-r' option then +instead of attempting an NFS mount, Amd will simply inherit the UFS +mount (*note Inheritance Filesystem::). If `-r' is not used then a +loopback NFS mount will be made. This type of mount is known to cause +a deadlock on many systems. + + +File: am-utils.info, Node: Architecture Sharing, Next: Wildcard Names, Prev: Home Directories, Up: Examples + +11.3 Architecture Sharing +========================= + +Often a filesystem will be shared by machines of different +architectures. Separate trees can be maintained for the executable +images for each architecture, but it may be more convenient to have a +shared tree, with distinct subdirectories. + + A shared tree might have the following structure on the fileserver +(called `fserver' in the example): + + local/tex + local/tex/fonts + local/tex/lib + local/tex/bin + local/tex/bin/sun3 + local/tex/bin/sun4 + local/tex/bin/hp9000 + ... + + In this example, the subdirectories of `local/tex/bin' should be +hidden when accessed via the automount point (conventionally `/vol'). +A mount-map for `/vol' to achieve this would look like: + + /defaults sublink:=${/key};rhost:=fserver;type:=link + tex type:=auto;fs:=${map};pref:=${key}/ + tex/fonts host!=fserver;type:=nfs;rfs:=/vol/tex \ + host==fserver;fs:=/usr/local/tex + tex/lib host!=fserver;type:=nfs;rfs:=/vol/tex \ + host==fserver;fs:=/usr/local/tex + tex/bin -sublink:=${/key}/${arch} \ + host!=fserver;type:=nfs;rfs:=/vol/tex \ + host:=fserver;fs:=/usr/local/tex + + When `/vol/tex/bin' is referenced, the current machine architecture +is automatically appended to the path by the `${sublink}' variable. +This means that users can have `/vol/tex/bin' in their `PATH' without +concern for architecture dependencies. + + +File: am-utils.info, Node: Wildcard Names, Next: rwho servers, Prev: Architecture Sharing, Up: Examples + +11.4 Wildcard Names & Replicated Servers +======================================== + +By using the wildcard facility, Amd can "overlay" an existing directory +with additional entries. The system files are usually mounted under +`/usr'. If instead, Amd is mounted on `/usr', additional names can be +overlayed to augment or replace names in the "master" `/usr'. A map to +do this would have the form: + + local type:=auto;fs:=local-map + share type:=auto;fs:=share-map + * -type:=nfs;rfs:=/export/exec/${arch};sublink:="${key}" \ + rhost:=fserv1 rhost:=fserv2 rhost:=fserv3 + + Note that the assignment to `${sublink}' is surrounded by double +quotes to prevent the incoming key from causing the map to be +misinterpreted. This map has the effect of directing any access to +`/usr/local' or `/usr/share' to another automount point. + + In this example, it is assumed that the `/usr' files are replicated +on three fileservers: `fserv1', `fserv2' and `fserv3'. For any +references other than to `local' and `share' one of the servers is used +and a symbolic link to ${autodir}/${rhost}/export/exec/${arch}/whatever +is returned once an appropriate filesystem has been mounted. + + +File: am-utils.info, Node: rwho servers, Next: /vol, Prev: Wildcard Names, Up: Examples + +11.5 `rwho' servers +=================== + +The `/usr/spool/rwho' directory is a good candidate for automounting. +For efficiency reasons it is best to capture the rwho data on a small +number of machines and then mount that information onto a large number +of clients. The data written into the rwho files is byte order +dependent so only servers with the correct byte ordering can be used by +a client: + + /defaults type:=nfs + usr/spool/rwho -byte==little;rfs:=/usr/spool/rwho \ + rhost:=vaxA rhost:=vaxB \ + || -rfs:=/usr/spool/rwho \ + rhost:=sun4 rhost:=hp300 + + +File: am-utils.info, Node: /vol, Next: /defaults with selectors, Prev: rwho servers, Up: Examples + +11.6 `/vol' +=========== + +`/vol' is used as a catch-all for volumes which do not have other +conventional names. + + Below is part of the `/vol' map for the domain `doc.ic.ac.uk'. The +`r+d' tree is used for new or experimental software that needs to be +available everywhere without installing it on all the fileservers. +Users wishing to try out the new software then simply include +`/vol/r+d/{bin,ucb}' in their path. + + The main tree resides on one host `gould.doc.ic.ac.uk', which has +different `bin', `etc', `lib' and `ucb' sub-directories for each +machine architecture. For example, `/vol/r+d/bin' for a Sun-4 would be +stored in the sub-directory `bin/sun4' of the filesystem `/usr/r+d'. +When it was accessed a symbolic link pointing to +`/a/gould/usr/r+d/bin/sun4' would be returned. + + /defaults type:=nfs;opts:=rw,grpid,nosuid,intr,soft + wp -opts:=rw,grpid,nosuid;rhost:=charm \ + host==charm;type:=link;fs:=/usr/local/wp \ + host!=charm;type:=nfs;rfs:=/vol/wp + ... + # + src -opts:=rw,grpid,nosuid;rhost:=charm \ + host==charm;type:=link;fs:=/usr/src \ + host!=charm;type:=nfs;rfs:=/vol/src + # + r+d type:=auto;fs:=${map};pref:=r+d/ + # per architecture bin,etc,lib&ucb... + r+d/bin rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + r+d/etc rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + r+d/include rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key} + r+d/lib rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + r+d/man rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key} + r+d/src rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key} + r+d/ucb rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + # hades pictures + pictures -opts:=rw,grpid,nosuid;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/pictures \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=pictures + # hades tools + hades -opts:=rw,grpid,nosuid;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/hades \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=hades + # bsd tools for hp. + bsd -opts:=rw,grpid,nosuid;arch==hp9000;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/bsd \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=bsd + + +File: am-utils.info, Node: /defaults with selectors, Next: /tftpboot in a chroot-ed environment, Prev: /vol, Up: Examples + +11.7 `/defaults' with selectors +=============================== + +It is sometimes useful to have different defaults for a given map. To +achieve this, the `/defaults' entry must be able to process normal +selectors. This feature is turned on by setting `selectors_in_defaults += yes' in the `amd.conf' file. *Note selectors_in_defaults Parameter::. + + In this example, I set different default NFS mount options for hosts +which are running over a slower network link. By setting a smaller size +for the NFS read and write buffer sizes, you can greatly improve remote +file service performance. + + /defaults \ + wire==slip-net;opts:=rw,intr,rsize=1024,wsize=1024,timeo=20,retrans=10 \ + wire!=slip-net;opts:=rw,intr + + +File: am-utils.info, Node: /tftpboot in a chroot-ed environment, Prev: /defaults with selectors, Up: Examples + +11.8 `/tftpboot' in a chroot-ed environment +=========================================== + +In this complex example, we attempt to run an Amd process _inside_ a +chroot-ed environment. `tftpd' (Trivial FTP) is used to trivially +retrieve files used to boot X-Terminals, Network Printers, Network +routers, diskless workstations, and other such devices. For security +reasons, `tftpd' (and also `ftpd') processes are run using the +chroot(2) system call. This provides an environment for these +processes, where access to any files outside the directory where the +chroot-ed process runs is denied. + + For example, if you start `tftpd' on your system with + + chroot /tftpboot /usr/sbin/tftpd + +then the `tftpd' process will not be able to access any files outside +`/tftpboot'. This ensures that no one can retrieve files such as +`/etc/passwd' and run password crackers on it. + + Since the TFTP service works by broadcast, it is necessary to have at +least one TFTP server running on each subnet. If you have lots of files +that you need to make available for `tftp', and many subnets, it could +take significant amounts of disk space on each host serving them. + + A solution we implemented at Columbia University was to have every +host run `tftpd', but have those servers retrieve the boot files from +two replicated servers. Those replicated servers have special +partitions dedicated to the many network boot files. + + We start Amd as follows: + + amd /tftpboot/.amd amd.tftpboot + + That is, Amd is serving the directory `/tftpboot/.amd'. The `tftp' +server runs inside `/tftpboot' and is chroot-ed in that directory too. +The `amd.tftpboot' map looks like: + + # + # Amd /tftpboot directory -> host map + # + + /defaults opts:=nosuid,ro,intr,soft;fs:=/tftpboot/import;type:=nfs + + tp host==lol;rfs:=/n/lol/import/tftpboot;type:=lofs \ + host==ober;rfs:=/n/ober/misc/win/tftpboot;type:=lofs \ + rhost:=ober;rfs:=/n/ober/misc/win/tftpboot \ + rhost:=lol;rfs:=/n/lol/import/tftpboot + + To help understand this example, I list a few of the file entries +that are created inside `/tftpboot': + + $ ls -la /tftpboot + dr-xr-xr-x 2 root 512 Aug 30 23:11 .amd + drwxrwsr-x 12 root 512 Aug 30 08:00 import + lrwxrwxrwx 1 root 33 Feb 27 1997 adminpr.cfg -> ./.amd/tp/hplj/adminpr.cfg + lrwxrwxrwx 1 root 22 Dec 5 1996 tekxp -> ./.amd/tp/xterms/tekxp + lrwxrwxrwx 1 root 1 Dec 5 1996 tftpboot -> . + + Here is an explanation of each of the entries listed above: + +`.amd' + This is the Amd mount point. Note that you do not need to run a + separate Amd process for the TFTP service. The chroot(2) system + call only protects against file access, but the same process can + still serve files and directories inside and outside the chroot-ed + environment, because Amd itself was not run in chroot-ed mode. + +`import' + This is the mount point where Amd will mount the directories + containing the boot files. The map is designed so that remote + directories will be NFS mounted (even if they are already mounted + elsewhere), and local directories are loopback mounted (since they + are not accessible outside the chroot-ed `/tftpboot' directory). + +`adminpr.cfg' +`tekxp' + Two manually created symbolic links to directories _inside_ the + Amd-managed directory. The crossing of the component `tp' will + cause Amd to automount one of the remote replicas. Once crossed, + access to files inside proceeds as usual. The `adminpr.cfg' is a + configuration file for an HP Laser-Jet 4si printer, and the `tekxp' + is a directory for Tektronix X-Terminal boot files. + +`tftpboot' + This innocent looking symlink is important. Usually, when devices + boot via the TFTP service, they perform the `get file' command to + retrieve FILE. However, some devices assume that `tftpd' does not + run in a chroot-ed environment, but rather "unprotected", and thus + use a full pathname for files to retrieve, as in `get + /tftpboot/file'. This symlink effectively strips out the leading + `/tftpboot/'. + + + +File: am-utils.info, Node: Internals, Next: Acknowledgments & Trademarks, Prev: Examples, Up: Top + +12 Internals +************ + +Note that there are more error and logging messages possible than are +listed here. Most of them are self-explanatory. Refer to the program +sources for more details on the rest. + +* Menu: + +* Log Messages:: + + +File: am-utils.info, Node: Log Messages, Prev: Internals, Up: Internals + +12.1 Log Messages +================= + +In the following sections a brief explanation is given of some of the +log messages made by Amd. Where the message is in `typewriter' font, +it corresponds exactly to the message produced by Amd. Words in +"italic" are replaced by an appropriate string. Variables, `${var}', +indicate that the value of the appropriate variable is output. + + Log messages are either sent directly to a file, or logged via the +syslog(3) mechanism. *Note log_file Parameter::. In either case, +entries in the file are of the form: + date-string hostname amd[pid] message + +* Menu: + +* Fatal errors:: +* Info messages:: + + +File: am-utils.info, Node: Fatal errors, Next: Info messages, Prev: Log Messages, Up: Log Messages + +12.1.1 Fatal errors +------------------- + +Amd attempts to deal with unusual events. Whenever it is not possible +to deal with such an error, Amd will log an appropriate message and, if +it cannot possibly continue, will either exit or abort. These messages +are selected by `-x fatal' on the command line. When syslog(3) is +being used, they are logged with level `LOG_FATAL'. Even if Amd +continues to operate it is likely to remain in a precarious state and +should be restarted at the earliest opportunity. + +Attempting to inherit not-a-filesystem + The prototype mount point created during a filesystem restart did + not contain a reference to the restarted filesystem. This error + "should never happen". + +Can't bind to domain "NIS-domain" + A specific NIS domain was requested on the command line, but no + server for that domain is available on the local net. + +Can't determine IP address of this host (hostname) + When Amd starts it determines its own IP address. If this lookup + fails then Amd cannot continue. The hostname it looks up is that + obtained returned by gethostname(2) system call. + +Can't find root file handle for automount point + Amd creates its own file handles for the automount points. When it + mounts itself as a server, it must pass these file handles to the + local kernel. If the filehandle is not obtainable the mount point + is ignored. This error "should never happen". + +Must be root to mount filesystems (euid = euid) + To prevent embarrassment, Amd makes sure it has appropriate system + privileges. This amounts to having an euid of 0. The check is + made after argument processing complete to give non-root users a + chance to access the `-v' option. + +No work to do - quitting + No automount points were given on the command line and so there is + no work to do. + +Out of memory + While attempting to malloc some memory, the memory space available + to Amd was exhausted. This is an unrecoverable error. + +Out of memory in realloc + While attempting to realloc some memory, the memory space + available to Amd was exhausted. This is an unrecoverable error. + +cannot create rpc/udp service + Either the NFS or AMQ endpoint could not be created. + +gethostname: description + The gethostname(2) system call failed during startup. + +host name is not set + The gethostname(2) system call returned a zero length host name. + This can happen if Amd is started in single user mode just after + booting the system. + +ifs_match called! + An internal error occurred while restarting a pre-mounted + filesystem. This error "should never happen". + +mount_afs: description + An error occurred while Amd was mounting itself. + +run_rpc failed + Somehow the main NFS server loop failed. This error "should never + happen". + +unable to free rpc arguments in amqprog_1 + The incoming arguments to the AMQ server could not be free'ed. + +unable to free rpc arguments in nfs_program_1 + The incoming arguments to the NFS server could not be free'ed. + +unable to register (AMQ_PROGRAM, AMQ_VERSION, udp) + The AMQ server could not be registered with the local portmapper + or the internal RPC dispatcher. + +unable to register (NFS_PROGRAM, NFS_VERSION, 0) + The NFS server could not be registered with the internal RPC + dispatcher. + + + XXX: This section needs to be updated + + +File: am-utils.info, Node: Info messages, Prev: Fatal errors, Up: Log Messages + +12.1.2 Info messages +-------------------- + +Amd generates information messages to record state changes. These +messages are selected by `-x info' on the command line. When syslog(3) +is being used, they are logged with level `LOG_INFO'. + + The messages listed below can be generated and are in a format +suitable for simple statistical analysis. "mount-info" is the string +that is displayed by "Amq" in its mount information column and placed +in the system mount table. + +"${path}" forcibly timed out + An automount point has been timed out by the Amq command. + +"${path}" has timed out + No access to the automount point has been made within the timeout + period. + +Filehandle denied for "${rhost}:${rfs}" + The mount daemon refused to return a file handle for the requested + filesystem. + +Filehandle error for "${rhost}:${rfs}": description + The mount daemon gave some other error for the requested + filesystem. + +Finishing with status exit-status + Amd is about to exit with the given exit status. + +Re-synchronizing cache for map ${map} + The named map has been modified and the internal cache is being + re-synchronized. + +file server ${rhost} is down - timeout of "${path}" ignored + An automount point has timed out, but the corresponding file + server is known to be down. This message is only produced once + for each mount point for which the server is down. + +file server ${rhost} type nfs is down + An NFS file server that was previously up is now down. + +file server ${rhost} type nfs is up + An NFS file server that was previously down is now up. + +file server ${rhost} type nfs starts down + A new NFS file server has been referenced and is known to be down. + +file server ${rhost} type nfs starts up + A new NFS file server has been referenced and is known to be up. + +mount of "${path}" on ${fs} timed out + Attempts to mount a filesystem for the given automount point have + failed to complete within 30 seconds. + +mount-info mounted fstype ${type} on ${fs} + A new file system has been mounted. + +mount-info restarted fstype ${type} on ${fs} + Amd is using a pre-mounted filesystem to satisfy a mount request. + +mount-info unmounted fstype ${type} from ${fs} + A file system has been unmounted. + +mount-info unmounted fstype ${type} from ${fs} link ${fs}/${sublink} + A file system of which only a sub-directory was in use has been + unmounted. + +restarting mount-info on ${fs} + A pre-mounted file system has been noted. + + + XXX: This section needs to be updated + + +File: am-utils.info, Node: Acknowledgments & Trademarks, Next: Index, Prev: Internals, Up: Top + +Acknowledgments & Trademarks +**************************** + +Many thanks to the Am-Utils Users mailing list through the months +developing am-utils. These members have contributed to the +discussions, ideas, code and documentation, and subjected their systems +to alpha quality code. Special thanks go to those authors +(http://www.am-utils.org/docs/am-utils/AUTHORS.txt) who have submitted +patches, and especially to the maintainers: + + * Erez Zadok (http://www.cs.sunysb.edu/~ezk) + + * Ion Badulescu <ionut AT badula.org> + + * Rainer Orth <ro AT techfak.uni-bielefeld.de> + + * Nick Williams <nick.williams AT morganstanley.com> + + Thanks to the Formal Methods Group at Imperial College for suffering +patiently while Amd was being developed on their machines. + + Thanks to the many people who have helped with the development of +Amd, especially Piete Brooks at the Cambridge University Computing Lab +for many hours of testing, experimentation and discussion. + + Thanks to the older Amd Workers <amd-workers AT +majordomo.glue.umd.edu> mailing list (now defunct) members for many +suggestions and bug reports to Amd. + + * DEC, VAX and Ultrix are registered trademarks of Digital Equipment + Corporation. + + * AIX and IBM are registered trademarks of International Business + Machines Corporation. + + * Sun, NFS and SunOS are registered trademarks of Sun Microsystems, + Inc. + + * UNIX is a registered trademark in the USA and other countries, + exclusively licensed through X/Open Company, Ltd. + + * All other registered trademarks are owned by their respective + owners. + |