8063 lines
306 KiB
Plaintext
8063 lines
306 KiB
Plaintext
\input texinfo @c -*-texinfo-*-
|
|
@c
|
|
@c Copyright (c) 1997-1999 Erez Zadok
|
|
@c Copyright (c) 1989 Jan-Simon Pendry
|
|
@c Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
|
@c Copyright (c) 1989 The Regents of the University of California.
|
|
@c All rights reserved.
|
|
@c
|
|
@c This code is derived from software contributed to Berkeley by
|
|
@c Jan-Simon Pendry at Imperial College, London.
|
|
@c
|
|
@c Redistribution and use in source and binary forms, with or without
|
|
@c modification, are permitted provided that the following conditions
|
|
@c are met:
|
|
@c 1. Redistributions of source code must retain the above copyright
|
|
@c notice, this list of conditions and the following disclaimer.
|
|
@c 2. Redistributions in binary form must reproduce the above copyright
|
|
@c notice, this list of conditions and the following disclaimer in the
|
|
@c documentation and/or other materials provided with the distribution.
|
|
@c 3. All advertising materials mentioning features or use of this software
|
|
@c must display the following acknowledgment:
|
|
@c This product includes software developed by the University of
|
|
@c California, Berkeley and its contributors.
|
|
@c 4. Neither the name of the University nor the names of its contributors
|
|
@c may be used to endorse or promote products derived from this software
|
|
@c without specific prior written permission.
|
|
@c
|
|
@c THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
@c ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
@c IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
@c ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
@c FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
@c DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
@c OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
@c HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
@c LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
@c OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
@c
|
|
@c %W% (Berkeley) %G%
|
|
@c
|
|
@c $Id: am-utils.texi,v 1.10 1999/09/08 23:36:49 ezk Exp $
|
|
@c
|
|
@setfilename am-utils.info
|
|
|
|
@include version.texi
|
|
|
|
@c info directory entry
|
|
@direntry
|
|
* Am-utils: (am-utils). The Amd automounter suite of utilities
|
|
@end direntry
|
|
|
|
@settitle
|
|
@setchapternewpage odd
|
|
|
|
@titlepage
|
|
@title Am-utils (4.4BSD Automounter Utilities)
|
|
@subtitle For version @value{VERSION}, @value{UPDATED}
|
|
|
|
@author Erez Zadok
|
|
(Originally by Jan-Simon Pendry and Nick Williams)
|
|
|
|
@page
|
|
Copyright @copyright{} 1997-1999 Erez Zadok
|
|
@*
|
|
Copyright @copyright{} 1989 Jan-Simon Pendry
|
|
@*
|
|
Copyright @copyright{} 1989 Imperial College of Science, Technology & Medicine
|
|
@*
|
|
Copyright @copyright{} 1989 The Regents of the University of California.
|
|
@sp
|
|
All Rights Reserved.
|
|
@vskip 1ex
|
|
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.
|
|
@end titlepage
|
|
@page
|
|
|
|
@c Define a new index for options.
|
|
@syncodeindex pg cp
|
|
@syncodeindex vr cp
|
|
|
|
@ifinfo
|
|
|
|
@c ################################################################
|
|
@node Top, License, , (DIR)
|
|
Am-utils - The 4.4BSD Automounter Tool Suite
|
|
*********************************************
|
|
|
|
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.
|
|
@end ifinfo
|
|
|
|
@menu
|
|
* License:: Explains the terms and conditions for using
|
|
and distributing Am-utils.
|
|
* Distrib:: How to get the latest Am-utils distribution.
|
|
* 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.
|
|
@end menu
|
|
|
|
@iftex
|
|
@unnumbered Preface
|
|
|
|
This manual documents the use of the 4.4BSD automounter tool suite,
|
|
which includes @i{Amd}, @i{Amq}, @i{Hlfsd}, and other programs. This is
|
|
primarily a reference manual. While no tutorial exists, there are
|
|
examples available. @xref{Examples}.
|
|
|
|
This manual comes in two forms: the published form and the Info form.
|
|
The Info form is for on-line perusal with the INFO program which is
|
|
distributed along with GNU texinfo package (a version of which is
|
|
available for GNU Emacs).@footnote{GNU packages can be found in
|
|
@url{ftp://ftp.gnu.org/pub/gnu/}.} Both forms contain substantially
|
|
the same text and are generated from a common source file, which is
|
|
distributed with the @i{Am-utils} source.
|
|
@end iftex
|
|
|
|
@c ################################################################
|
|
@node License, Distrib, Top, Top
|
|
@unnumbered License
|
|
@cindex License Information
|
|
|
|
@i{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:
|
|
|
|
@enumerate
|
|
|
|
@item
|
|
Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
|
|
@item
|
|
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.
|
|
|
|
@item
|
|
All advertising materials mentioning features or use of this software
|
|
must display the following acknowledgment:
|
|
|
|
@cartouche
|
|
``This product includes software developed by the University of
|
|
California, Berkeley and its contributors, as well as the Trustees of
|
|
Columbia University.''
|
|
@end cartouche
|
|
|
|
@item
|
|
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.
|
|
|
|
@end enumerate
|
|
|
|
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.
|
|
|
|
@c ################################################################
|
|
@node Distrib, Intro, License, Top
|
|
@unnumbered Source Distribution
|
|
@cindex Source code distribution
|
|
@cindex Obtaining the source code
|
|
|
|
The @i{Am-utils} home page is located in
|
|
@example
|
|
@url{http://www.cs.columbia.edu/~ezk/am-utils/}
|
|
@end example
|
|
|
|
You can get the latest distribution version of @i{Am-utils} from
|
|
@example
|
|
@url{ftp://shekel.mcl.cs.columbia.edu/pub/am-utils/am-utils.tar.gz}
|
|
@end example
|
|
|
|
Alpha and beta distributions are available in
|
|
@example
|
|
@url{ftp://shekel.mcl.cs.columbia.edu/pub/am-utils/}.
|
|
@end example
|
|
|
|
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 @email{ezk@@cs.columbia.edu,Erez
|
|
Zadok} at the @uref{http://www.cs.columbia.edu/,Computer Science
|
|
Department} of @uref{http://www.columbia.edu/,Columbia University}, as
|
|
part of his @uref{http://www.cs.columbia.edu/~ezk/research/tp/thesis_proposal.html,PhD thesis work}. @xref{History}, for more details.
|
|
|
|
@unnumberedsec Bug Reports
|
|
@cindex Bug reports
|
|
|
|
Before reporting a bug, see if it is a known one in the
|
|
@uref{http://www.cs.columbia.edu/~ezk/am-utils/BUGS.txt,bugs} file.
|
|
Send all bug reports to @email{amd-dev@@majordomo.cs.columbia.edu}
|
|
quoting the details of the release and your configuration. These can be
|
|
obtained by running the command @samp{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 @uref{http://www.cs.columbia.edu/~ezk/am-utils/AUTHORS.txt,authors
|
|
file}.
|
|
|
|
@unnumberedsec Mailing List
|
|
@cindex Mailing list
|
|
|
|
There are two mailing lists for people interested in keeping up-to-date
|
|
with developments.
|
|
|
|
@c ###############
|
|
|
|
@enumerate
|
|
|
|
@item
|
|
The older list, @samp{amd-workers} is for general "how to" questions and
|
|
announcements. To subscribe, send a note to
|
|
@email{amd-workers-request@@majordomo.glue.umd.edu}.@footnote{Note that
|
|
the older address, @email{amd-workers-request@@acl.lanl.gov}, is
|
|
defunct.} To post a message to this list, send mail to
|
|
@email{amd-workers@@majordomo.glue.umd.edu}.
|
|
|
|
@item
|
|
The developers only list, @samp{amd-dev} is for
|
|
|
|
@itemize @minus
|
|
@item
|
|
announcements of alpha and beta releases of am-utils
|
|
@item
|
|
reporting of bugs and patches
|
|
@item
|
|
discussions of new features for am-utils
|
|
@item
|
|
implementation and porting issues
|
|
@end itemize
|
|
|
|
To subscribe, send a note to @email{majordomo@@majordomo.cs.columbia.edu}
|
|
with the single body text line @samp{subscribe amd-dev}. To post a
|
|
message to this list, send mail to
|
|
@email{amd-dev@@majordomo.cs.columbia.edu}. To avoid as much spam as
|
|
possible, only subscribers to this list may post to it.
|
|
|
|
Subscribers of @samp{amd-dev} are most suitable if they have the time
|
|
and resources to test new and buggy 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, and of course,
|
|
be very familiar with the complex code in the am-utils package. In
|
|
other words, subscribers on this list should be able to contribute
|
|
meaningfully to the development of amd.
|
|
|
|
@end enumerate
|
|
|
|
@c ################################################################
|
|
@node Intro, History, Distrib, Top
|
|
@unnumbered Introduction
|
|
@cindex Introduction
|
|
|
|
An @dfn{automounter} maintains a cache of mounted filesystems.
|
|
Filesystems are mounted on demand when they are first referenced,
|
|
and unmounted after a period of inactivity.
|
|
|
|
@i{Amd} may be used as a replacement for Sun's automounter. The choice
|
|
of which filesystem to mount can be controlled dynamically with
|
|
@dfn{selectors}. Selectors allow decisions of the form ``hostname is
|
|
@var{this},'' or ``architecture is not @var{that}.'' Selectors may be
|
|
combined arbitrarily. @i{Amd} also supports a variety of filesystem
|
|
types, including NFS, UFS and the novel @dfn{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.
|
|
|
|
@i{Amd} ensures that it will not hang if a remote server goes down.
|
|
Moreover, @i{Amd} can determine when a remote server has become
|
|
inaccessible and then mount replacement filesystems as and when they
|
|
become available.
|
|
|
|
@i{Amd} contains no proprietary source code and has been ported to
|
|
numerous flavors of Unix.
|
|
|
|
@c ################################################################
|
|
@node History, Overview, Intro, Top
|
|
@unnumbered History
|
|
@cindex History
|
|
|
|
The @i{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 @i{Amd},
|
|
created by me (@email{ezk@@cs.columbia.edu,Erez Zadok}), and available from
|
|
@url{ftp://ftp.cs.columbia.edu/pub/amd/}. The last such unofficial
|
|
release was `upl102'.
|
|
|
|
Through the process of patching and aging, it was becoming more and more
|
|
apparent that @i{Amd} was in much need of revitalizing. Maintaining
|
|
@i{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 @i{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, @i{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 @i{Amd} (5.x). Many
|
|
new features have been added such as a GNU @code{configure} system, NFS
|
|
Version 3, Autofs support, 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 @i{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.
|
|
|
|
@c ################################################################
|
|
@node Overview, Supported Platforms, History, Top
|
|
@chapter Overview
|
|
|
|
@i{Amd} maintains a cache of mounted filesystems. Filesystems are
|
|
@dfn{demand-mounted} when they are first referenced, and unmounted after
|
|
a period of inactivity. @i{Amd} may be used as a replacement for Sun's
|
|
@b{automount}(8) program. It contains no proprietary source code and
|
|
has been ported to numerous flavors of Unix. @xref{Supported
|
|
Platforms}.@refill
|
|
|
|
@i{Amd} was designed as the basis for experimenting with filesystem
|
|
layout and management. Although @i{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.
|
|
|
|
@c @i{Amd} supports the notion of @dfn{replicated} filesystems by evaluating
|
|
@c each member of a list of possible filesystem locations in parallel.
|
|
@c @i{Amd} checks that each cached mapping remains valid. Should a mapping be
|
|
@c lost -- such as happens when a fileserver goes down -- @i{Amd} automatically
|
|
@c selects a replacement should one be available.
|
|
@c
|
|
@menu
|
|
* Fundamentals::
|
|
* Filesystems and Volumes::
|
|
* Volume Naming::
|
|
* Volume Binding::
|
|
* Operational Principles::
|
|
* Mounting a Volume::
|
|
* Automatic Unmounting::
|
|
* Keep-alives::
|
|
* Non-blocking Operation::
|
|
@end menu
|
|
|
|
@node Fundamentals, Filesystems and Volumes, Overview, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Fundamentals
|
|
@cindex Automounter fundamentals
|
|
|
|
The fundamental concept behind @i{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 @file{/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.
|
|
|
|
@node Filesystems and Volumes, Volume Naming, Fundamentals, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Filesystems and Volumes
|
|
@cindex Filesystem
|
|
@cindex Volume
|
|
@cindex Fileserver
|
|
@cindex sublink
|
|
|
|
@i{Amd} views the world as a set of fileservers, each containing one or
|
|
more filesystems where each filesystem contains one or more
|
|
@dfn{volumes}. Here the term @dfn{volume} is used to refer to a
|
|
coherent set of files such as a user's home directory or a @TeX{}
|
|
distribution.@refill
|
|
|
|
In order to access the contents of a volume, @i{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 @dfn{sublink} is used to refer to the sub-directory
|
|
within the filesystem where the volume can be found.
|
|
|
|
@node Volume Naming, Volume Binding, Filesystems and Volumes, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Volume Naming
|
|
@cindex Volume names
|
|
@cindex Network-wide naming
|
|
@cindex Replicated volumes
|
|
@cindex Duplicated volumes
|
|
@cindex Replacement volumes
|
|
|
|
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,
|
|
@samp{/vol/tex} might be the name of a @TeX{} distribution which varied
|
|
for each machine architecture.@refill
|
|
|
|
@i{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.
|
|
|
|
@i{Amd} can take advantage of replacement volumes by mounting them as
|
|
required should an active fileserver become unavailable.
|
|
|
|
@node Volume Binding, Operational Principles, Volume Naming, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Volume Binding
|
|
@cindex Volume binding
|
|
@cindex Unix namespace
|
|
@cindex Namespace
|
|
@cindex Binding names to filesystems
|
|
|
|
Unix implements a namespace of hierarchically mounted filesystems. Two
|
|
forms of binding between names and files are provided. A @dfn{hard
|
|
link} completes the binding when the name is added to the filesystem. A
|
|
@dfn{soft link} delays the binding until the name is accessed. An
|
|
@dfn{automounter} adds a further form in which the binding of name to
|
|
filesystem is delayed until the name is accessed.@refill
|
|
|
|
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, @i{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.
|
|
|
|
@node Operational Principles, Mounting a Volume, Volume Binding, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Operational Principles
|
|
@cindex Operational principles
|
|
|
|
@i{Amd} operates by introducing new mount points into the namespace.
|
|
These are called @dfn{automount} points. The kernel sees these
|
|
automount points as NFS filesystems being served by @i{Amd}. Having
|
|
attached itself to the namespace, @i{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 @dfn{lookup} call is received @i{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, @i{Amd} consults a configuration
|
|
@dfn{mount-map} corresponding to the automount point. @i{Amd} then
|
|
makes a runtime decision on what and where to mount a filesystem based
|
|
on the information obtained from the map.
|
|
|
|
@i{Amd} does not implement all the NFS requests; only those relevant
|
|
to name binding such as @dfn{lookup}, @dfn{readlink} and @dfn{readdir}.
|
|
Some other calls are also implemented but most simply return an error
|
|
code; for example @dfn{mkdir} always returns ``read-only filesystem''.
|
|
|
|
@node Mounting a Volume, Automatic Unmounting, Operational Principles, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Mounting a Volume
|
|
@cindex Mounting a volume
|
|
@cindex Location lists
|
|
@cindex Alternate locations
|
|
@cindex Mount retries
|
|
@cindex Background mounts
|
|
|
|
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
|
|
|
|
@display
|
|
location1 location2 @dots{} locationN
|
|
@end display
|
|
|
|
@i{Amd} examines each location in turn. Each location may contain
|
|
@dfn{selectors} which control whether @i{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.
|
|
|
|
@i{Amd} attempts to mount the filesystem described by each remaining
|
|
location until a mount succeeds or @i{Amd} can no longer proceed. The
|
|
latter can occur in three ways:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
If none of the locations could be used, or if all of the locations
|
|
caused an error, then the last error is returned.
|
|
|
|
@item
|
|
If a location could be used but was being mounted in the background then
|
|
@i{Amd} marks that mount as being ``in progress'' and continues with
|
|
the next request; no reply is sent to the kernel.
|
|
|
|
@item
|
|
Lastly, one or more of the mounts may have been @dfn{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, @i{Amd} continues to try any remaining locations.
|
|
@end itemize
|
|
|
|
Once a volume has been mounted, @i{Amd} establishes a @dfn{volume
|
|
mapping} which is used to satisfy subsequent requests.@refill
|
|
|
|
@node Automatic Unmounting, Keep-alives, Mounting a Volume, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Automatic Unmounting
|
|
|
|
To avoid an ever increasing number of filesystem mounts, @i{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 @code{-w} command-line option (@pxref{-w
|
|
Option, -w}) or the @i{amd.conf} parameter @samp{dismount_interval}
|
|
(@pxref{dismount_interval Parameter}). It is also possible to set this
|
|
value on a per-mount basis (@pxref{opts Option, opts, opts}).
|
|
|
|
Filesystems can be forcefully timed out using the @i{Amq} command.
|
|
@xref{Run-time Administration}.
|
|
|
|
@node Keep-alives, Non-blocking Operation, Automatic Unmounting, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Keep-alives
|
|
@cindex Keep-alives
|
|
@cindex Server crashes
|
|
@cindex NFS ping
|
|
|
|
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, @i{Amd} implements a @dfn{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. @i{Amd} does this by sending RPC requests to the
|
|
servers' NFS @code{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.
|
|
|
|
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 @i{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.
|
|
|
|
@c @i{Amd} keeps track of which servers are up and which are down.
|
|
@c It does this by sending RPC requests to the servers' NFS {\sc NullProc} and
|
|
@c checking whether a reply is returned. If no replies are received after a
|
|
@c short period, @i{Amd} marks the fileserver @dfn{down}.
|
|
@c RPC requests continue to be sent so that it will notice when a fileserver
|
|
@c comes back up.
|
|
@c ICMP echo packets \cite{rfc:icmp} are not used because it is the availability
|
|
@c of the NFS service that is important, not the existence of a base kernel.
|
|
@c Whenever a reference to a fileserver which is down is made via @i{Amd}, an alternate
|
|
@c filesystem is mounted if one is available.
|
|
@c
|
|
Although this action does not protect user files, which are unique on
|
|
the network, or processes which do not access files via @i{Amd} or
|
|
already have open files on the hung filesystem, it can prevent most new
|
|
processes from hanging.
|
|
|
|
By default, fileserver state is not maintained for NFS/TCP mounts. The
|
|
remote fileserver is always assumed to be up.
|
|
@c
|
|
@c With a suitable combination of filesystem management and mount-maps,
|
|
@c machines can be protected against most server downtime. This can be
|
|
@c enhanced by allocating boot-servers dynamically which allows a diskless
|
|
@c workstation to be quickly restarted if necessary. Once the root filesystem
|
|
@c is mounted, @i{Amd} can be started and allowed to mount the remainder of
|
|
@c the filesystem from whichever fileservers are available.
|
|
|
|
@node Non-blocking Operation, , Keep-alives, Overview
|
|
@comment node-name, next, previous, up
|
|
@section Non-blocking Operation
|
|
@cindex Non-blocking operation
|
|
@cindex Multiple-threaded server
|
|
@cindex RPC retries
|
|
|
|
Since there is only one instance of @i{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. @i{Amd} goes to great
|
|
lengths to ensure that it does not block in a system call. As a last
|
|
resort @i{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
|
|
@i{Amd}'s task scheduler. This library is also used to implement NFS
|
|
keep-alives (@pxref{Keep-alives}).
|
|
|
|
Whenever a mount is deferred or backgrounded, @i{Amd} must wait for it
|
|
to complete before replying to the kernel. However, this would cause
|
|
@i{Amd} to block waiting for a reply to be constructed. Rather than do
|
|
this, @i{Amd} simply @dfn{drops} the call under the assumption that the
|
|
kernel RPC mechanism will automatically retry the request.
|
|
|
|
@c ################################################################
|
|
@node Supported Platforms, Mount Maps, Overview, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Supported Platforms
|
|
@cindex Supported Platforms
|
|
@cindex shared libraries
|
|
@cindex NFS V.3 support
|
|
|
|
@i{Am-utils} has been ported to a wide variety of machines and operating
|
|
systems. @i{Am-utils}'s code works for little-endian and big-endian
|
|
machines, as well as 32 bit and 64 bit architectures. Furthermore, when
|
|
@i{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.
|
|
|
|
The table below lists those platforms supported by the latest release.
|
|
The listing is based on the standard output from GNU's
|
|
@code{config.guess} script. Since significant changes have been made to
|
|
am-utils, not all systems listed here have been verified working for all
|
|
features.
|
|
|
|
@multitable {Auto-Configured System Name} {Config} {Compile} {Amd} {NFS3} {Shlib} {Hlfsd}
|
|
@c @multitable @columnfractions .5 .1 .1 .1 .1 .1
|
|
|
|
@item @b{Auto-Configured System Name}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab @b{Config} @tab @b{Compile} @tab @b{Amd} @tab @b{NFS3} @tab @b{Shlib} @tab @b{Hlfsd}
|
|
|
|
@item @b{alpha-dec-osf2.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab ? @tab no @tab ?
|
|
|
|
@item @b{alpha-dec-osf4.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{alphaev5-unknown-linux-gnu}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{alphaev5-unknown-linux-gnu-rh5.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{hppa1.0-hp-hpux11.00}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab no @tab yes @tab ?
|
|
|
|
@item @b{hppa1.1-hp-hpux10.10}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no @tab ?
|
|
|
|
@item @b{hppa1.1-hp-hpux10.20}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab no @tab no @tab ?
|
|
|
|
@item @b{hppa1.1-hp-hpux9.01}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{hppa1.1-hp-hpux9.05}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{hppa1.1-hp-hpux9.07}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{hppa2.0w-hp-hpux11.00}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i386-pc-bsdi2.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no @tab ?
|
|
|
|
@item @b{i386-pc-bsdi3.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab no @tab ?
|
|
|
|
@item @b{i386-pc-bsdi3.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab no @tab ?
|
|
|
|
@item @b{i386-pc-bsdi4.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-pc-bsdi4.0.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-pc-solaris2.5.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes
|
|
|
|
@item @b{i386-pc-solaris2.6}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes
|
|
|
|
@item @b{i386-pc-solaris2.7}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes
|
|
|
|
@item @b{i386-unknown-freebsd2.1.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab ? @tab ?
|
|
|
|
@item @b{i386-unknown-freebsd2.2.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsd2.2.6}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsd2.2.7}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsd2.2.8}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsd3.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsdelf3.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsdelf3.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsdelf3.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-freebsdelf4.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-netbsd1.2.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-netbsd1.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-netbsd1.3.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-netbsd1.3.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-netbsd1.3.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-netbsd1.4}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-openbsd2.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-openbsd2.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-openbsd2.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-openbsd2.4}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i386-unknown-openbsd2.5}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i486-ncr-sysv4.3.03}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab ? @tab yes @tab yes @tab ?
|
|
|
|
@item @b{i486-pc-linux-gnu-rh6.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i486-pc-linux-gnulibc1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i486-pc-linux-gnulibc1-rh4.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i486-pc-linux-gnuoldld}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i586-pc-linux-gnu}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i586-pc-linux-gnu-rh5.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i586-pc-linux-gnu-rh6.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i586-pc-linux-gnulibc1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i586-pc-linux-gnulibc1-rh4.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
|
|
@item @b{i686-pc-linux-gnu}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i686-pc-linux-gnu-rh5.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i686-pc-linux-gnu-rh6.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i686-pc-linux-gnulibc}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{i686-pc-linux-gnulibc1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{m68k-hp-hpux9.00}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab ? @tab ?
|
|
|
|
@item @b{m68k-sun-sunos4.1.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no @tab ?
|
|
|
|
@item @b{m68k-next-nextstep3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no @tab ?
|
|
|
|
@item @b{mips-dec-ultrix4.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab ? @tab ?
|
|
|
|
@item @b{mips-sgi-irix5.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab ? @tab ? @tab ? @tab ? @tab ? @tab ?
|
|
|
|
@item @b{mips-sgi-irix5.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{mips-sgi-irix6.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{mips-sgi-irix6.4}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{mips-sgi-irix6.5}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab ? @tab yes @tab yes @tab ?
|
|
|
|
@item @b{powerpc-ibm-aix4.1.5.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no/broken @tab ?
|
|
|
|
@item @b{powerpc-ibm-aix4.2.1.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab no/broken @tab ?
|
|
|
|
@item @b{powerpc-ibm-aix4.3.1.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab ? @tab yes @tab ? @tab ?
|
|
|
|
@item @b{powerpc-unknown-linux-gnu}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{rs6000-ibm-aix3.2}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab ? @tab ?
|
|
|
|
@item @b{rs6000-ibm-aix3.2.5}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab ? @tab ?
|
|
|
|
@item @b{rs6000-ibm-aix4.1.4.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no/broken @tab ?
|
|
|
|
@item @b{rs6000-ibm-aix4.1.5.0}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab no/broken @tab ?
|
|
|
|
@item @b{sparc-sun-solaris2.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-solaris2.4}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-solaris2.5}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-solaris2.5.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes
|
|
|
|
@item @b{sparc-sun-solaris2.6}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes
|
|
|
|
@item @b{sparc-sun-solaris2.7}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes
|
|
|
|
@item @b{sparc-sun-sunos4.1.1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-sunos4.1.3}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-sunos4.1.3C}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-sunos4.1.3_U1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-sun-sunos4.1.4}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-unknown-linux-gnulibc1}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@item @b{sparc-unknown-netbsd1.2E}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab ? @tab ? @tab ?
|
|
|
|
@item @b{sparc-unknown-netbsd1.2G}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab ? @tab ? @tab ?
|
|
|
|
@item @b{sparc64-unknown-linux-gnu}
|
|
@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd}
|
|
@tab yes @tab yes @tab yes @tab n/a @tab yes @tab ?
|
|
|
|
@end multitable
|
|
|
|
See the @file{INSTALL} in the distribution for more specific details on
|
|
building and/or configuring for some systems.
|
|
|
|
@c ################################################################
|
|
@node Mount Maps, Amd Command Line Options, Supported Platforms, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Mount Maps
|
|
@cindex Mount maps
|
|
@cindex Automounter configuration maps
|
|
@cindex Mount information
|
|
|
|
@i{Amd} has no built-in knowledge of machines or filesystems.
|
|
External @dfn{mount-maps} are used to provide the required information.
|
|
Specifically, @i{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 (@pxref{fs Option}). A
|
|
location may also contain @dfn{selectors} (@pxref{Selectors}).@refill
|
|
|
|
@menu
|
|
* Map Types::
|
|
* Key Lookup::
|
|
* Location Format::
|
|
@end menu
|
|
|
|
@node Map Types, Key Lookup, Mount Maps, Mount Maps
|
|
@comment node-name, next, previous, up
|
|
@section Map Types
|
|
@cindex Mount map types
|
|
@cindex Map types
|
|
@cindex Configuration map types
|
|
@cindex Types of mount map
|
|
@cindex Types of configuration map
|
|
@cindex Determining the map type
|
|
|
|
A mount-map provides the run-time configuration information to @i{Amd}.
|
|
Maps can be implemented in many ways. Some of the forms supported by
|
|
@i{Amd} are regular files, ndbm databases, NIS maps, the @dfn{Hesiod}
|
|
name server, and even the password file.
|
|
|
|
A mount-map @dfn{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, @i{Amd} attempts to reference the map of the
|
|
appropriate type. If a map is found, @i{Amd} notes the type for future
|
|
use and deletes the reference, for example closing any open file
|
|
descriptors. The available maps are configured when @i{Amd} is built
|
|
and can be displayed by running the command @samp{amd -v}.
|
|
|
|
When using an @i{Amd} configuration file (@pxref{Amd Configuration File})
|
|
and the keyword @samp{map_type} (@pxref{map_type Parameter}), you may
|
|
force the map used to any type.
|
|
|
|
By default, @i{Amd} caches data in a mode dependent on the type of map.
|
|
This is the same as specifying @samp{cache:=mapdefault} and selects a
|
|
suitable default cache mode depending on the map type. The individual
|
|
defaults are described below. The @var{cache} option can be specified
|
|
on automount points to alter the caching behavior (@pxref{Automount
|
|
Filesystem}).@refill
|
|
|
|
The following map types have been implemented, though some are not
|
|
available on all machines. Run the command @samp{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::
|
|
@end menu
|
|
|
|
@node File maps, ndbm maps, Map Types, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection File maps
|
|
@cindex File maps
|
|
@cindex Flat file maps
|
|
@cindex File map syntactic conventions
|
|
|
|
When @i{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 (@samp{\}) as
|
|
the last character of a line in the file. The backslash, newline character
|
|
@emph{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:
|
|
|
|
@example
|
|
key valA valB; \
|
|
valC
|
|
@end example
|
|
|
|
specifies @emph{three} locations, and is identical to
|
|
|
|
@example
|
|
key valA valB; valC
|
|
@end example
|
|
|
|
However,
|
|
|
|
@example
|
|
key valA valB;\
|
|
valC
|
|
@end example
|
|
|
|
specifies only @emph{two} locations, and is identical to
|
|
|
|
@example
|
|
key valA valB;valC
|
|
@end example
|
|
|
|
After a complete line has been read from the file, including
|
|
continuations, @i{Amd} determines whether there is a comment on the
|
|
line. A comment begins with a hash (``@samp{#}'') 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 @dfn{only} apply to
|
|
file maps, or ndbm maps built with the @code{mk-amd-map} program.
|
|
|
|
When caching is enabled, file maps have a default cache mode of
|
|
@code{all} (@pxref{Automount Filesystem}).
|
|
|
|
@node ndbm maps, NIS maps, File maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection ndbm maps
|
|
@cindex ndbm maps
|
|
|
|
An ndbm map may be used as a fast access form of a file map. The program,
|
|
@code{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 @emph{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 @samp{all} (@pxref{Automount Filesystem}).
|
|
|
|
@node NIS maps, NIS+ maps, ndbm maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection NIS maps
|
|
@cindex NIS (YP) maps
|
|
|
|
When using NIS (formerly YP), an @i{Amd} map is implemented directly
|
|
by the underlying NIS map. Comments and continuation lines are
|
|
@emph{not} supported in the automounter and must be stripped when
|
|
constructing the NIS server's database.
|
|
|
|
NIS maps have a default cache mode of @code{all} (@pxref{Automount
|
|
Filesystem}).
|
|
|
|
The following rule illustrates what could be added to your NIS @file{Makefile},
|
|
in this case causing the @file{amd.home} map to be rebuilt:
|
|
@example
|
|
$(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
|
|
@end example
|
|
|
|
Here @code{$(YPTSDIR)} contains the time stamp files, and @code{$(YPDBDIR)} contains
|
|
the dbm format NIS files.
|
|
|
|
@node NIS+ maps, Hesiod maps, NIS maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection NIS+ maps
|
|
@cindex NIS+ maps
|
|
|
|
NIS+ maps do not support cache mode @samp{all} and, when caching is
|
|
enabled, have a default cache mode of @samp{inc}.
|
|
|
|
XXX: FILL IN WITH AN EXAMPLE.
|
|
|
|
@node Hesiod maps, Password maps, NIS+ maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection Hesiod maps
|
|
@cindex Hesiod maps
|
|
|
|
When the map name begins with the string @samp{hesiod.} lookups are made
|
|
using the @dfn{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 @code{automount} context, or
|
|
the @i{amd.conf} parameter @samp{hesiod_base} (@pxref{hesiod_base
|
|
Parameter}). For example, if the the key is @samp{jsp} and map name is
|
|
@samp{hesiod.homes} then @dfn{Hesiod} is asked to resolve
|
|
@samp{jsp.homes.automount}.
|
|
|
|
Hesiod maps do not support cache mode @samp{all} and, when caching is
|
|
enabled, have a default cache mode of @samp{inc} (@pxref{Automount
|
|
Filesystem}).
|
|
|
|
The following is an example of a @dfn{Hesiod} map entry:
|
|
|
|
@example
|
|
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"
|
|
@end example
|
|
|
|
@node Password maps, Union maps, Hesiod maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection Password maps
|
|
@cindex Password file maps
|
|
@cindex /etc/passwd maps
|
|
@cindex User maps, automatic generation
|
|
@cindex Automatic generation of user maps
|
|
@cindex Using the password file as a map
|
|
|
|
The password map support is unlike the four previous map types. When
|
|
the map name is the string @file{/etc/passwd} @i{Amd} can lookup a user
|
|
name in the password file and re-arrange the home directory field to
|
|
produce a usable map entry.
|
|
|
|
@i{Amd} assumes the home directory has the format
|
|
`@t{/}@i{anydir}@t{/}@i{dom1}@t{/../}@i{domN}@t{/}@i{login}'.
|
|
@c @footnote{This interpretation is not necessarily exactly what you want.}
|
|
It breaks this string into a map entry where @code{$@{rfs@}} has the
|
|
value `@t{/}@i{anydir}@t{/}@i{domN}', @code{$@{rhost@}} has the value
|
|
`@i{domN}@t{.}@i{...}@t{.}@i{dom1}', and @code{$@{sublink@}} has the
|
|
value @i{login}.@refill
|
|
|
|
Thus if the password file entry was
|
|
|
|
@example
|
|
/home/achilles/jsp
|
|
@end example
|
|
|
|
the map entry used by @i{Amd} would be
|
|
|
|
@example
|
|
rfs:=/home/achilles;rhost:=achilles;sublink:=jsp
|
|
@end example
|
|
|
|
Similarly, if the password file entry was
|
|
|
|
@example
|
|
/home/cc/sugar/mjh
|
|
@end example
|
|
|
|
the map entry used by @i{Amd} would be
|
|
|
|
@example
|
|
rfs:=/home/sugar;rhost:=sugar.cc;sublink:=jsp
|
|
@end example
|
|
|
|
@node Union maps, LDAP maps , Password maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection Union maps
|
|
@cindex Union file maps
|
|
|
|
The union map support is provided specifically for use with the union
|
|
filesystem, @pxref{Union Filesystem}.
|
|
|
|
It is identified by the string @samp{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.
|
|
|
|
@node LDAP maps, , Union maps, Map Types
|
|
@comment node-name, next, previous, up
|
|
@subsection LDAP maps
|
|
@cindex LDAP maps
|
|
@cindex Lightweight Directory Access Protocol
|
|
|
|
LDAP (Lightweight Directory Access Protocol) maps do not support cache
|
|
mode @samp{all} and, when caching is enabled, have a default cache mode
|
|
of @samp{inc}.
|
|
|
|
For example, an @i{Amd} map @samp{amd.home} that looks as follows:
|
|
|
|
@example
|
|
/defaults opts:=rw,intr;type:=link
|
|
|
|
zing -rhost:=shekel \
|
|
host==shekel \
|
|
host!=shekel;type:=nfs
|
|
@end example
|
|
@noindent
|
|
when converted to LDAP (@pxref{amd2ldif}), will result in the following
|
|
LDAP database:
|
|
@example
|
|
$ 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
|
|
@end example
|
|
|
|
@c subsection Gdbm
|
|
|
|
@node Key Lookup, Location Format, Map Types, Mount Maps
|
|
@comment node-name, next, previous, up
|
|
@section How keys are looked up
|
|
@cindex Key lookup
|
|
@cindex Map lookup
|
|
@cindex Looking up keys
|
|
@cindex How keys are looked up
|
|
@cindex Wildcards in maps
|
|
|
|
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 (@pxref{Variable Expansion}) and prefixing. If the automount
|
|
point has a prefix, specified by the @var{pref} option, then that is
|
|
prepended to the search key before the map is searched.
|
|
|
|
If the map cache is a @samp{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 @dfn{wildcard} match is attempted.
|
|
@i{Amd} repeatedly strips the basename from the key, appends @samp{/*} and
|
|
attempts a lookup. Finally, @i{Amd} attempts to locate the special key @samp{*}.
|
|
|
|
For example, the following sequence would be checked if @file{home/dylan/dk2} was
|
|
being located:
|
|
|
|
@example
|
|
home/dylan/dk2
|
|
home/dylan/*
|
|
home/*
|
|
*
|
|
@end example
|
|
|
|
At any point when a wildcard is found, @i{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.
|
|
(@pxref{Filesystem Types}).@refill
|
|
|
|
@node Location Format, , Key Lookup, Mount Maps
|
|
@comment node-name, next, previous, up
|
|
@section Location Format
|
|
@cindex Location format
|
|
@cindex Map entry format
|
|
@cindex How locations are parsed
|
|
|
|
The value field from the lookup provides the information required to
|
|
mount a filesystem. The information is parsed according to the syntax
|
|
shown below.
|
|
|
|
@display
|
|
@i{location-list}:
|
|
@i{location-selection}
|
|
@i{location-list} @i{white-space} @t{||} @i{white-space} @i{location-selection}
|
|
@i{location-selection}:
|
|
@i{location}
|
|
@i{location-selection} @i{white-space} @i{location}
|
|
@i{location}:
|
|
@i{location-info}
|
|
@t{-}@i{location-info}
|
|
@t{-}
|
|
@i{location-info}:
|
|
@i{sel-or-opt}
|
|
@i{location-info}@t{;}@i{sel-or-opt}
|
|
@t{;}
|
|
@i{sel-or-opt}:
|
|
@i{selection}
|
|
@i{opt-ass}
|
|
@i{selection}:
|
|
selector@t{==}@i{value}
|
|
selector@t{!=}@i{value}
|
|
@i{opt-ass}:
|
|
option@t{:=}@i{value}
|
|
@i{white-space}:
|
|
space
|
|
tab
|
|
@end display
|
|
|
|
Note that unquoted whitespace is not allowed in a location description.
|
|
White space is only allowed, and is mandatory, where shown with non-terminal
|
|
@i{white-space}.
|
|
|
|
A @dfn{location-selection} is a list of possible volumes with which to
|
|
satisfy the request. @dfn{location-selection}s are separated by the
|
|
@samp{||} 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 (@pxref{Selectors}).@refill
|
|
|
|
The location-selection, and singleton @dfn{location-list},
|
|
@samp{type:=ufs;dev:=/dev/xd1g} would inform @i{Amd} to mount a UFS
|
|
filesystem from the block special device @file{/dev/xd1g}.
|
|
|
|
The @dfn{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 @samp{"}, for example
|
|
@samp{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 (@pxref{Program Filesystem}).@refill
|
|
|
|
@menu
|
|
* Map Defaults::
|
|
* Variable Expansion::
|
|
* Selectors::
|
|
* Map Options::
|
|
@end menu
|
|
|
|
@node Map Defaults, Variable Expansion, Location Format, Location Format
|
|
@comment node-name, next, previous, up
|
|
@subsection Map Defaults
|
|
@cindex Map defaults
|
|
@cindex How to set default map parameters
|
|
@cindex Setting default map parameters
|
|
|
|
A location beginning with a dash @samp{-} 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 @samp{-fs:=/mnt;opts:=ro} would set the local mount point
|
|
to @file{/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 @samp{/defaults}).
|
|
|
|
@c
|
|
@c A @samp{/defaults} value @dfn{gdef} and a location list
|
|
@c \begin{quote}
|
|
@c $@samp{-}@dfn{def}_a $\verb*+ +$ @dfn{loc}_{a_1} $\verb*+ +$ @dfn{loc}_{a_2} $\verb*+ +$ @samp{-}@dfn{def}_b $\verb*+ +$ @dfn{loc}_{b_1} \ldots$
|
|
@c \end{quote}
|
|
@c is equivalent to
|
|
@c \begin{quote}
|
|
@c $@samp{-}@dfn{gdef}@samp{;}@dfn{def}_a $\verb*+ +$ @dfn{loc}_{a_1} $\verb*+ +$ @dfn{loc}_{a_2} $\verb*+ +$ @samp{-}@dfn{gdef}@samp{;}@dfn{def}_b $\verb*+ +$ @dfn{loc}_{b_1} \ldots$
|
|
@c \end{quote}
|
|
@c which is equivalent to
|
|
@c \begin{quote}
|
|
@c $@dfn{gdef}@samp{;}@dfn{def}_a@samp{;}@dfn{loc}_{a_1} $\verb*+ +$@dfn{gdef}@samp{;}@dfn{def}_a@samp{;}@dfn{loc}_{a_2} $\verb*+ +$@dfn{gdef}@samp{;}@dfn{def}_b@samp{;}@dfn{loc}_{b_1} \ldots$
|
|
@c \end{quote}
|
|
|
|
@node Variable Expansion, Selectors, Map Defaults, Location Format
|
|
@comment node-name, next, previous, up
|
|
@subsection Variable Expansion
|
|
@cindex Variable expansion
|
|
@cindex How variables are expanded
|
|
@cindex Pathname operators
|
|
@cindex Domain stripping
|
|
@cindex Domainname operators
|
|
@cindex Stripping the local domain name
|
|
@cindex Environment variables
|
|
@cindex How to access environment variables in maps
|
|
|
|
To allow generic location specifications @i{Amd} does variable expansion
|
|
on each location and also on some of the option strings. Any option or
|
|
selector appearing in the form @code{$@dfn{var}} is replaced by the
|
|
current value of that option or selector. For example, if the value of
|
|
@code{$@{key@}} was @samp{bin}, @code{$@{autodir@}} was @samp{/a} and
|
|
@code{$@{fs@}} was `@t{$@{autodir@}}@t{/local/}@t{$@{key@}}' then
|
|
after expansion @code{$@{fs@}} would have the value @samp{/a/local/bin}.
|
|
Any environment variable can be accessed in a similar way.@refill
|
|
|
|
Two pathname operators are available when expanding a variable. If the
|
|
variable name begins with @samp{/} then only the last component of the
|
|
pathname is substituted. For example, if @code{$@{path@}} was
|
|
@samp{/foo/bar} then @code{$@{/path@}} would be expanded to @samp{bar}.
|
|
Similarly, if the variable name ends with @samp{/} then all but the last
|
|
component of the pathname is substituted. In the previous example,
|
|
@code{$@{path/@}} would be expanded to @samp{/foo}.@refill
|
|
|
|
Two domain name operators are also provided. If the variable name
|
|
begins with @samp{.} then only the domain part of the name is
|
|
substituted. For example, if @code{$@{rhost@}} was
|
|
@samp{swan.doc.ic.ac.uk} then @code{$@{.rhost@}} would be expanded to
|
|
@samp{doc.ic.ac.uk}. Similarly, if the variable name ends with @samp{.}
|
|
then only the host component is substituted. In the previous example,
|
|
@code{$@{rhost.@}} would be expanded to @samp{swan}.@refill
|
|
|
|
Variable expansion is a two phase process. Before a location is parsed,
|
|
all references to selectors, @i{eg} @code{$@{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: @var{sublink}, @var{rfs}, @var{fs}, @var{opts},
|
|
@var{remopts}, @var{mount} and @var{unmount}.
|
|
|
|
Note that expansion of option values is done after @dfn{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:
|
|
|
|
@enumerate
|
|
@item
|
|
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 `@t{$@{arch@}}@t{.bin}' and the machine architecture
|
|
was @samp{vax}, the value given to @code{$@{key@}} would be
|
|
@samp{vax.bin}.@refill
|
|
|
|
@item
|
|
the value of @code{$@{rhost@}} is expanded and normalized before the
|
|
other options are expanded. The normalization process strips any local
|
|
sub-domain components. For example, if @code{$@{domain@}} was
|
|
@samp{Berkeley.EDU} and @code{$@{rhost@}} was initially
|
|
@samp{snow.Berkeley.EDU}, after the normalization it would simply be
|
|
@samp{snow}. Hostname normalization is currently done in a
|
|
@emph{case-dependent} manner.@refill
|
|
@end enumerate
|
|
|
|
@c======================================================================
|
|
@node Selectors, Map Options, Variable Expansion, Location Format
|
|
@comment node-name, next, previous, up
|
|
@subsection Selectors
|
|
@cindex 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 @samp{arch==sun3;os==sunos4} would only
|
|
apply on Sun-3s running SunOS 4.x.
|
|
|
|
Selectors can be negated by using @samp{!=} instead of @samp{==}. For
|
|
example to select a location on all non-Vax machines the selector
|
|
@samp{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 @i{Amd} uses the @dfn{error} filesystem
|
|
(@pxref{Error Filesystem}). This is equivalent to having a location
|
|
@samp{type:=error} at the end of each mount-map entry.@refill
|
|
|
|
The default value of many of the selectors listed here can be overridden
|
|
by an @i{Amd} command line switch or in an @i{Amd} configuration file.
|
|
@xref{Amd Configuration File}.
|
|
|
|
These are the selectors currently implemented.
|
|
|
|
@menu
|
|
* arch Selector Variable::
|
|
* autodir Selector Variable::
|
|
* byte Selector Variable::
|
|
* cluster Selector Variable::
|
|
* domain Selector Variable::
|
|
* host Selector Variable::
|
|
* hostd Selector Variable::
|
|
* karch Selector Variable::
|
|
* os Selector Variable::
|
|
* osver Selector Variable::
|
|
|
|
* key Selector Variable::
|
|
* map Selector Variable::
|
|
* netnumber Selector Variable::
|
|
* network Selector Variable::
|
|
* path Selector Variable::
|
|
* wire Selector Variable::
|
|
|
|
* exists Selector Function::
|
|
* false Selector Function::
|
|
* netgrp Selector Function::
|
|
* netgrpd Selector Function::
|
|
* in_network Selector Function::
|
|
* true Selector Function::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node arch Selector Variable, autodir Selector Variable, Selectors, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection arch Selector Variable
|
|
@cindex arch Selector Variable
|
|
@cindex arch, mount selector
|
|
@cindex Mount selector; arch
|
|
@cindex Selector; arch
|
|
|
|
The machine architecture which was automatically determined at compile
|
|
time. The architecture type can be displayed by running the command
|
|
@samp{amd -v}. @xref{Supported Platforms}.@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node autodir Selector Variable, byte Selector Variable, arch Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection autodir Selector Variable
|
|
@cindex autodir Selector Variable
|
|
@cindex autodir, mount selector
|
|
@cindex Mount selector; autodir
|
|
@cindex Selector; autodir
|
|
|
|
The default directory under which to mount filesystems. This may be
|
|
changed by the @code{-a} command line option. @xref{fs Option}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node byte Selector Variable, cluster Selector Variable, autodir Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection byte Selector Variable
|
|
@cindex byte Selector Variable
|
|
@cindex byte, mount selector
|
|
@cindex Mount selector; byte
|
|
@cindex Selector; byte
|
|
|
|
The machine's byte ordering. This is either @samp{little}, indicating
|
|
little-endian, or @samp{big}, indicating big-endian. One possible use
|
|
is to share @samp{rwho} databases (@pxref{rwho servers}). Another is to
|
|
share ndbm databases, however this use can be considered a courageous
|
|
juggling act.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node cluster Selector Variable, domain Selector Variable, byte Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection cluster Selector Variable
|
|
@cindex cluster Selector Variable
|
|
@cindex cluster, mount selector
|
|
@cindex Mount selector; cluster
|
|
@cindex Selector; cluster
|
|
|
|
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. @code{$@{cluster@}} defaults to the value of
|
|
@code{$@{domain@}} unless a different value is set with the @code{-C}
|
|
command line option.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node domain Selector Variable, host Selector Variable, cluster Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection domain Selector Variable
|
|
@cindex domain Selector Variable
|
|
@cindex domain, mount selector
|
|
@cindex Mount selector; domain
|
|
@cindex Selector; domain
|
|
|
|
The local domain name as specified by the @code{-d} command line option.
|
|
@xref{host Selector Variable}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node host Selector Variable, hostd Selector Variable, domain Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection host Selector Variable
|
|
@cindex host Selector Variable
|
|
@cindex host, mount selector
|
|
@cindex Mount selector; host
|
|
@cindex Selector; host
|
|
|
|
The local hostname as determined by @b{gethostname}(2). If no domain
|
|
name was specified on the command line and the hostname contains a
|
|
period @samp{.} then the string before the period is used as the host
|
|
name, and the string after the period is assigned to @code{$@{domain@}}.
|
|
For example, if the hostname is @samp{styx.doc.ic.ac.uk} then
|
|
@code{host} would be @samp{styx} and @code{domain} would be
|
|
@samp{doc.ic.ac.uk}. @code{hostd} would be
|
|
@samp{styx.doc.ic.ac.uk}.@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node hostd Selector Variable, karch Selector Variable, host Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection hostd Selector Variable
|
|
@cindex hostd Selector Variable
|
|
@cindex hostd, mount selector
|
|
@cindex Mount selector; hostd
|
|
@cindex Selector; hostd
|
|
|
|
This resolves to the @code{$@{host@}} and @code{$@{domain@}}
|
|
concatenated with a @samp{.} inserted between them if required. If
|
|
@code{$@{domain@}} is an empty string then @code{$@{host@}} and
|
|
@code{$@{hostd@}} will be identical.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node karch Selector Variable, os Selector Variable, hostd Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection karch Selector Variable
|
|
@cindex karch Selector Variable
|
|
@cindex karch, mount selector
|
|
@cindex Mount selector; karch
|
|
@cindex Selector; karch
|
|
|
|
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
|
|
@samp{/usr/kvm} volumes. @code{$@{karch@}} defaults to the ``machine''
|
|
value gotten from @b{uname}(2). If the @b{uname}(2) system call is not
|
|
available, the value of @code{$@{karch@}} defaults to that of
|
|
@code{$@{arch@}}. Finally, a different value can be set with the @code{-k}
|
|
command line option.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node os Selector Variable, osver Selector Variable, karch Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection os Selector Variable
|
|
@cindex os Selector Variable
|
|
@cindex os, mount selector
|
|
@cindex Mount selector; os
|
|
@cindex Selector; os
|
|
|
|
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 @samp{amd -v}. @xref{Supported
|
|
Platforms}.@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node osver Selector Variable, key Selector Variable, os Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection osver Selector Variable
|
|
@cindex osver Selector Variable
|
|
@cindex osver, mount selector
|
|
@cindex Mount selector; osver
|
|
@cindex Selector; osver
|
|
|
|
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 @samp{amd -v}. @xref{Supported
|
|
Platforms}.@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@ifhtml
|
|
<HR>
|
|
@end ifhtml
|
|
@sp 3
|
|
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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node key Selector Variable, map Selector Variable, osver Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection key Selector Variable
|
|
@cindex key Selector Variable
|
|
@cindex key, mount selector
|
|
@cindex Mount selector; key
|
|
@cindex Selector; key
|
|
|
|
The name being resolved. For example, if @file{/home} is an automount
|
|
point, then accessing @file{/home/foo} would set @code{$@{key@}} to the
|
|
string @samp{foo}. The key is prefixed by the @var{pref} option set in
|
|
the parent mount point. The default prefix is an empty string. If the
|
|
prefix was @file{blah/} then @code{$@{key@}} would be set to
|
|
@file{blah/foo}.@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node map Selector Variable, netnumber Selector Variable, key Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection map Selector Variable
|
|
@cindex map Selector Variable
|
|
@cindex map, mount selector
|
|
@cindex Mount selector; map
|
|
@cindex Selector; map
|
|
|
|
The name of the mount map being used.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node netnumber Selector Variable, network Selector Variable, map Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection netnumber Selector Variable
|
|
@cindex netnumber Selector Variable
|
|
@cindex netnumber, mount selector
|
|
@cindex Mount selector; netnumber
|
|
@cindex Selector; netnumber
|
|
|
|
This selector is identical to the @samp{in_network} selector function,
|
|
see @ref{in_network Selector Function}. It will match either the name
|
|
or number of @i{any} network interface on which this host is connected
|
|
to. The names and numbers of all attached interfaces are available from
|
|
the output of @samp{amd -v}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node network Selector Variable, path Selector Variable, netnumber Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection network Selector Variable
|
|
@cindex network Selector Variable
|
|
@cindex network, mount selector
|
|
@cindex Mount selector; network
|
|
@cindex Selector; network
|
|
|
|
This selector is identical to the @samp{in_network} selector function,
|
|
see @ref{in_network Selector Function}. It will match either the name
|
|
or number of @i{any} network interface on which this host is connected
|
|
to. The names and numbers of all attached interfaces are available from
|
|
the output of @samp{amd -v}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node path Selector Variable, wire Selector Variable, network Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection path Selector Variable
|
|
@cindex path Selector Variable
|
|
@cindex path, mount selector
|
|
@cindex Mount selector; path
|
|
@cindex Selector; path
|
|
|
|
The full pathname of the name being resolved. For example
|
|
@file{/home/foo} in the example above.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node wire Selector Variable, exists Selector Function, path Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection wire Selector Variable
|
|
@cindex wire Selector Variable
|
|
@cindex wire, mount selector
|
|
@cindex Mount selector; wire
|
|
@cindex Selector; wire
|
|
|
|
This selector is identical to the @samp{in_network} selector function,
|
|
see @ref{in_network Selector Function}. It will match either the name
|
|
or number of @i{any} network interface on which this host is connected
|
|
to. The names and numbers of all attached interfaces are available from
|
|
the output of @samp{amd -v}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@ifhtml
|
|
<HR>
|
|
@end ifhtml
|
|
@sp 2
|
|
The following boolean functions are selectors which take an argument
|
|
@i{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
|
|
@samp{!} to their name.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node exists Selector Function, false Selector Function, wire Selector Variable, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection exists Selector Function
|
|
@cindex exists Selector Function
|
|
@cindex exists, boolean mount selector
|
|
@cindex !exists, boolean mount selector
|
|
@cindex Mount selector; exists
|
|
@cindex Selector; exists
|
|
|
|
If the file listed by @i{ARG} exists (via @b{lstat}(2)), this function
|
|
evaluates to true. Otherwise it evaluates to false.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node false Selector Function, netgrp Selector Function, exists Selector Function, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection false Selector Function
|
|
@cindex false Selector Function
|
|
@cindex false, boolean mount selector
|
|
@cindex !false, boolean mount selector
|
|
@cindex Mount selector; false
|
|
@cindex Selector; false
|
|
|
|
Always evaluates to false. @i{ARG} is ignored.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node netgrp Selector Function, netgrpd Selector Function, false Selector Function, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection netgrp Selector Function
|
|
@cindex netgrp Selector Function
|
|
@cindex netgrp, boolean mount selector
|
|
@cindex !netgrp, boolean mount selector
|
|
@cindex Mount selector; netgrp
|
|
@cindex Selector; netgrp
|
|
|
|
If the current host as determined by the value of @code{$@{host@}}
|
|
(e.g., short host name) is a member of the netgroup @i{ARG}, this
|
|
selector evaluates to true. Otherwise it evaluates to false.
|
|
|
|
For example, suppose you have a netgroup @samp{ppp-hosts}, and for
|
|
reasons of performance, these have a local @file{/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:
|
|
|
|
@example
|
|
home/* netgrp(ppp-hosts);type:=link;fs:=/local/$@{key@} \
|
|
!netgrp(ppp-hosts);type:=nfs;rhost=serv1;rfs:=/remote/$@{key@}
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node netgrpd Selector Function, in_network Selector Function, netgrp Selector Function, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection netgrpd Selector Function
|
|
@cindex netgrpd Selector Function
|
|
@cindex netgrpd, boolean mount selector
|
|
@cindex !netgrpd, boolean mount selector
|
|
@cindex Mount selector; netgrpd
|
|
@cindex Selector; netgrpd
|
|
|
|
If the current host as determined by the value of @code{$@{hostd@}} is a
|
|
member of the netgroup @i{ARG}, this selector evaluates to true.
|
|
Otherwise it evaluates to false.
|
|
|
|
The @samp{netgrpd} function uses fully-qualified host names
|
|
(@code{$@{hostd@}}) to match netgroup names, while the @samp{netgrp}
|
|
function (@pxref{netgrp Selector Function}) uses short host names
|
|
(@code{$@{host@}}).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node in_network Selector Function, true Selector Function, netgrpd Selector Function, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection in_network Selector Function
|
|
@cindex in_network Selector Function
|
|
@cindex in_network, boolean mount selector
|
|
@cindex !in_network, boolean mount selector
|
|
@cindex Mount selector; in_network
|
|
@cindex Selector; in_network
|
|
|
|
If the current host has any network interface that is locally attached
|
|
to the network specified in @i{ARG} (either via name or number), this
|
|
selector evaluates to true. Otherwise it evaluates to false.
|
|
|
|
For example, suppose you have two servers that have an exportable
|
|
@file{/opt} that smaller clients can NFS mount. The two servers are
|
|
say, @samp{serv1} on network @samp{foo-net.site.com} and @samp{serv2} on
|
|
network @samp{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:
|
|
|
|
@example
|
|
opt in_network(foo-net.site.com);rhost:=serv1;rfs:=/opt \
|
|
in_network(123.4.5.0);rhost:=serv2;rfs:=/opt \
|
|
rhost:=fallback-server
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node true Selector Function, , in_network Selector Function, Selectors
|
|
@comment node-name, next, previous, up
|
|
@subsubsection true Selector Function
|
|
@cindex true Selector Function
|
|
@cindex true, boolean mount selector
|
|
@cindex !true, boolean mount selector
|
|
@cindex Mount selector; true
|
|
@cindex Selector; true
|
|
|
|
Always evaluates to true. @i{ARG} is ignored.
|
|
|
|
@c ================================================================
|
|
@node Map Options, , Selectors, Location Format
|
|
@comment node-name, next, previous, up
|
|
@subsection Map Options
|
|
@cindex Map options
|
|
@cindex Setting map options
|
|
|
|
Options are parsed concurrently with selectors. The difference is that
|
|
when an option is seen the string following the @samp{:=} is
|
|
recorded for later use. As a minimum the @var{type} option must be
|
|
specified. Each filesystem type has other options which must also be
|
|
specified. @xref{Filesystem Types}, for details on the filesystem
|
|
specific options.@refill
|
|
|
|
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::
|
|
@end menu
|
|
|
|
@node addopts Option, delay Option, Map Options, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection addopts Option
|
|
@cindex Setting additional options on a mount location
|
|
@cindex Overriding or adding options to a mount
|
|
@cindex addopts, mount option
|
|
@cindex Mount option; addopts
|
|
|
|
This option adds additional options to default options normally
|
|
specified in the @samp{/defaults} entry or the defaults of the key entry
|
|
being processed (@pxref{opts Option}). Normally when you specify
|
|
@samp{opts} in both the @samp{/defaults} and the map entry, the latter
|
|
overrides the former completely. But with @samp{addopts} it will append
|
|
the options and override any conflicting ones.
|
|
|
|
@samp{addopts} also overrides the value of the @samp{remopts} option
|
|
(@pxref{remopts Option}), which unless specified defaults to the value
|
|
of @samp{opts}.
|
|
|
|
Options which start with @samp{no} will override those with the same
|
|
name that do not start with @samp{no} and vice verse. Special handling
|
|
is given to inverted options such as @samp{soft} and @samp{hard},
|
|
@samp{bg} and @samp{fg}, @samp{ro} and @samp{rw}, etc.
|
|
|
|
For example, if the default options specified were
|
|
@example
|
|
opts:=rw,nosuid,intr,rsize=1024,wsize=1024,quota,posix
|
|
@end example
|
|
|
|
and the ones specified in a map entry were
|
|
|
|
@example
|
|
addopts:=grpid,suid,ro,rsize=2048,quota,nointr
|
|
@end example
|
|
|
|
then the actual options used would be
|
|
|
|
@example
|
|
wsize=1024,posix,grpid,suid,ro,rsize=2048,quota,nointr
|
|
@end example
|
|
|
|
@node delay Option, fs Option, addopts Option, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection delay Option
|
|
@cindex Setting a delay on a mount location
|
|
@cindex Delaying mounts from specific locations
|
|
@cindex Primary server
|
|
@cindex Secondary server
|
|
@cindex delay, mount option
|
|
@cindex Mount option; delay
|
|
|
|
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.
|
|
|
|
@node fs Option, opts Option, delay Option, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection fs Option
|
|
@cindex Setting the local mount point
|
|
@cindex Overriding the default mount point
|
|
@cindex fs, mount option
|
|
@cindex Mount option; fs
|
|
|
|
The local mount point. The semantics of this option vary between
|
|
filesystems.
|
|
|
|
For NFS and UFS filesystems the value of @code{$@{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 @dfn{local} mount point @dfn{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 @b{getcwd}(3) traverses the namespace to
|
|
find the pathname of the current directory.
|
|
|
|
The @samp{fs} option defaults to
|
|
@code{$@{autodir@}/$@{rhost@}$@{rfs@}}. In addition,
|
|
@samp{rhost} defaults to the local host name (@code{$@{host@}}) and
|
|
@samp{rfs} defaults to the value of @code{$@{path@}}, which is the full
|
|
path of the requested file; @samp{/home/foo} in the example above
|
|
(@pxref{Selectors}). @code{$@{autodir@}} defaults to @samp{/a} but may
|
|
be changed with the @code{-a} command line option. Sun's automounter
|
|
defaults to @samp{/tmp_mnt}. Note that there is no @samp{/} between
|
|
the @code{$@{rhost@}} and @code{$@{rfs@}} since @code{$@{rfs@}} begins
|
|
with a @samp{/}.@refill
|
|
|
|
@node opts Option, remopts Option, fs Option, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection opts Option
|
|
@cindex Setting system mount options
|
|
@cindex Passing parameters to the mount system call
|
|
@cindex mount system call
|
|
@cindex mount system call flags
|
|
@cindex The mount system call
|
|
@cindex opts, mount option
|
|
@cindex Mount option; opts
|
|
|
|
The options to pass to the mount system call. A leading @samp{-} is
|
|
silently ignored. The mount options supported generally correspond to
|
|
those used by @b{mount}(8) and are listed below. Some additional
|
|
pseudo-options are interpreted by @i{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 @samp{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 @code{compress} and @code{spongy} options.
|
|
|
|
@table @code
|
|
|
|
@item acdirmax=@var{n}
|
|
@cindex Mount flags; acdirmax
|
|
Set the maximum directory attribute cache timeout to @var{n}.
|
|
|
|
@item acdirmin=@var{n}
|
|
@cindex Mount flags; acdirmin
|
|
Set the minimum directory attribute cache timeout to @var{n}.
|
|
|
|
@item acregmax=@var{n}
|
|
@cindex Mount flags; acregmax
|
|
Set the maximum file attribute cache timeout to @var{n}.
|
|
|
|
@item acregmin=@var{n}
|
|
@cindex Mount flags; acregmin
|
|
Set the minimum file attribute cache timeout to @var{n}.
|
|
|
|
@item actimeo=@var{n}
|
|
@cindex Mount flags; actimeo
|
|
Set the overall attribute cache timeout to @var{n}.
|
|
|
|
@item auto
|
|
@cindex Mount flags; auto
|
|
@itemx ignore
|
|
@cindex Mount flags; ignore
|
|
Ignore this mount by @b{df}(1).
|
|
|
|
@item cache
|
|
@cindex Mount flags; cache
|
|
Allow data to be cached from a remote server for this mount.
|
|
|
|
@item compress
|
|
@cindex Mount flags; compress
|
|
Use NFS compression protocol.
|
|
|
|
@item defperm
|
|
@cindex Mount flags; 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.
|
|
|
|
@item dev
|
|
@cindex Mount flags; dev
|
|
Allow local special devices on this filesystem.
|
|
|
|
@item dumbtimr
|
|
@cindex Mount flags; 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.
|
|
|
|
@item extatt
|
|
@cindex Mount flags; extatt
|
|
Enable extended attributes in ISO-9660 file systems.
|
|
|
|
@item fsid
|
|
@cindex Mount flags; fsid
|
|
Set ID of filesystem.
|
|
|
|
@item gens
|
|
@cindex Mount flags; gens
|
|
Enable generations in ISO-9660 file systems. Generations allow you to
|
|
see all versions of a given file.
|
|
|
|
@item grpid
|
|
@cindex Mount flags; grpid
|
|
Use BSD directory group-id semantics.
|
|
|
|
@item int
|
|
@cindex Mount flags; int
|
|
@itemx intr
|
|
@cindex Mount flags; intr
|
|
Allow keyboard interrupts on hard mounts.
|
|
|
|
@item multi
|
|
@cindex Mount flags; multi
|
|
Perform multi-component lookup on files.
|
|
|
|
@item maxgroups
|
|
@cindex Mount flags; maxgroups
|
|
Set the maximum number of groups to allow for this mount.
|
|
|
|
@item nfsv3
|
|
@cindex Mount flags; nfsv3
|
|
Use NFS Version 3 for this mount.
|
|
|
|
@item noac
|
|
@cindex Mount flags; noac
|
|
Turn off the attribute cache.
|
|
|
|
@item noauto
|
|
@cindex Mount flags; noauto
|
|
This option is used by the mount command in @samp{/etc/fstab} or
|
|
@samp{/etc/vfstab} and means not to mount this file system when mount -a
|
|
is used.
|
|
|
|
@item nocache
|
|
@cindex Mount flags; nocache
|
|
Do not allow data to be cached from a remote server for this
|
|
mount.
|
|
|
|
@item noconn
|
|
@cindex Mount flags; noconn
|
|
Don't make a connection on datagram transports.
|
|
|
|
@item nocto
|
|
@cindex Mount flags; nocto
|
|
No close-to-open consistency.
|
|
|
|
@item nodefperm
|
|
@cindex Mount flags; nodefperm
|
|
Do not ignore the permission mode bits. Useful for CD-ROMS formatted as
|
|
ISO-9660.
|
|
|
|
@item nodev
|
|
@cindex Mount flags; nodev
|
|
@itemx nodevs
|
|
@cindex Mount flags; nodevs
|
|
Don't allow local special devices on this filesystem.
|
|
|
|
@item noint
|
|
@cindex Mount flags; noint
|
|
Do not allow keyboard interrupts for this mount
|
|
|
|
@item norrip
|
|
@cindex Mount flags; norrip
|
|
Turn off using of the Rock Ridge Interchange Protocol (RRIP) extensions
|
|
to ISO-9660.
|
|
|
|
@item nosub
|
|
@cindex Mount flags; nosub
|
|
Disallow mounts beneath this mount.
|
|
|
|
@item nosuid
|
|
@cindex Mount flags; nosuid
|
|
Don't allow set-uid or set-gid executables on this filesystem.
|
|
|
|
@item noversion
|
|
@cindex Mount flags; noversion
|
|
Strip the extension @samp{;#} from the version string of files recorded
|
|
on an ISO-9660 CD-ROM.
|
|
|
|
@item overlay
|
|
@cindex Mount flags; overlay
|
|
Overlay this mount on top of an existing mount, if any.
|
|
|
|
@item pgthresh=@var{n}
|
|
@cindex Mount flags; pgthresh
|
|
Set the paging threshold to @var{n} kilobytes.
|
|
|
|
@item port=@var{n}
|
|
@cindex Mount flags; port
|
|
Set the NFS port to @var{n}.
|
|
|
|
@item posix
|
|
@cindex Mount flags; posix
|
|
Turn on POSIX static pathconf for mounts.
|
|
|
|
@item proto=@var{s}
|
|
@cindex Mount flags; proto
|
|
Use transport protocol @var{s} for NFS (can be @code{"tcp"} or @code{"udp"}).
|
|
|
|
@item quota
|
|
@cindex Mount flags; quota
|
|
Enable quota checking on this mount.
|
|
|
|
@item rdonly
|
|
@cindex Mount flags; rdonly
|
|
@itemx ro
|
|
@cindex Mount flags; ro
|
|
Mount this filesystem readonly.
|
|
|
|
@item resvport
|
|
@cindex Mount flags; 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.
|
|
|
|
@item retrans=@i{n}
|
|
@cindex Mount flags; retrans
|
|
The number of NFS retransmits made before a user error is generated by a
|
|
@samp{soft} mounted filesystem, and before a @samp{hard} mounted
|
|
filesystem reports @samp{NFS server @dfn{yoyo} not responding still
|
|
trying}.
|
|
|
|
@item retry
|
|
@cindex Mount flags; retry
|
|
Set the NFS retry counter.
|
|
|
|
@item rrip
|
|
@cindex Mount flags; rrip
|
|
Uses the Rock Ridge Interchange Protocol (RRIP) extensions to ISO-9660.
|
|
|
|
@item rsize=@var{n}
|
|
@cindex Mount flags; rsize
|
|
The NFS read packet size. You may need to set this if you are using
|
|
NFS/UDP through a gateway or a slow link.
|
|
|
|
@item rw
|
|
@cindex Mount flags; rw
|
|
Allow reads and writes on this filesystem.
|
|
|
|
@item soft
|
|
@cindex Mount flags; soft
|
|
Give up after @dfn{retrans} retransmissions.
|
|
|
|
@item spongy
|
|
@cindex Mount flags; spongy
|
|
Like @samp{soft} for status requests, and @samp{hard} for data transfers.
|
|
|
|
@item suid
|
|
@cindex Mount flags; suid
|
|
Allow set-uid programs on this mount.
|
|
|
|
@item symttl
|
|
@cindex Mount flags; symttl
|
|
Turn of the symbolic link cache time-to-live.
|
|
|
|
@item sync
|
|
@cindex Mount flags; sync
|
|
Perform synchronous filesystem operations on this mount.
|
|
|
|
@item tcp
|
|
@cindex Mount flags; tcp
|
|
Use TCP/IP instead of UDP/IP, ignored if the NFS implementation does not
|
|
support TCP/IP mounts.
|
|
|
|
@item timeo=@var{n}
|
|
@cindex Mount flags; timeo
|
|
The NFS timeout, in tenth-seconds, before a request is retransmitted.
|
|
|
|
@item vers=@var{n}
|
|
@cindex Mount flags; vers
|
|
Use NFS protocol version number @var{n} (can be 2 or 3).
|
|
|
|
@item wsize=@var{n}
|
|
@cindex Mount flags; wsize
|
|
The NFS write packet size. You may need to set this if you are using
|
|
NFS/UDP through a gateway or a slow link.
|
|
|
|
@end table
|
|
|
|
The following options are implemented by @i{Amd}, rather than being
|
|
passed to the kernel.
|
|
|
|
@table @code
|
|
|
|
@item nounmount
|
|
@cindex Mount flags; nounmount
|
|
Configures the mount so that its time-to-live will
|
|
never expire. This is also the default for some filesystem types.
|
|
@c
|
|
@c Implementation broken:
|
|
|
|
@item ping=@var{n}
|
|
@cindex Mount flags; ping
|
|
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 less than zero,
|
|
no pings are sent and the host is assumed to be always
|
|
up. By default, pings are not sent for an NFS/TCP mount.
|
|
|
|
@item retry=@var{n}
|
|
@cindex Mount flags; retry=@var{n}
|
|
The number of times to retry the mount system call.
|
|
|
|
@item utimeout=@var{n}
|
|
@cindex Mount flags; utimeout=@var{n}
|
|
The interval, in seconds, by which the mount's
|
|
time-to-live is extended after an unmount attempt
|
|
has failed. 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 @code{-w} command line option.
|
|
|
|
@end table
|
|
|
|
@node remopts Option, sublink Option, opts Option, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection remopts Option
|
|
@cindex Setting system mount options for non-local networks
|
|
@cindex remopts, mount option
|
|
@cindex Mount option; remopts
|
|
|
|
This option has the same use as @code{$@{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 @var{remopts}. When a non-local host is accessed, the
|
|
smaller sizes will automatically be used.
|
|
|
|
@i{Amd} determines whether a host is local by examining the network
|
|
interface configuration at startup. Any interface changes made after
|
|
@i{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 @code{$@{remopts@}} is the same as
|
|
the value of @code{$@{opts@}}.
|
|
|
|
@node sublink Option, type Option, remopts Option, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection sublink Option
|
|
@cindex Setting the sublink option
|
|
@cindex sublink, mount option
|
|
@cindex Mount option; sublink
|
|
|
|
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.
|
|
|
|
@node type Option, , sublink Option, Map Options
|
|
@comment node-name, next, previous, up
|
|
@subsubsection type Option
|
|
@cindex Setting the filesystem type option
|
|
@cindex type, mount option
|
|
@cindex Mount option; type
|
|
|
|
The filesystem type to be used. @xref{Filesystem Types}, for a full
|
|
description of each type.@refill
|
|
|
|
@c ################################################################
|
|
@node Amd Command Line Options, Filesystem Types, Mount Maps, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter @i{Amd} Command Line Options
|
|
@cindex Command line options, Amd
|
|
@cindex Amd command line options
|
|
@cindex Overriding defaults on the command line
|
|
|
|
Many of @i{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
|
|
|
|
@example
|
|
amd [@i{options}] [@{ @i{directory} @i{map-name} [-@i{map-options}] @} ...]
|
|
@end example
|
|
|
|
For each directory and map-name given or specified in the
|
|
@file{amd.conf} file, @i{Amd} establishes an automount point. The
|
|
@dfn{map-options} may be any sequence of options or
|
|
selectors---@pxref{Location Format}. The @dfn{map-options} apply only
|
|
to @i{Amd}'s mount point.
|
|
|
|
@samp{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 @samp{/defaults}. When default options
|
|
are given they are prepended to any options specified in the mount-map
|
|
locations as explained in @ref{Map Defaults}.
|
|
|
|
The @dfn{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 @i{Amd} exits.
|
|
Finally, @i{Amd} disassociates itself from its controlling terminal and
|
|
forks into the background.
|
|
|
|
Note: Even if @i{Amd} has been built with @samp{-DDEBUG} (via
|
|
@code{configure --enable-debug}), it will still background itself and
|
|
disassociate itself from the controlling terminal. To use a debugger it
|
|
is necessary to specify @samp{-D nodaemon} on the command line.
|
|
However, even with all of this, mounts and unmounts are performed in the
|
|
background, and @i{Amd} will always fork before doing them. Therefore,
|
|
debugging what happens closely during un/mounts is more challenging.
|
|
|
|
@emph{All} of @i{Amd}'s command options (save @code{-F} and @code{-T})
|
|
can be specified in the @file{amd.conf} file. @xref{Amd Configuration
|
|
File}. If @i{Amd} is invoked without any command line options, it will
|
|
default to using the configuration file @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.
|
|
* -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.
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -a Option, -c Option, Amd Command Line Options, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-a} @var{directory}
|
|
@cindex Automount directory
|
|
@cindex Setting the default mount directory
|
|
|
|
Specifies the default mount directory. This option changes the variable
|
|
@code{$@{autodir@}} which otherwise defaults to @file{/a}. For example,
|
|
some sites prefer @file{/amd} or @file{/n}.
|
|
|
|
@example
|
|
amd -a /amd ...
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -c Option, -d Option, -a Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-c} @var{cache-interval}
|
|
@cindex Cache interval
|
|
@cindex Interval before a filesystem times out
|
|
@cindex Setting the interval before a filesystem times out
|
|
@cindex Changing the interval before a filesystem times out
|
|
|
|
Selects the period, in seconds, for which a name is cached by @i{Amd}.
|
|
If no reference is made to the volume in this period, @i{Amd} discards
|
|
the volume name to filesystem mapping.
|
|
|
|
Once the last reference to a filesystem has been removed, @i{Amd}
|
|
attempts to unmount the filesystem. If the unmount fails the interval
|
|
is extended by a further period as specified by the @samp{-w} command
|
|
line option or by the @samp{utimeout} mount option.
|
|
|
|
The default @dfn{cache-interval} is 300 seconds (five minutes).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -d Option, -k Option, -c Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-d} @var{domain}
|
|
@cindex Domain name
|
|
@cindex Setting the local domain name
|
|
@cindex Overriding the local domain name
|
|
|
|
Specifies the host's domain. This sets the internal variable
|
|
@code{$@{domain@}} and affects the @code{$@{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
|
|
@code{$@{domain@}} is @samp{unknown.domain}.
|
|
|
|
For example, if the local domain was @samp{doc.ic.ac.uk}, @i{Amd} could
|
|
be started as follows:
|
|
|
|
@example
|
|
amd -d doc.ic.ac.uk ...
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -k Option, -l Option, -d Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-k} @var{kernel-architecture}
|
|
@cindex Setting the Kernel architecture
|
|
|
|
Specifies the kernel architecture of the system. This is usually the
|
|
output of @samp{uname -m} (the ``machine'' value gotten from
|
|
@b{uname}(2)). If the @b{uname}(2) system call is not available, the
|
|
value of @code{$@{karch@}} defaults to that of @code{$@{arch@}}.
|
|
|
|
The only effect of this option is to set the variable @code{$@{karch@}}.
|
|
|
|
This option would be used as follows:
|
|
|
|
@example
|
|
amd -k `arch -k` ...
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -l Option, -n Option, -k Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-l} @var{log-option}
|
|
@cindex Log filename
|
|
@cindex Setting the log file
|
|
@cindex Using syslog to log errors
|
|
@cindex syslog
|
|
|
|
Selects the form of logging to be made. Several special @dfn{log-options}
|
|
are recognized.
|
|
|
|
@enumerate
|
|
@item
|
|
If @dfn{log-option} is the string @samp{syslog}, @i{Amd} will use the
|
|
@b{syslog}(3) mechanism. If your system supports syslog facilities, then
|
|
the default facility used is @samp{LOG_DAEMON}.
|
|
|
|
@item
|
|
@cindex syslog facility; specifying an alternate
|
|
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
|
|
@dfn{log-options} is the string @samp{syslog:local7} then @b{Amd} will
|
|
log messages via @b{syslog}(3) using the @samp{LOG_LOCAL7} facility. If
|
|
the facility name specified is not recognized, @i{Amd} will default to
|
|
@samp{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 @samp{kern}, @samp{lpr},
|
|
@samp{cron}, etc.
|
|
|
|
@item
|
|
If @dfn{log-option} is the string @samp{/dev/stderr}, @i{Amd} will use
|
|
standard error, which is also the default target for log messages. To
|
|
implement this, @i{Amd} simulates the effect of the @samp{/dev/fd}
|
|
driver.
|
|
@end enumerate
|
|
|
|
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
|
|
@b{close}(2)) its file handle, and re-open the log file. This is done
|
|
using @code{amq -l} @i{log-option}. @xref{Amq -l option}.
|
|
|
|
If the @samp{syslog} option is specified but the system does not support
|
|
syslog or if the named file cannot be opened or created, @i{Amd} will
|
|
use standard error. Error messages generated before @i{Amd} has
|
|
finished parsing the command line are printed on standard error.
|
|
|
|
Since @i{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 @i{Amd} would be started as follows:
|
|
|
|
@example
|
|
amd -l /var/log/amd ...
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -n Option, -o Option, -l Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-n}
|
|
@cindex Hostname normalization
|
|
@cindex Aliased hostnames
|
|
@cindex Resolving aliased hostnames
|
|
@cindex Normalizing hostnames
|
|
|
|
Normalizes the remote hostname before using it. Normalization is done
|
|
by replacing the value of @code{$@{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -o Option, -p Option, -n Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-o} @var{op-sys-ver}
|
|
@cindex Operating System version
|
|
@cindex Setting the Operating System version
|
|
|
|
Override the compiled-in version number of the operating system, with
|
|
@var{op-sys-ver}. Useful when the built-in version is not desired for
|
|
backward compatibility reasons. For example, if the built-in version is
|
|
@samp{2.5.1}, you can override it to @samp{5.5.1}, and use older maps
|
|
that were written with the latter in mind.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -p Option, -r Option, -o Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-p}
|
|
@cindex Process id
|
|
@cindex Displaying the process id
|
|
@cindex process id of Amd daemon
|
|
@cindex pid file, creating with -p option
|
|
@cindex Creating a pid file
|
|
|
|
Causes @i{Amd}'s process id to be printed on standard output.
|
|
This can be redirected to a suitable file for use with kill:
|
|
|
|
@example
|
|
amd -p > /var/run/amd.pid ...
|
|
@end example
|
|
|
|
This option only has an affect if @i{Amd} is running in daemon mode.
|
|
If @i{Amd} is started with the @code{-D nodaemon} debug flag, this
|
|
option is ignored.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -r Option, -t Option, -p Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-r}
|
|
@cindex Restarting existing mounts
|
|
@cindex Picking up existing mounts
|
|
|
|
Tells @i{Amd} to restart existing mounts (@pxref{Inheritance Filesystem}).
|
|
@c @dfn{This option will be made the default in the next release.}
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -t Option, -v Option, -r Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-t} @var{timeout.retransmit}
|
|
@cindex Setting Amd's RPC parameters
|
|
|
|
Specifies the RPC @dfn{timeout} and @dfn{retransmit} intervals used by
|
|
the kernel to communicate to @i{Amd}. These are used to set the
|
|
@samp{timeo} and @samp{retrans} mount options.
|
|
|
|
@i{Amd} relies on the kernel RPC retransmit mechanism to trigger mount
|
|
retries. The value of this parameter changes the retry interval. Too
|
|
long an interval gives poor interactive response, too short an interval
|
|
causes excessive retries.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -v Option, -w Option, -t Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-v}
|
|
@cindex Version information
|
|
@cindex Discovering version information
|
|
@cindex How to discover your version of Amd
|
|
|
|
Print version information on standard error and then exit. The output
|
|
is of the form:
|
|
|
|
@example
|
|
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@@cs.columbia.edu 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, 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).
|
|
@end example
|
|
|
|
The information includes the version number, number of times @i{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 @code{$@{arch@}} and @code{$@{karch@}},
|
|
respectively. The next line lists the full name of the system, the
|
|
variables @code{$@{os@}} and @code{$@{osver@}}, and the vendor's
|
|
name. @xref{Supported Platforms}.
|
|
|
|
Then come a list of map types supported, filesystems internally
|
|
supported by @i{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
|
|
@code{$@{wire@}} or @code{$@{network@}}, and
|
|
@code{$@{netnumber@}} (@pxref{Selectors}) or the @samp{in_network}
|
|
selector function (@pxref{in_network Selector Function}).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -w Option, -x Option, -v Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-w} @var{wait-timeout}
|
|
@cindex Setting the interval between unmount attempts
|
|
@cindex unmount attempt backoff interval
|
|
|
|
Selects the interval in seconds between unmount attempts after the
|
|
initial time-to-live has expired.
|
|
|
|
This defaults to 120 seconds (two minutes).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -x Option, -y Option, -w Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-x} @var{opts}
|
|
@cindex Log message selection
|
|
@cindex Selecting specific log messages
|
|
@cindex How to select log messages
|
|
@cindex syslog priorities
|
|
|
|
Specifies the type and verbosity of log messages. @dfn{opts} is
|
|
a comma separated list selected from the following options:
|
|
|
|
@table @code
|
|
@item fatal
|
|
Fatal errors
|
|
@item error
|
|
Non-fatal errors
|
|
@item user
|
|
Non-fatal user errors
|
|
@item warn
|
|
Recoverable errors
|
|
@item warning
|
|
Alias for @code{warn}
|
|
@item info
|
|
Information messages
|
|
@item map
|
|
Mount map usage
|
|
@item stats
|
|
Additional statistics
|
|
@item all
|
|
All of the above
|
|
@end table
|
|
|
|
Initially a set of default logging flags is enabled. This is as if
|
|
@samp{-x all,nomap,nostats} had been selected. The command line is
|
|
parsed and logging is controlled by the @code{-x} option. The very first
|
|
set of logging flags is saved and can not be subsequently disabled using
|
|
@i{Amq}. This default set of options is useful for general production
|
|
use.@refill
|
|
|
|
The @samp{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 @samp{info} messages then you simply
|
|
need @samp{-x noinfo}. The messages given by @samp{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.@refill
|
|
|
|
@table @code
|
|
@item fatal
|
|
@samp{LOG_CRIT}
|
|
@item error
|
|
@samp{LOG_ERR}
|
|
@item user
|
|
@samp{LOG_WARNING}
|
|
@item warning
|
|
@samp{LOG_WARNING}
|
|
@item info
|
|
@samp{LOG_INFO}
|
|
@item debug
|
|
@samp{LOG_DEBUG}
|
|
@item map
|
|
@samp{LOG_DEBUG}
|
|
@item stats
|
|
@samp{LOG_INFO}
|
|
@end table
|
|
|
|
|
|
The options can be prefixed by the string @samp{no} to indicate
|
|
that this option should be turned off. For example, to obtain all
|
|
but @samp{info} messages the option @samp{-x all,noinfo} would be used.
|
|
|
|
If @i{Amd} was built with debugging enabled the @code{debug} option is
|
|
automatically enabled regardless of the command line options.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -y Option, -C-Option, -x Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-y} @var{NIS-domain}
|
|
@cindex NIS (YP) domain name
|
|
@cindex Overriding the NIS (YP) domain name
|
|
@cindex Setting the NIS (YP) domain name
|
|
@cindex YP domain name
|
|
|
|
Selects an alternate NIS domain. This is useful for debugging and
|
|
cross-domain shared mounting. If this flag is specified, @i{Amd}
|
|
immediately attempts to bind to a server for this domain.
|
|
@c @i{Amd} refers to NIS maps when it starts, unless the @code{-m} option
|
|
@c is specified, and whenever required in a mount map.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -C-Option, -D-Option, -y Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-C} @var{cluster-name}
|
|
@cindex Cluster names
|
|
@cindex Setting the cluster name
|
|
|
|
Specifies the name of the cluster of which the local machine is a member.
|
|
The only effect is to set the variable @code{$@{cluster@}}.
|
|
The @dfn{cluster-name} is will usually obtained by running another command which uses
|
|
a database to map the local hostname into a cluster name.
|
|
@code{$@{cluster@}} can then be used as a selector to restrict mounting of
|
|
replicated data.
|
|
If this option is not given, @code{$@{cluster@}} has the same value as @code{$@{domain@}}.
|
|
This would be used as follows:
|
|
|
|
@example
|
|
amd -C `clustername` ...
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -D-Option, -F Option, -C-Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-D} @var{opts}
|
|
@cindex Debug options
|
|
@cindex Setting debug flags
|
|
|
|
Controls the verbosity and coverage of the debugging trace; @dfn{opts}
|
|
is a comma separated list of debugging options. The @code{-D} option is
|
|
only available if @i{Amd} was compiled with @samp{-DDEBUG}, or
|
|
configured with @code{configure --enable-debug}. The memory debugging
|
|
facilities (@samp{mem}) are only available if @i{Amd} was compiled with
|
|
@samp{-DDEBUG_MEM} (in addition to @samp{-DDEBUG}), or configured with
|
|
@code{configure --enable-debug=mem}.
|
|
|
|
The most common options to use are @samp{-D trace} and @samp{-D test}
|
|
(which turns on all the useful debug options). As usual, every option
|
|
can be prefixed with @samp{no} to turn it off.
|
|
|
|
@table @code
|
|
@item all
|
|
all options
|
|
@item amq
|
|
register for amq
|
|
@item daemon
|
|
enter daemon mode
|
|
@item fork
|
|
fork server
|
|
@item full
|
|
program trace
|
|
@item info
|
|
@cindex debugging hesiod resolver service
|
|
@cindex Hesiod: turning on RES_DEBUG
|
|
info service specific debugging (hesiod, nis, etc.) In the case of
|
|
hesiod maps, turns on the hesiod RES_DEBUG internal debugging option.
|
|
@item mem
|
|
trace memory allocations
|
|
@item mtab
|
|
use local @file{./mtab} file
|
|
@item str
|
|
debug string munging
|
|
@item test
|
|
full debug but no daemon
|
|
@item trace
|
|
protocol trace
|
|
@end table
|
|
|
|
You may also refer to the program source for a more detailed explanation
|
|
of the available options.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -F Option, -H Option, -D-Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-F} @var{conf-file}
|
|
@cindex Amd configuration file; specifying name
|
|
@cindex Amd configuration file
|
|
@cindex amd.conf file
|
|
|
|
Specify an @i{Amd} configuration file @var{conf-file} to use. For a
|
|
description of the format and syntax, @pxref{Amd Configuration File}.
|
|
This configuration file is used to specify any options in lieu of typing
|
|
many of them on the command line. The @file{amd.conf} file includes
|
|
directives for every command line option @i{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -H Option, -O-Option, -F Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-H}
|
|
@cindex Displaying brief help
|
|
@cindex Help; showing from Amd
|
|
|
|
Print a brief help and usage string.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -O-Option, -S Option, -H Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-O} @var{op-sys-name}
|
|
@cindex Operating System name
|
|
@cindex Setting the Operating System name
|
|
|
|
Override the compiled-in name of the operating system, with
|
|
@var{op-sys-name}. Useful when the built-in name is not desired for
|
|
backward compatibility reasons. For example, if the build in name is
|
|
@samp{sunos5}, you can override it to the old name @samp{sos5}, and use
|
|
older maps which were written with the latter in mind.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -S Option, -T-Option, -O-Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-S}
|
|
@cindex plock; using
|
|
@cindex locking executable pages in memory
|
|
|
|
Do @emph{not} lock the running executable pages of @i{Amd} into memory.
|
|
To improve @i{Amd}'s performance, systems that support the @b{plock}(3)
|
|
call lock the @i{Amd} process into memory. This way there is less
|
|
chance the operating system will schedule, page out, and swap the
|
|
@i{Amd} process as needed. This tends to improve @i{Amd}'s performance,
|
|
at the cost of reserving the memory used by the @i{Amd} process (making
|
|
it unavailable for other processes). If this behavior is not desired,
|
|
use the @code{-S} option.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node -T-Option, , -S Option, Amd Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@section @code{-T} @var{tag}
|
|
@cindex Tags for Amd configuration file
|
|
@cindex Configuration file; tags
|
|
|
|
Specify a tag to use with @file{amd.conf}. All map entries tagged with
|
|
@var{tag} will be processed. Map entries that are not tagged are always
|
|
processed. Map entries that are tagged with a tag other than @var{tag}
|
|
will not be processed.
|
|
|
|
@c ################################################################
|
|
@node Filesystem Types, Amd Configuration File, Amd Command Line Options, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Filesystem Types
|
|
@cindex Filesystem types
|
|
@cindex Mount types
|
|
@cindex Types of filesystem
|
|
|
|
To mount a volume, @i{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 @i{Amd}, a @dfn{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 @i{Amd}.@refill
|
|
|
|
The two common filesystem types are UFS and NFS. Four other user
|
|
accessible filesystems (@samp{link}, @samp{program}, @samp{auto} and
|
|
@samp{direct}) are also implemented internally by @i{Amd} and these are
|
|
described below. There are two additional filesystem types internal to
|
|
@i{Amd} which are not directly accessible to the user (@samp{inherit}
|
|
and @samp{error}). Their use is described since they may still have an
|
|
effect visible to the user.@refill
|
|
|
|
@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.
|
|
* 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::
|
|
* Autofs Filesystem:: Sun's kernel-based automounter filesystem.
|
|
* Root Filesystem::
|
|
* Inheritance Filesystem::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Network Filesystem, Network Host Filesystem, Filesystem Types, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Network Filesystem (@samp{nfs})
|
|
@cindex NFS
|
|
@cindex Mounting an NFS filesystem
|
|
@cindex How to mount and NFS filesystem
|
|
@cindex nfs, filesystem type
|
|
@cindex Filesystem type; nfs
|
|
|
|
The @dfn{nfs} (@samp{type:=nfs}) filesystem type provides access to Sun's NFS.
|
|
|
|
@noindent
|
|
The following options must be specified:
|
|
|
|
@table @code
|
|
@cindex rhost, mount option
|
|
@cindex Mount option; rhost
|
|
@item 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 (@code{$@{host@}}) if no other value is
|
|
specified.
|
|
|
|
@cindex rfs, mount option
|
|
@cindex Mount option; rfs
|
|
@item rfs
|
|
the remote filesystem.
|
|
If no value is specified for this option, an internal default of
|
|
@code{$@{path@}} is used.
|
|
@end table
|
|
|
|
NFS mounts require a two stage process. First, the @dfn{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. @i{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, @i{Amd} sends a request
|
|
to the remote server to obtain it. @i{Amd} @dfn{does not} wait for
|
|
a response; it notes that one of the locations needs retrying, but
|
|
continues with any remaining locations. When the file handle becomes
|
|
available, and assuming none of the other locations was successfully
|
|
mounted, @i{Amd} will retry the mount. This mechanism allows several
|
|
NFS filesystems to be mounted in parallel.
|
|
@c @footnote{The mechanism
|
|
@c is general, however NFS is the only filesystem
|
|
@c for which the required hooks have been written.}
|
|
The first one which responds with a valid file handle will be used.
|
|
|
|
@noindent
|
|
An NFS entry might be:
|
|
|
|
@example
|
|
jsp host!=charm;type:=nfs;rhost:=charm;rfs:=/home/charm;sublink:=jsp
|
|
@end example
|
|
|
|
The mount system call and any unmount attempts are always done
|
|
in a new task to avoid the possibility of blocking @i{Amd}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Network Host Filesystem, Network Filesystem Group, Network Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Network Host Filesystem (@samp{host})
|
|
@cindex Network host filesystem
|
|
@cindex Mounting entire export trees
|
|
@cindex How to mount all NFS exported filesystems
|
|
@cindex host, filesystem type
|
|
@cindex Filesystem type; host
|
|
|
|
@c NOTE: the current implementation of the @dfn{host} filesystem type
|
|
@c sometimes fails to maintain a consistent view of the remote mount tree.
|
|
@c This happens when the mount times out and only some of the remote mounts
|
|
@c are successfully unmounted. To prevent this from occurring, use the
|
|
@c @samp{nounmount} mount option.
|
|
|
|
The @dfn{host} (@samp{type:=host}) filesystem allows access to the entire export tree of an
|
|
NFS server. The implementation is layered above the @samp{nfs}
|
|
implementation so keep-alives work in the same way. The only option
|
|
which needs to be specified is @samp{rhost} which is the name of the
|
|
fileserver to mount.
|
|
|
|
The @samp{host} filesystem type works by querying the mount daemon on
|
|
the given fileserver to obtain its export list. @i{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 @i{Amd} attempts to automatically create the mount point, it
|
|
may be on a remote filesystem to which @i{Amd} does not have write
|
|
permission.
|
|
|
|
When an attempt to unmount a @samp{host} filesystem mount fails, @i{Amd}
|
|
remounts any filesystems which had successfully been unmounted. To do
|
|
this @i{Amd} queries the mount daemon again and obtains a fresh copy of
|
|
the export list. @i{Amd} then tries to mount any exported filesystems
|
|
which are not currently mounted.
|
|
|
|
Sun's automounter provides a special @samp{-hosts} map. To achieve the
|
|
same effect with @i{Amd} requires two steps. First a mount map must
|
|
be created as follows:
|
|
|
|
@example
|
|
* type:=host;rhost:=$@{key@};fs:=$@{autodir@}/$@{rhost@}/root
|
|
@end example
|
|
|
|
@noindent
|
|
and then start @i{Amd} with the following command
|
|
|
|
@example
|
|
amd /net net.map
|
|
@end example
|
|
|
|
@noindent
|
|
where @samp{net.map} is the name of map described above. Note that the
|
|
value of @code{$@{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
|
|
|
|
@example
|
|
host2 opts:=ro,nosuid,soft
|
|
@end example
|
|
|
|
@noindent
|
|
would soft mount @samp{host2} read-only.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Network Filesystem Group, Unix Filesystem, Network Host Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Network Filesystem Group (@samp{nfsx})
|
|
@cindex Network filesystem group
|
|
@cindex Atomic NFS mounts
|
|
@cindex Mounting an atomic group of NFS filesystems
|
|
@cindex How to mount an atomic group of NFS filesystems
|
|
@cindex nfsx, filesystem type
|
|
@cindex Filesystem type; nfsx
|
|
|
|
The @dfn{nfsx} (@samp{type:=nfsx}) filesystem allows a group of filesystems to be mounted
|
|
from a single NFS server. The implementation is layered above the
|
|
@samp{nfs} implementation so keep-alives work in the same way.
|
|
|
|
The options are the same as for the @samp{nfs} filesystem with one
|
|
difference.
|
|
|
|
@noindent
|
|
The following options must be specified:
|
|
|
|
@table @code
|
|
@item 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 (@code{$@{host@}}) if no other value is specified.
|
|
|
|
@item rfs
|
|
as a list of filesystems to mount. The list is in the form of a comma
|
|
separated strings.
|
|
@end table
|
|
|
|
@noindent
|
|
For example:
|
|
|
|
@example
|
|
pub type:=nfsx;rhost:=gould;\
|
|
rfs:=/public,/,graphics,usenet;fs:=$@{autodir@}/$@{rhost@}/root
|
|
@end example
|
|
|
|
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 @emph{not} used as a filesystem name.
|
|
A parallel operation is used to determine the local mount points to
|
|
ensure a consistent layout of a tree of mounts.
|
|
|
|
Here, the @emph{three} filesystems, @samp{/public},
|
|
@samp{/public/graphics} and @samp{/public/usenet}, would be mounted.@refill
|
|
|
|
A local mount point, @code{$@{fs@}}, @emph{must} be specified. The
|
|
default local mount point will not work correctly in the general case.
|
|
A suggestion is to use @samp{fs:=$@{autodir@}/$@{rhost@}/root}.@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Unix Filesystem, Caching Filesystem, Network Filesystem Group, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Unix Filesystem (@samp{ufs}, @samp{xfs}, or @samp{efs})
|
|
@cindex Unix filesystem
|
|
@cindex UFS
|
|
@cindex XFS
|
|
@cindex EFS
|
|
@cindex Mounting a UFS filesystem
|
|
@cindex Mounting a local disk
|
|
@cindex How to mount a UFS filesystems
|
|
@cindex How to mount a local disk
|
|
@cindex Disk filesystems
|
|
@cindex ufs, filesystem type
|
|
@cindex Filesystem type; ufs
|
|
@cindex xfs, filesystem type
|
|
@cindex Filesystem type; xfs
|
|
@cindex efs, filesystem type
|
|
@cindex Filesystem type; efs
|
|
|
|
The @dfn{ufs} (@samp{type:=ufs}) filesystem type provides access to the system's standard
|
|
disk filesystem---usually a derivative of the Berkeley Fast Filesystem.
|
|
|
|
@noindent
|
|
The following option must be specified:
|
|
|
|
@table @code
|
|
@cindex dev, mount option
|
|
@cindex Mount option; dev
|
|
@item dev
|
|
the block special device to be mounted.
|
|
@end table
|
|
|
|
A UFS entry might be:
|
|
|
|
@example
|
|
jsp host==charm;type:=ufs;dev:=/dev/sd0d;sublink:=jsp
|
|
@end example
|
|
|
|
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:
|
|
|
|
@example
|
|
ez1 type:=efs;dev:=/dev/xd0a
|
|
ez2 type:=xfs;dev:=/dev/sd3c
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Caching Filesystem, CD-ROM Filesystem, Unix Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Caching Filesystem (@samp{cachefs})
|
|
@cindex Caching Filesystem
|
|
@cindex cachefs, filesystem type
|
|
@cindex Filesystem type; cachefs
|
|
|
|
The @dfn{cachefs} (@samp{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.
|
|
|
|
@noindent
|
|
The following options must be specified:
|
|
|
|
@table @code
|
|
@cindex cachedir, mount option
|
|
@cindex Mount option; cachedir
|
|
@item cachedir
|
|
the directory where the cache is stored.
|
|
@item rfs
|
|
the path name to the ``back file system'' to be cached from.
|
|
@item fs
|
|
the ``front file system'' mount point to the cached files, where @i{Amd}
|
|
will set a symbolic link pointing to.
|
|
@end table
|
|
|
|
A CacheFS entry for, say, the @file{/import} @i{Amd} mount point, might
|
|
be:
|
|
|
|
@example
|
|
copt type:=cachefs;cachedir:=/cache;rfs:=/import/opt;fs:=/n/import/copt
|
|
@end example
|
|
|
|
Access to the pathname @file{/import/copt} will follow a symbolic link
|
|
to @file{/n/import/copt}. The latter is the mount point for a caching
|
|
file system, that caches from @file{/import/opt} to @file{/cache}.
|
|
|
|
@b{Caveats}:
|
|
@enumerate
|
|
@item This file system is currently only implemented for Solaris 2.x!
|
|
@item Before being used for the first time, the cache directory @i{must} be
|
|
initialized with @samp{cfsadmin -c @var{cachedir}}. See the manual page for
|
|
@b{cfsadmin}(1M) for more information.
|
|
@item The ``back file system'' mounted must be a complete file system, not
|
|
a subdirectory thereof; otherwise you will get an error ``Invalid Argument''.
|
|
@item If @i{Amd} aborts abnormally, the state of the cache may be
|
|
inconsistent, requiring running the command @file{fsck -F cachefs
|
|
@var{cachedir}}. Otherwise you will get the error ``No Space Left on Device''.
|
|
@end enumerate
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node CD-ROM Filesystem, Loopback Filesystem, Caching Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section CD-ROM Filesystem (@samp{cdfs})
|
|
@cindex CD-ROM Filesystem
|
|
@cindex cdfs, filesystem type
|
|
@cindex Filesystem type; cdfs
|
|
|
|
The @dfn{cdfs} (@samp{type:=cdfs}) filesystem mounts a CD-ROM with an
|
|
ISO9660 format filesystem on it.
|
|
|
|
@noindent
|
|
The following option must be specified:
|
|
|
|
@table @code
|
|
@cindex dev, mount option
|
|
@cindex Mount option; dev
|
|
@item dev
|
|
the block special device to be mounted.
|
|
@end table
|
|
|
|
Some operating systems will fail to mount read-only CDs unless the
|
|
@samp{ro} option is specified. A cdfs entry might be:
|
|
|
|
@example
|
|
cdfs os==sunos4;type:=cdfs;dev:=/dev/sr0 \
|
|
os==sunos5;addopts:=ro;type:=cdfs;dev:=/dev/dsk/c0t6d0s2
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Loopback Filesystem, Memory/RAM Filesystem, CD-ROM Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Loopback Filesystem (@samp{lofs})
|
|
@cindex Loopback Filesystem
|
|
@cindex lofs, filesystem type
|
|
@cindex Filesystem type; lofs
|
|
|
|
The @dfn{lofs} (@samp{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 @b{chroot}(2)), to provide access to
|
|
directories otherwise inaccessible.
|
|
|
|
@noindent
|
|
The following option must be specified:
|
|
|
|
@table @code
|
|
@cindex rfs, mount option
|
|
@cindex Mount option; rfs
|
|
@item rfs
|
|
the pathname to be mounted on top of @code{$@{fs@}}.
|
|
@end table
|
|
|
|
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.
|
|
|
|
@example
|
|
lofs type:=lofs;rfs:=/home/ezk/myftpdir;fs:=/usr/ftp/pub/ezk
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Memory/RAM Filesystem, Null Filesystem, Loopback Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Memory/RAM Filesystem (@samp{mfs})
|
|
@cindex Memory/RAM Filesystem
|
|
@cindex mfs, filesystem type
|
|
@cindex Filesystem type; mfs
|
|
|
|
The @dfn{mfs} (@samp{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!
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Null Filesystem, Floppy Filesystem, Memory/RAM Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Null Filesystem (@samp{nullfs})
|
|
@cindex Null Filesystem
|
|
@cindex nullfs, filesystem type
|
|
@cindex Filesystem type; nullfs
|
|
|
|
The @dfn{nullfs} (@samp{type:=nullfs}) filesystem is available from 4.4BSD,
|
|
and is very similar to the loopback filesystem, @dfn{lofs}.
|
|
|
|
XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET!
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Floppy Filesystem, Translucent Filesystem, Null Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Floppy Filesystem (@samp{pcfs})
|
|
@cindex Floppy Filesystem
|
|
@cindex pcfs, filesystem type
|
|
@cindex Filesystem type; pcfs
|
|
|
|
The @dfn{pcfs} (@samp{type:=pcfs}) filesystem mounts a floppy previously
|
|
formatted for the MS-DOS format.
|
|
|
|
@noindent
|
|
The following option must be specified:
|
|
|
|
@table @code
|
|
@cindex dev, mount option
|
|
@cindex Mount option; dev
|
|
@item dev
|
|
the block special device to be mounted.
|
|
@end table
|
|
|
|
A pcfs entry might be:
|
|
|
|
@example
|
|
pcfs os==sunos4;type:=pcfs;dev:=/dev/fd0 \
|
|
os==sunos5;type:=pcfs;dev:=/dev/diskette
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Translucent Filesystem, Shared Memory+Swap Filesystem, Floppy Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Translucent Filesystem (@samp{tfs})
|
|
@cindex Translucent Filesystem
|
|
@cindex tfs, filesystem type
|
|
@cindex Filesystem type; tfs
|
|
|
|
The @dfn{tfs} (@samp{type:=tfs}) filesystem is an older version of the
|
|
4.4BSD @dfn{unionfs}.
|
|
|
|
XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET!
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Shared Memory+Swap Filesystem, User ID Mapping Filesystem, Translucent Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Shared Memory+Swap Filesystem (@samp{tmpfs})
|
|
@cindex Shared Memory and Swap Filesystem
|
|
@cindex tmpfs, filesystem type
|
|
@cindex Filesystem type; tmpfs
|
|
|
|
The @dfn{tmpfs} (@samp{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 @file{/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!
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node User ID Mapping Filesystem, Program Filesystem, Shared Memory+Swap Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section User ID Mapping Filesystem (@samp{umapfs})
|
|
@cindex User ID Mapping Filesystem
|
|
@cindex umapfs, filesystem type
|
|
@cindex Filesystem type; umapfs
|
|
|
|
The @dfn{umapfs} (@samp{type:=umapfs}) filesystem maps User IDs of file
|
|
ownership, and is available from 4.4BSD.
|
|
|
|
XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET!
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Program Filesystem, Symbolic Link Filesystem, User ID Mapping Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Program Filesystem (@samp{program})
|
|
@cindex Program filesystem
|
|
@cindex Mount a filesystem under program control
|
|
@cindex program, filesystem type
|
|
@cindex Filesystem type; program
|
|
|
|
The @dfn{program} (@samp{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
|
|
@samp{rvdmount} and @samp{rvdunmount}.
|
|
|
|
@noindent
|
|
The following options must be specified:
|
|
|
|
@table @code
|
|
@cindex mount, mount option
|
|
@cindex Mount option; mount
|
|
@item mount
|
|
the program which will perform the mount.
|
|
|
|
@cindex unmount, mount option
|
|
@cindex Mount option; unmount
|
|
@item unmount
|
|
the program which will perform the unmount.
|
|
@end table
|
|
|
|
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 @i{Amd} splits the string on whitespace to create an array of
|
|
substrings. Single quotes @samp{'} can be used to quote whitespace
|
|
if that is required in an argument. There is no way to escape or change
|
|
the quote character.
|
|
|
|
To run the program @samp{rvdmount} with a host name and filesystem as
|
|
arguments would be specified by
|
|
@samp{fs:=$@{autodir@}$@{path@};mount:="/etc/rvdmount rvdmount fserver
|
|
$@{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, @dfn{including argument zero}. This means
|
|
that the split string must have at least two elements. The program is
|
|
directly executed by @i{Amd}, not via a shell. This means that scripts
|
|
must begin with a @code{#!} interpreter specification.
|
|
|
|
If a filesystem type is to be heavily used, it may be worthwhile adding
|
|
a new filesystem type into @i{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 @i{Amd}. Standard output is a
|
|
duplicate of standard error. The value specified with the @code{-l}
|
|
command line option has no effect on standard error.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Symbolic Link Filesystem, Symbolic Link Filesystem II, Program Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Symbolic Link Filesystem (@samp{link})
|
|
@cindex Symbolic link filesystem
|
|
@cindex Referencing part of the local name space
|
|
@cindex Mounting part of the local name space
|
|
@cindex How to reference part of the local name space
|
|
@cindex link, filesystem type
|
|
@cindex symlink, link filesystem type
|
|
@cindex Filesystem type; link
|
|
|
|
Each filesystem type creates a symbolic link to point from the volume
|
|
name to the physical mount point. The @samp{link} filesystem does the
|
|
same without any other side effects. This allows any part of the
|
|
machines name space to be accessed via @i{Amd}.
|
|
|
|
One common use for the symlink filesystem is @file{/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.
|
|
|
|
@noindent
|
|
The following option must be defined:
|
|
|
|
@table @code
|
|
@item fs
|
|
The value of @var{fs} option specifies the destination of the link, as
|
|
modified by the @var{sublink} option. If @var{sublink} is non-null, it
|
|
is appended to @code{$@{fs@}}@code{/} and the resulting string is used
|
|
as the target.
|
|
@end table
|
|
|
|
The @samp{link} filesystem can be thought of as identical to the
|
|
@samp{ufs} filesystem but without actually mounting anything.
|
|
|
|
An example entry might be:
|
|
|
|
@example
|
|
jsp host==charm;type:=link;fs:=/home/charm;sublink:=jsp
|
|
@end example
|
|
which would return a symbolic link pointing to @file{/home/charm/jsp}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Symbolic Link Filesystem II, NFS-Link Filesystem, Symbolic Link Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Symbolic Link Filesystem II (@samp{linkx})
|
|
@cindex Symbolic link filesystem II
|
|
@cindex Referencing an existing part of the local name space
|
|
@cindex Mounting an existing part of the local name space
|
|
@cindex How to reference an existing part of the local name space
|
|
@cindex linkx, filesystem type
|
|
@cindex symlink, linkx filesystem type
|
|
@cindex Filesystem type; linkx
|
|
|
|
The @dfn{linkx} (@samp{type:=linkx}) filesystem type is identical to @samp{link} with the
|
|
exception that the target of the link must exist. Existence is checked
|
|
with the @b{lstat}(2) system call.
|
|
|
|
The @samp{linkx} filesystem type is particularly useful for wildcard map
|
|
entries. In this case, a list of possible targets can be given and
|
|
@i{Amd} will choose the first one which exists on the local machine.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node NFS-Link Filesystem, Automount Filesystem, Symbolic Link Filesystem II, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section NFS-Link Filesystem (@samp{nfsl})
|
|
@cindex NFS-Link filesystem II
|
|
@cindex Referencing an existing part of the name space if target exists
|
|
@cindex Mounting a remote part of the name space if target is missing
|
|
@cindex Symlink if target exists, NFS otherwise
|
|
@cindex nfsl, filesystem type
|
|
@cindex symlink, nfsl filesystem type
|
|
@cindex Filesystem type; nfsl
|
|
|
|
The @dfn{nfsl} (@samp{type:=nfsl}) filesystem type is a combination of two others:
|
|
@samp{link} and @samp{nfs}. If the local host name is equal to the
|
|
value of @code{$@{rhost@}}, or if the target pathname listed in
|
|
@code{$@{fs@}} exists, @samp{nfsl} will behave exactly as
|
|
@samp{type:=link}, and refer to the target as a symbolic link. If the
|
|
local host name is not equal to the value of @code{$@{rhost@}}, or if
|
|
the target of the link does not exist, @i{Amd} will treat it as
|
|
@samp{type:=nfs}, and will mount a remote pathname for it.
|
|
|
|
The @samp{nfsl} filesystem type is particularly useful as a shorthand
|
|
for the more cumbersome and yet one of the most popular @i{Amd}
|
|
entries. For example, you can simplify all map entries that look like:
|
|
|
|
@example
|
|
zing -fs:=/n/shekel/u/zing \
|
|
host!=shekel;type:=nfs;rhost:=shekel;rfs:=$@{fs@} \
|
|
host==shekel;type:=link
|
|
@end example
|
|
|
|
or
|
|
|
|
@example
|
|
zing -fs:=/n/shekel/u/zing \
|
|
exists($@{fs@});type:=link \
|
|
!exists($@{fs@});type:=nfs;rhost:=shekel;rfs:=$@{fs@}
|
|
@end example
|
|
|
|
into a shorter form
|
|
|
|
@example
|
|
zing type:=nfsl;fs:=/n/shekel/u/zing;rhost:=shekel;rfs:=$@{fs@}
|
|
@end example
|
|
|
|
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 @samp{type:=nfs} and the other for @samp{type:=link})
|
|
necessary to perform transparent mounts of existing or remote mounts.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Automount Filesystem, Direct Automount Filesystem, NFS-Link Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Automount Filesystem (@samp{auto})
|
|
@cindex Automount filesystem
|
|
@cindex Map cache types
|
|
@cindex Setting map cache parameters
|
|
@cindex How to set map cache parameters
|
|
@cindex How to start an indirect automount point
|
|
@cindex auto, filesystem type
|
|
@cindex Filesystem type; auto
|
|
@cindex SIGHUP signal
|
|
@cindex Map cache synchronizing
|
|
@cindex Synchronizing the map cache
|
|
@cindex Map cache options
|
|
@cindex Regular expressions in maps
|
|
|
|
The @dfn{auto} (@samp{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:
|
|
|
|
@table @code
|
|
@cindex cache, mount option
|
|
@cindex Mount option; cache
|
|
@item cache
|
|
specifies whether the data in this mount-map should be
|
|
cached. The default value is @samp{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 @samp{all},
|
|
the entire map is enumerated when the mount point is created.
|
|
|
|
If the cache option specifies @samp{inc}, caching is done incrementally
|
|
as and when data is required.
|
|
Some map types do not support cache mode @samp{all}, in which case @samp{inc}
|
|
is used whenever @samp{all} is requested.
|
|
|
|
Caching can be entirely disabled by using cache mode @samp{none}.
|
|
|
|
If the cache option specifies @samp{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 @samp{inc}, which
|
|
can be selected by specifying @samp{mapdefault}.
|
|
|
|
The cache mode for a mount map can only be selected on the command line.
|
|
Starting @i{Amd} with the command:
|
|
|
|
@example
|
|
amd /homes hesiod.homes -cache:=inc
|
|
@end example
|
|
|
|
will cause @samp{/homes} to be automounted using the @dfn{Hesiod} name
|
|
server with local incremental caching of all successfully resolved names.
|
|
|
|
All cached data is forgotten whenever @i{Amd} receives a @samp{SIGHUP}
|
|
signal and, if cache @samp{all} mode was selected, the cache will be
|
|
reloaded. This can be used to inform @i{Amd} that a map has been
|
|
updated. In addition, whenever a cache lookup fails and @i{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
|
|
@samp{SIGHUP} had been received.
|
|
|
|
An additional option (@samp{sync}) may be specified to force @i{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:
|
|
|
|
@example
|
|
amd /homes hesiod.homes -cache:=inc,sync
|
|
@end example
|
|
|
|
@item fs
|
|
specifies the name of the mount map to use for the new mount point.
|
|
|
|
Arguably this should have been specified with the @code{$@{rfs@}} option but
|
|
we are now stuck with it due to historical accident.
|
|
|
|
@c %If the string @samp{.} is used then the same map is used;
|
|
@c %in addition the lookup prefix is set to the name of the mount point followed
|
|
@c %by a slash @samp{/}.
|
|
@c %This is the same as specifying @samp{fs:=\$@{map@};pref:=\$@{key@}/}.
|
|
@c
|
|
|
|
@item pref
|
|
alters the name that is looked up in the mount map. If
|
|
@code{$@{pref@}}, the @dfn{prefix}, is non-null then it is prepended to
|
|
the name requested by the kernel @dfn{before} the map is searched.
|
|
@end table
|
|
|
|
The server @samp{dylan.doc.ic.ac.uk} has two user disks:
|
|
@samp{/dev/dsk/2s0} and @samp{/dev/dsk/5s0}. These are accessed as
|
|
@samp{/home/dylan/dk2} and @samp{/home/dylan/dk5} respectively. Since
|
|
@samp{/home} is already an automount point, this naming is achieved with
|
|
the following map entries:@refill
|
|
|
|
@example
|
|
dylan type:=auto;fs:=$@{map@};pref:=$@{key@}/
|
|
dylan/dk2 type:=ufs;dev:=/dev/dsk/2s0
|
|
dylan/dk5 type:=ufs;dev:=/dev/dsk/5s0
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Direct Automount Filesystem, Union Filesystem, Automount Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Direct Automount Filesystem (@samp{direct})
|
|
@cindex Direct automount filesystem
|
|
@cindex How to start a direct automount point
|
|
@cindex direct, filesystem type
|
|
@cindex Filesystem type; direct
|
|
|
|
The @dfn{direct} (@samp{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. @xref{Automount Filesystem}, for a
|
|
list of required options.
|
|
|
|
Direct automount points are created by specifying the @samp{direct}
|
|
filesystem type on the command line:
|
|
|
|
@example
|
|
amd ... /usr/man auto.direct -type:=direct
|
|
@end example
|
|
|
|
where @samp{auto.direct} would contain an entry such as:
|
|
|
|
@example
|
|
usr/man -type:=nfs;rfs:=/usr/man \
|
|
rhost:=man-server1 rhost:=man-server2
|
|
@end example
|
|
|
|
In this example, @samp{man-server1} and @samp{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 @samp{/}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Union Filesystem, Error Filesystem, Direct Automount Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Union Filesystem (@samp{union})
|
|
@cindex Union filesystem
|
|
@cindex union, filesystem type
|
|
@cindex Filesystem type; union
|
|
|
|
The @dfn{union} (@samp{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 @file{/tmp} and @file{/var/tmp} were to be merged
|
|
into a new directory called @file{/mtmp}, with files in @file{/var/tmp}
|
|
taking precedence. The following command could be used to achieve this
|
|
effect:
|
|
|
|
@example
|
|
amd ... /mtmp union:/tmp:/var/tmp -type:=union
|
|
@end example
|
|
|
|
Currently, the unioned directories must @emph{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 @i{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
|
|
@i{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 @samp{rm} command, it will be lost forever.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Error Filesystem, Top-level Filesystem, Union Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Error Filesystem (@samp{error})
|
|
@cindex Error filesystem
|
|
@cindex error, filesystem type
|
|
@cindex Filesystem type; error
|
|
|
|
The @dfn{error} (@samp{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Top-level Filesystem, Autofs Filesystem, Error Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Top-level Filesystem (@samp{toplvl})
|
|
@cindex Top level filesystem
|
|
@cindex toplvl, filesystem type
|
|
@cindex Filesystem type; toplvl
|
|
|
|
The @dfn{toplvl} (@samp{type:=toplvl}) filesystems is derived from the @samp{auto} filesystem
|
|
and is used to mount the top-level automount nodes. Requests of this
|
|
type are automatically generated from the command line arguments and can
|
|
also be passed in by using the @code{-M} option of the @dfn{Amq} command.
|
|
That option is insecure, and is unavailable unless am-utils was
|
|
configured with @samp{--with-amq-mount}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Root Filesystem, Inheritance Filesystem, Autofs Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Root Filesystem (@samp{root})
|
|
@cindex Root filesystem
|
|
@cindex root, filesystem type
|
|
@cindex Filesystem type; root
|
|
|
|
The @dfn{root} (@samp{type:=root}) filesystem type acts as an internal
|
|
placeholder onto which @i{Amd} can pin @samp{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Autofs Filesystem, Root Filesystem, Top-level Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Autofs Filesystem (@samp{autofs})
|
|
@cindex Autofs filesystem
|
|
@cindex autofs, filesystem type
|
|
@cindex Filesystem type; autofs
|
|
|
|
The @dfn{autofs} (@samp{type:=autofs}) filesystem uses Sun's kernel-based automounter
|
|
supporting filesystem for @i{Amd}'s mount points. Hence it is another
|
|
type of top level filesystem.
|
|
|
|
The autofs filesystem is not directly accessible from @i{Amd} maps, but
|
|
only from the @file{amd.conf} file (@pxref{mount_type Parameter}).
|
|
|
|
Note that Autofs support is still very early. See the distribution file
|
|
@file{README.autofs} for detail of what works and what does not.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Inheritance Filesystem, , Root Filesystem, Filesystem Types
|
|
@comment node-name, next, previous, up
|
|
@section Inheritance Filesystem (@samp{inherit})
|
|
@cindex Inheritance filesystem
|
|
@cindex Nodes generated on a restart
|
|
@cindex inherit, filesystem type
|
|
@cindex Filesystem type; inherit
|
|
|
|
The @dfn{inheritance} (@samp{type:=inherit}) filesystem is not directly
|
|
accessible. Instead, internal mount nodes of this type are
|
|
automatically generated when @i{Amd} is started with the @code{-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 @i{Amd} then instead of attempting to mount it, @i{Amd}
|
|
simulates the mount and @dfn{inherits} the filesystem. This allows a
|
|
new version of @i{Amd} to be installed on a live system simply by
|
|
killing the old daemon with @samp{SIGTERM} and starting the new one.@refill
|
|
|
|
This filesystem type is not generally visible externally, but it is
|
|
possible that the output from @samp{amq -m} may list @samp{inherit} as
|
|
the filesystem type. This happens when an inherit operation cannot
|
|
be completed for some reason, usually because a fileserver is down.
|
|
|
|
@c ################################################################
|
|
@node Amd Configuration File, Run-time Administration, Filesystem Types, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Amd Configuration File
|
|
@cindex Amd Configuration File
|
|
@cindex amd.conf
|
|
|
|
The @samp{amd.conf} file is the configuration file for @i{Amd}, as part
|
|
of the am-utils suite. This file contains runtime configuration
|
|
information for the @i{Amd} automounter program.
|
|
|
|
@menu
|
|
* File Format::
|
|
* The Global Section::
|
|
* Regular Map Sections::
|
|
* Common Parameters::
|
|
* Global Parameters::
|
|
* Regular Map Parameters::
|
|
* amd.conf Examples::
|
|
@end menu
|
|
|
|
@c ================================================================
|
|
@node File Format, The Global Section, Amd Configuration File, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section File Format
|
|
@cindex amd.conf file format
|
|
|
|
The @samp{amd.conf} file consists of sections and parameters. A section
|
|
begins with the name of the section in square brackets @samp{[]} and
|
|
continues until the next section begins or the end of the file is reached.
|
|
Sections contain parameters of the form @samp{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 @samp{name =
|
|
"some value"}.
|
|
|
|
Any line beginning with a pound sign @samp{#} 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 @samp{yes}/@samp{no}. Case is significant in all
|
|
values. Some items such as cache timeouts are numeric.
|
|
|
|
@c ================================================================
|
|
@node The Global Section, Regular Map Sections, File Format, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section The Global Section
|
|
@cindex amd.conf global section
|
|
|
|
The global section must be specified as @samp{[global]}. Parameters in
|
|
this section either apply to @i{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.
|
|
|
|
@c ================================================================
|
|
@node Regular Map Sections, Common Parameters, The Global Section, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section Regular Map Sections
|
|
@cindex amd.conf regular map sections
|
|
|
|
Parameters in regular (non-global) sections apply to a single map entry.
|
|
For example, if the map section @samp{[/homes]} is defined, then all
|
|
parameters following it will be applied to the @file{/homes}
|
|
@i{Amd}-managed mount point.
|
|
|
|
@c ================================================================
|
|
@node Common Parameters, Global Parameters, Regular Map Sections, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section Common Parameters
|
|
@cindex amd.conf 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
|
|
* browsable_dirs Parameter::
|
|
* map_options Parameter::
|
|
* map_type Parameter::
|
|
* mount_type Parameter::
|
|
* search_path Parameter::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node browsable_dirs Parameter, map_options Parameter, Common Parameters, Common Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{browsable_dirs} Parameter
|
|
@cindex browsable_dirs Parameter
|
|
|
|
(type=string, default=@samp{no}). If @samp{yes}, then @i{Amd}'s top-level
|
|
mount points will be browsable to @b{readdir}(3) calls. This means you
|
|
could run for example @b{ls}(1) and see what keys are available to mount
|
|
in that directory. Not all entries are made visible to @b{readdir}(3):
|
|
the @samp{/defaults} entry, wildcard entries, and those with a @file{/}
|
|
in them are not included. If you specify @samp{full} to this option,
|
|
all but the @samp{/defaults} entry will be visible. Note that if you run
|
|
a command which will attempt to @b{stat}(2) the entries, such as often
|
|
done by @samp{ls -l} or @samp{ls -F}, @i{Amd} will attempt to mount
|
|
@i{every} entry in that map. This is often called a ``mount storm''.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node map_options Parameter, map_type Parameter, browsable_dirs Parameter, Common Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{map_options} Parameter
|
|
@cindex map_options Parameter
|
|
|
|
(type=string, default no options). This option is the same as
|
|
specifying map options on the command line to @i{Amd}, such as
|
|
@samp{cache:=all}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node map_type Parameter, mount_type Parameter, map_options Parameter, Common Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{map_type} Parameter
|
|
@cindex map_type Parameter
|
|
|
|
(type=string, default search all map types). If specified, @i{Amd} will
|
|
initialize the map only for the type given. This is useful to avoid the
|
|
default map search type used by @i{Amd} which takes longer and can have
|
|
undesired side-effects such as initializing NIS even if not used.
|
|
Possible values are
|
|
|
|
@table @samp
|
|
@item file
|
|
plain files
|
|
@item hesiod
|
|
Hesiod name service from MIT
|
|
@item ldap
|
|
Lightweight Directory Access Protocol
|
|
@item ndbm
|
|
(New) dbm style hash files
|
|
@item nis
|
|
Network Information Services (version 2)
|
|
@item nisplus
|
|
Network Information Services Plus (version 3)
|
|
@item passwd
|
|
local password files
|
|
@item union
|
|
union maps
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node mount_type Parameter, search_path Parameter, map_type Parameter, Common Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{mount_type} Parameter
|
|
@cindex mount_type Parameter
|
|
|
|
(type=string, default=@samp{nfs}). All @i{Amd} mount types default to NFS.
|
|
That is, @i{Amd} is an NFS server on the map mount points, for the local
|
|
host it is running on. If @samp{autofs} is specified, @i{Amd} will be
|
|
an autofs server for those mount points.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node search_path Parameter, , mount_type Parameter, Common Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{search_path} Parameter
|
|
@cindex 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.
|
|
|
|
@c ================================================================
|
|
@node Global Parameters, Regular Map Parameters, Common Parameters, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section Global Parameters
|
|
@cindex amd.conf global parameters
|
|
|
|
The following parameters are applicable to the @samp{[global]} section only.
|
|
|
|
@menu
|
|
* arch Parameter::
|
|
* auto_dir Parameter::
|
|
* cache_duration Parameter::
|
|
* cluster Parameter::
|
|
* debug_options Parameter::
|
|
* dismount_interval Parameter::
|
|
* fully_qualified_hosts Parameter::
|
|
* hesiod_base Parameter::
|
|
* karch Parameter::
|
|
* ldap_base Parameter::
|
|
* ldap_cache_maxmem Parameter::
|
|
* ldap_cache_seconds Parameter::
|
|
* ldap_hostports Parameter::
|
|
* local_domain Parameter::
|
|
* log_file Parameter::
|
|
* log_options Parameter::
|
|
* nfs_retransmit_counter Parameter::
|
|
* nfs_retry_interval Parameter::
|
|
* nis_domain Parameter::
|
|
* normalize_hostnames Parameter::
|
|
* os Parameter::
|
|
* osver Parameter::
|
|
* pid_file Parameter::
|
|
* plock Parameter::
|
|
* portmap_program Parameter::
|
|
* print_pid Parameter::
|
|
* print_version Parameter::
|
|
* restart_mounts Parameter::
|
|
* selectors_on_default Parameter::
|
|
* show_statfs_entries Parameter::
|
|
* unmount_on_exit Parameter::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node arch Parameter, auto_dir Parameter, Global Parameters, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{arch} Parameter
|
|
@cindex arch Parameter
|
|
|
|
(type=string, default to compiled in value). Allows you to override the
|
|
value of the @i{arch} @i{Amd} variable.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node auto_dir Parameter, cache_duration Parameter, arch Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{auto_dir} Parameter
|
|
@cindex auto_dir Parameter
|
|
|
|
(type=string, default=@samp{/a}). Same as the @code{-a} option to @i{Amd}.
|
|
This sets the private directory where @i{Amd} will create
|
|
sub-directories for its real mount points.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node cache_duration Parameter, cluster Parameter, auto_dir Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{cache_duration} Parameter
|
|
@cindex cache_duration Parameter
|
|
|
|
(type=numeric, default=300). Same as the @code{-c} option to
|
|
@i{Amd}. Sets the duration in seconds that looked up map entries remain
|
|
in the cache.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node cluster Parameter, debug_options Parameter, cache_duration Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{cluster} Parameter
|
|
@cindex cluster Parameter
|
|
|
|
(type=string, default no cluster). Same as the @code{-C} option to
|
|
@i{Amd}. Specifies the alternate HP-UX cluster to use.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node debug_options Parameter, dismount_interval Parameter, cluster Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{debug_options} Parameter
|
|
@cindex debug_options Parameter
|
|
|
|
(type=string, default no debug options). Same as the @code{-D}
|
|
option to @i{Amd}. Specify any debugging options for @i{Amd}. Works
|
|
only if am-utils was configured for debugging using the
|
|
@code{--enable-debug} option. The @samp{mem} option alone can be turned
|
|
on via @code{--enable-debug=mem}. Otherwise debugging options are
|
|
ignored. Options are comma delimited, and can be preceded by the string
|
|
@samp{no} to negate their meaning. You can get the list of supported
|
|
debugging options by running @code{amd -v}. Possible values are:
|
|
|
|
@table @samp
|
|
@item all
|
|
all options
|
|
@item amq
|
|
register for amq
|
|
@item daemon
|
|
enter daemon mode
|
|
@item fork
|
|
fork server
|
|
@item full
|
|
program trace
|
|
@item mem
|
|
trace memory allocations
|
|
@item mtab
|
|
use local @file{./mtab} file
|
|
@item str
|
|
debug string munging
|
|
@item test
|
|
full debug but no daemon
|
|
@item trace
|
|
protocol trace
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node dismount_interval Parameter, fully_qualified_hosts Parameter, debug_options Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{dismount_interval} Parameter
|
|
@cindex dismount_interval Parameter
|
|
|
|
(type=numeric, default=120). Same as the @code{-w} option to
|
|
@i{Amd}. Specify in seconds, the time between attempts to dismount file
|
|
systems that have exceeded their cached times.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node fully_qualified_hosts Parameter, hesiod_base Parameter, dismount_interval Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{fully_qualified_hosts} Parameter
|
|
@cindex fully_qualified_hosts Parameter
|
|
|
|
(type=string, default=@samp{no}). If @samp{yes}, @i{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 @i{Amd} variable @samp{$@{hostd@}} is used,
|
|
requiring that @samp{$@{domain@}} not be null.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node hesiod_base Parameter, karch Parameter, fully_qualified_hosts Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{hesiod_base} Parameter
|
|
@cindex hesiod_base Parameter
|
|
|
|
(type=string, default=@samp{automount}). Specify the base name for
|
|
hesiod maps.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node karch Parameter, ldap_base Parameter, hesiod_base Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{karch} Parameter
|
|
@cindex karch Parameter
|
|
|
|
(type=string, default to karch of the system). Same as the @code{-k}
|
|
option to @i{Amd}. Allows you to override the kernel-architecture of
|
|
your system. Useful for example on Sun (Sparc) machines, where you can
|
|
build one @i{Amd} binary, and run it on multiple machines, yet you want
|
|
each one to get the correct @i{karch} variable set (for example, sun4c,
|
|
sun4m, sun4u, etc.) Note that if not specified, @i{Amd} will use
|
|
@b{uname}(2) to figure out the kernel architecture of the machine.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node ldap_base Parameter, ldap_cache_maxmem Parameter, karch Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{ldap_base} Parameter
|
|
@cindex ldap_base Parameter
|
|
|
|
(type=string, default not set). Specify the base name for
|
|
LDAP.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node ldap_cache_maxmem Parameter, ldap_cache_seconds Parameter, ldap_base Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{ldap_cache_maxmem} Parameter
|
|
@cindex ldap_cache_maxmem Parameter
|
|
|
|
(type=numeric, default=131072). Specify the maximum memory @i{Amd}
|
|
should use to cache LDAP entries.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node ldap_cache_seconds Parameter, ldap_hostports Parameter, ldap_cache_maxmem Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{ldap_cache_seconds} Parameter
|
|
@cindex ldap_cache_seconds Parameter
|
|
|
|
(type=numeric, default=0). Specify the number of seconds to keep
|
|
entries in the cache.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node ldap_hostports Parameter, local_domain Parameter, ldap_cache_seconds Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{ldap_hostports} Parameter
|
|
@cindex ldap_hostports Parameter
|
|
|
|
(type=string, default not set). Specify
|
|
LDAP-specific values such as country and organization.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node local_domain Parameter, log_file Parameter, ldap_hostports Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{local_domain} Parameter
|
|
@cindex local_domain Parameter
|
|
|
|
(type=string, default no sub-domain). Same as the @code{-d} option
|
|
to @i{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node log_file Parameter, log_options Parameter, local_domain Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{log_file} Parameter
|
|
@cindex log_file Parameter
|
|
|
|
(type=string, default=@samp{stderr}). Same as the @code{-l} option to
|
|
@i{Amd}. Specify a file name to log @i{Amd} events to.
|
|
If the string @samp{/dev/stderr} is specified,
|
|
@i{Amd} will send its events to the standard error file descriptor.
|
|
|
|
If the string @samp{syslog} is given, @i{Amd} will record its events
|
|
with the system logger @b{syslogd}(8). If your system supports syslog
|
|
facilities, then the default facility used is @samp{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 @samp{syslog:local7} then @i{Amd} will log messages via
|
|
@b{syslog}(3) using the @samp{LOG_LOCAL7} facility. If the facility
|
|
name specified is not recognized, @i{Amd} will default to @samp{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
|
|
@samp{kern}, @samp{lpr}, @samp{cron}, etc.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node log_options Parameter, nfs_retransmit_counter Parameter, log_file Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{log_options} Parameter
|
|
@cindex log_options Parameter
|
|
|
|
(type=string, default no logging options). Same as the @code{-x}
|
|
option to @i{Amd}. Specify any logging options for @i{Amd}. Options
|
|
are comma delimited, and can be preceded by the string @samp{no} to
|
|
negate their meaning. The @samp{debug} logging option is only available
|
|
if am-utils was configured with @code{--enable-debug}. You can get the
|
|
list of supported debugging options by running @code{amd -v}. Possible
|
|
values are:
|
|
|
|
@table @samp
|
|
@item all
|
|
all messages
|
|
@item debug
|
|
debug messages
|
|
@item error
|
|
non-fatal system errors
|
|
@item fatal
|
|
fatal errors
|
|
@item info
|
|
information
|
|
@item map
|
|
map errors
|
|
@item stats
|
|
additional statistical information
|
|
@item user
|
|
non-fatal user errors
|
|
@item warn
|
|
warnings
|
|
@item warning
|
|
warnings
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node nfs_retransmit_counter Parameter, nfs_retry_interval Parameter, log_options Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{nfs_retransmit_counter} Parameter
|
|
@cindex nfs_retransmit_counter Parameter
|
|
|
|
(type=numeric, default=110). Same as the @i{counter} part of the
|
|
@code{-t} @i{interval.counter} option to @i{Amd}. Specifies the
|
|
retransmit counter's value in @emph{tenths} of seconds.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node nfs_retry_interval Parameter, nis_domain Parameter, nfs_retransmit_counter Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{nfs_retry_interval} Parameter
|
|
@cindex nfs_retry_interval Parameter
|
|
|
|
(type=numeric, default=8). Same as the @i{interval} part of the
|
|
@code{-t} @i{interval.counter} option to @i{Amd}. Specifies the
|
|
interval in @emph{tenths} of seconds, between NFS/RPC/UDP retries.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node nis_domain Parameter, normalize_hostnames Parameter, nfs_retry_interval Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{nis_domain} Parameter
|
|
@cindex nis_domain Parameter
|
|
|
|
(type=string, default to local NIS domain name). Same as the
|
|
@code{-y} option to @i{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node normalize_hostnames Parameter, os Parameter, nis_domain Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{normalize_hostnames} Parameter
|
|
@cindex normalize_hostnames Parameter
|
|
|
|
(type=boolean, default=@samp{no}). Same as the @code{-n} option to @i{Amd}.
|
|
If @samp{yes}, then the name referred to by @code{$@{rhost@}} is normalized
|
|
relative to the host database before being used. The effect is to
|
|
translate aliases into ``official'' names.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node os Parameter, osver Parameter, normalize_hostnames Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{os} Parameter
|
|
@cindex os Parameter
|
|
|
|
(type=string, default to compiled in value). Same as the @code{-O}
|
|
option to @i{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
|
|
@samp{sunos5}, you can override it to @samp{sos5}, and use older maps
|
|
which were written with the latter in mind.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node osver Parameter, pid_file Parameter, os Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{osver} Parameter
|
|
@cindex osver Parameter
|
|
|
|
(type=string, default to compiled in value). Same as the @code{-o}
|
|
option to @i{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 @samp{2.5.1}, you can override it to @samp{5.5.1}, and use
|
|
older maps that were written with the latter in mind.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node pid_file Parameter, plock Parameter, osver Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{pid_file} Parameter
|
|
@cindex pid_file Parameter
|
|
|
|
(type=string, default=@samp{/dev/stdout}). Specify a file to store the process
|
|
ID of the running daemon into. If not specified, @i{Amd} will print its
|
|
process id onto the standard output. Useful for killing @i{Amd} after
|
|
it had run. Note that the PID of a running @i{Amd} can also be
|
|
retrieved via @i{Amq} (@pxref{Amq -p option}).
|
|
|
|
This file is used only if the @samp{print_pid} option is on
|
|
(@pxref{print_pid Parameter}).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node plock Parameter, portmap_program Parameter, pid_file Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{plock} Parameter
|
|
@cindex plock Parameter
|
|
|
|
(type=boolean, default=@samp{yes}). Same as the @code{-S} option to @i{Amd}.
|
|
If @samp{yes}, lock the running executable pages of @i{Amd} into memory.
|
|
To improve @i{Amd}'s performance, systems that support the @b{plock}(3)
|
|
call can lock the @i{Amd} process into memory. This way there is less
|
|
chance the operating system will schedule, page out, and swap the
|
|
@i{Amd} process as needed. This improves @i{Amd}'s performance, at the
|
|
cost of reserving the memory used by the @i{Amd} process (making it
|
|
unavailable for other processes).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node portmap_program Parameter, print_pid Parameter, plock Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{portmap_program} Parameter
|
|
@cindex 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 @i{Amd} processes. For example, you can run another
|
|
@i{Amd} in ``test'' mode, without affecting the primary @i{Amd} process
|
|
in any way. For safety reasons, the alternate program numbers that can
|
|
be specified must be in the range 300019-300029, inclusive. @i{Amq} has
|
|
an option @code{-P} which can be used to specify an alternate program
|
|
number of an @i{Amd} to contact. In this way, amq can fully control any
|
|
number of @i{Amd} processes running on the same host.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node print_pid Parameter, print_version Parameter, portmap_program Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{print_pid} Parameter
|
|
@cindex print_pid Parameter
|
|
|
|
(type=boolean, default=@samp{no}). Same as the @code{-p} option to @i{Amd}.
|
|
If @samp{yes}, @i{Amd} will print its process ID upon starting.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node print_version Parameter, restart_mounts Parameter, print_pid Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{print_version} Parameter
|
|
@cindex print_version Parameter
|
|
|
|
(type=boolean, default=@samp{no}). Same as the @code{-v} option to @i{Amd},
|
|
but the version prints and @i{Amd} continues to run. If @samp{yes}, @i{Amd}
|
|
will print its version information string, which includes some
|
|
configuration and compilation values.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node restart_mounts Parameter, selectors_on_default Parameter, print_version Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{restart_mounts} Parameter
|
|
@cindex restart_mounts Parameter
|
|
|
|
(type=boolean, default=@samp{no}). Same as the @code{-r} option to @i{Amd}.
|
|
If @samp{yes} @i{Amd} will scan the mount table to determine which file
|
|
systems are currently mounted. Whenever one of these would have been
|
|
auto-mounted, @i{Amd} inherits it.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node selectors_on_default Parameter, show_statfs_entries Parameter, restart_mounts Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{selectors_on_default} Parameter
|
|
@cindex selectors_on_default Parameter
|
|
|
|
(type=boolean, default=@samp{no}). If @samp{yes}, then the @samp{/defaults} entry of
|
|
maps will be looked for and any selectors processed 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:
|
|
|
|
@example
|
|
/defaults \
|
|
wire==slip-net;opts:=intr,rsize=1024,wsize=1024 \
|
|
wire!=slip-net;opts:=intr,rsize=8192,wsize=8192
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node show_statfs_entries Parameter, unmount_on_exit Parameter , selectors_on_default Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{show_statfs_entries} Parameter
|
|
@cindex show_statfs_entries Parameter
|
|
|
|
(type=boolean), default=@samp{no}). If @samp{yes}, then all maps which are
|
|
browsable will also show the number of entries (keys) they have when
|
|
@b{df}(1) runs. (This is accomplished by returning non-zero values to
|
|
the @b{statfs}(2) system call).
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node unmount_on_exit Parameter, , show_statfs_entries Parameter, Global Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection @t{unmount_on_exit} Parameter
|
|
@cindex unmount_on_exit Parameter
|
|
|
|
(type=boolean), default=@samp{no}). If @samp{yes}, then @i{Amd} will attempt
|
|
to unmount all file systems which it knows about. Normally it leaves
|
|
all (esp. NFS) mounted file systems intact. Note that @i{Amd} does not
|
|
know about file systems mounted before it starts up, unless the
|
|
@samp{restart_mounts} option is used (@pxref{restart_mounts Parameter}).
|
|
|
|
@c ================================================================
|
|
@node Regular Map Parameters, amd.conf Examples, Global Parameters, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section Regular Map Parameters
|
|
@cindex amd.conf regular map parameters
|
|
|
|
The following parameters are applicable only to regular map sections.
|
|
|
|
@menu
|
|
* map_name Parameter::
|
|
* tag Parameter::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node map_name Parameter, tag Parameter, Regular Map Parameters, Regular Map Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection map_name Parameter
|
|
@cindex map_name Parameter
|
|
|
|
(type=string, must be specified). Name of the map where the keys are
|
|
located.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node tag Parameter, , map_name Parameter, Regular Map Parameters
|
|
@comment node-name, next, previous, up
|
|
@subsection tag Parameter
|
|
@cindex 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 @i{Amd}. If it is specified, then @i{Amd} will process the map
|
|
if the @code{-T} option was given to @i{Amd}, and the value given to that
|
|
command-line option matches that in the map section.
|
|
|
|
@c ================================================================
|
|
@node amd.conf Examples, , Regular Map Parameters, Amd Configuration File
|
|
@comment node-name, next, previous, up
|
|
@section amd.conf Examples
|
|
@cindex amd.conf examples
|
|
|
|
The following is the actual @code{amd.conf} file I use at the
|
|
Computer Science Department of Columbia University.
|
|
|
|
@example
|
|
# 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 = all
|
|
plock = no
|
|
selectors_on_default = 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
|
|
@end example
|
|
|
|
@c ################################################################
|
|
@node Run-time Administration, FSinfo, Amd Configuration File, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Run-time Administration
|
|
@cindex Run-time administration
|
|
@cindex Amq command
|
|
|
|
@menu
|
|
* Starting Amd::
|
|
* Stopping Amd::
|
|
* Restarting Amd::
|
|
* Controlling Amd::
|
|
@end menu
|
|
|
|
@node Starting Amd, Stopping Amd, Run-time Administration, Run-time Administration
|
|
@comment node-name, next, previous, up
|
|
@section Starting @i{Amd}
|
|
@cindex Starting Amd
|
|
@cindex Additions to /etc/rc.local
|
|
@cindex /etc/rc.local additions
|
|
@cindex ctl-amd
|
|
|
|
@i{Amd} is best started from @samp{/etc/rc.local} on BSD systems, or
|
|
from the appropriate start-level script in @samp{/etc/init.d} on System V
|
|
systems.
|
|
|
|
@example
|
|
if [ -f /usr/local/sbin/ctl-amd ]; then
|
|
/usr/local/sbin/ctl-amd start; (echo -n ' amd') > /dev/console
|
|
fi
|
|
@end example
|
|
|
|
@noindent
|
|
The shell script, @samp{ctl-amd} is used to start, stop, or restart
|
|
@i{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
|
|
@file{amd.conf} file. @xref{Amd Configuration File}.
|
|
|
|
If you do not wish to use an @i{Amd} configuration file, you may start
|
|
@i{Amd} manually. For example, getting the map entries via NIS:
|
|
|
|
@example
|
|
amd -r -l /var/log/amd `ypcat -k auto.master`
|
|
@end example
|
|
|
|
@node Stopping Amd, Restarting Amd, Starting Amd, Run-time Administration
|
|
@comment node-name, next, previous, up
|
|
@section Stopping @i{Amd}
|
|
@cindex Stopping Amd
|
|
@cindex SIGTERM signal
|
|
@cindex SIGINT signal
|
|
|
|
@i{Amd} stops in response to two signals.
|
|
|
|
@table @samp
|
|
@item SIGTERM
|
|
causes the top-level automount points to be unmounted and then @i{Amd}
|
|
to exit. Any automounted filesystems are left mounted. They can be
|
|
recovered by restarting @i{Amd} with the @code{-r} command line option.@refill
|
|
|
|
@item SIGINT
|
|
causes @i{Amd} to attempt to unmount any filesystems which it has
|
|
automounted, in addition to the actions of @samp{SIGTERM}. This signal
|
|
is primarily used for debugging.@refill
|
|
@end table
|
|
|
|
Actions taken for other signals are undefined.
|
|
|
|
The easiest and safest way to stop @i{Amd}, without having to find its
|
|
process ID by hand, is to use the @file{ctl-amd} script, as with:
|
|
|
|
@example
|
|
ctl-amd stop
|
|
@end example
|
|
|
|
@node Restarting Amd, Controlling Amd, Stopping Amd, Run-time Administration
|
|
@comment node-name, next, previous, up
|
|
@section Restarting @i{Amd}
|
|
@cindex Restarting Amd
|
|
@cindex Killing and starting Amd
|
|
|
|
Before @i{Amd} can be started, it is vital to ensure that no other
|
|
@i{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 @i{Amd}, the automounter does @emph{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 @i{Amd} processes attempt to manage the same mount point, it
|
|
usually will result in a system lockup.
|
|
|
|
The easiest and safest way to restart @i{Amd}, without having to find
|
|
its process ID by hand, sending it the @samp{SIGTERM} signal, waiting for @i{Amd}
|
|
to die cleanly, and verifying so, is to use the @file{ctl-amd} script,
|
|
as with:
|
|
|
|
@example
|
|
ctl-amd restart
|
|
@end example
|
|
|
|
The script will locate the process ID of @i{Amd}, kill it, and wait for
|
|
it to die cleanly before starting a new instance of the automounter.
|
|
@file{ctl-amd} will wait for a total of 30 seconds for @i{Amd} to die,
|
|
and will check once every 5 seconds if it had.
|
|
|
|
@node Controlling Amd, , Restarting Amd, Run-time Administration
|
|
@comment node-name, next, previous, up
|
|
@section Controlling @i{Amd}
|
|
@cindex Controlling Amd
|
|
@cindex Discovering what is going on at run-time
|
|
@cindex Listing currently mounted filesystems
|
|
|
|
It is sometimes desirable or necessary to exercise external control
|
|
over some of @i{Amd}'s internal state. To support this requirement,
|
|
@i{Amd} implements an RPC interface which is used by the @dfn{Amq} program.
|
|
A variety of information is available.
|
|
|
|
@i{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 -l option:: Controlling the log file.
|
|
* Amq -m option:: Obtaining mount statistics.
|
|
* Amq -M-option:: Mounting a volume.
|
|
* Amq -p option:: Getting Amd's process ID.
|
|
* Amq -P-option:: Contacting alternate Amd processes.
|
|
* 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.
|
|
* Other Amq options:: Three other special options.
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq default, Amq -f option, Controlling Amd, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} default information
|
|
|
|
With no arguments, @dfn{Amq} obtains a brief list of all existing
|
|
mounts created by @i{Amd}. This is different from the list displayed by
|
|
@b{df}(1) since the latter only includes system mount points.
|
|
|
|
@noindent
|
|
The output from this option includes the following information:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
the automount point,
|
|
@item
|
|
the filesystem type,
|
|
@item
|
|
the mount map or mount information,
|
|
@item
|
|
the internal, or system mount point.
|
|
@end itemize
|
|
|
|
@noindent
|
|
For example:
|
|
|
|
@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
|
|
@end example
|
|
|
|
@noindent
|
|
If an argument is given then statistics for that volume name will
|
|
be output. For example:
|
|
|
|
@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
|
|
@end example
|
|
|
|
@table @code
|
|
@item What
|
|
the volume name.
|
|
|
|
@item Uid
|
|
ignored.
|
|
|
|
@item Getattr
|
|
the count of NFS @dfn{getattr} requests on this node. This should only be
|
|
non-zero for directory nodes.
|
|
|
|
@item Lookup
|
|
the count of NFS @dfn{lookup} requests on this node. This should only be
|
|
non-zero for directory nodes.
|
|
|
|
@item RdDir
|
|
the count of NFS @dfn{readdir} requests on this node. This should only
|
|
be non-zero for directory nodes.
|
|
|
|
@item RdLnk
|
|
the count of NFS @dfn{readlink} requests on this node. This should be
|
|
zero for directory nodes.
|
|
|
|
@item Statfs
|
|
the count of NFS @dfn{statfs} requests on this node. This should only
|
|
be non-zero for top-level automount points.
|
|
|
|
@item Mounted@@
|
|
the date and time the volume name was first referenced.
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -f option, Amq -h option, Amq default, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-f} option
|
|
@cindex Flushing the map cache
|
|
@cindex Map cache, flushing
|
|
|
|
The @code{-f} option causes @i{Amd} to flush the internal mount map cache.
|
|
This is useful for example in Hesiod maps since @i{Amd} will not
|
|
automatically notice when they have been updated. The map cache can
|
|
also be synchronized with the map source by using the @samp{sync} option
|
|
(@pxref{Automount Filesystem}).@refill
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -l option, Amq -m option, Amq -h option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-l} option
|
|
@cindex Resetting the Amd log file
|
|
@cindex Setting the Amd log file via Amq
|
|
@cindex Log file, resetting
|
|
|
|
Tell @i{Amd} to use @i{log_file} as the log file name. For security
|
|
reasons, this @emph{must} be the same log file which @i{Amd} used when
|
|
started. This option is therefore only useful to refresh @i{Amd}'s open
|
|
file handle on the log file, so that it can be rotated and compressed
|
|
via daily cron jobs.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -h option, Amq -l option, Amq -f option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-h} option
|
|
@cindex Querying an alternate host
|
|
|
|
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 @i{Amd} will
|
|
be running. To query @i{Amd} on another host the @code{-h} option should
|
|
be used.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -m option, Amq -M-option, Amq -l option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-m} option
|
|
|
|
The @code{-m} option displays similar information about mounted
|
|
filesystems, rather than automount points. The output includes the
|
|
following information:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
the mount information,
|
|
@item
|
|
the mount point,
|
|
@item
|
|
the filesystem type,
|
|
@item
|
|
the number of references to this filesystem,
|
|
@item
|
|
the server hostname,
|
|
@item
|
|
the state of the file server,
|
|
@item
|
|
any error which has occurred.
|
|
@end itemize
|
|
|
|
For example:
|
|
|
|
@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
|
|
@end example
|
|
|
|
When the reference count is zero the filesystem is not mounted but
|
|
the mount point and server information is still being maintained
|
|
by @i{Amd}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -M-option, Amq -p option, Amq -m option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-M} option
|
|
|
|
The @code{-M} option passes a new map entry to @i{Amd} and waits for it to
|
|
be evaluated, possibly causing a mount. For example, the following
|
|
command would cause @samp{/home/toytown} on host @samp{toytown} to be
|
|
mounted locally on @samp{/mnt/toytown}.
|
|
|
|
@example
|
|
amq -M '/mnt/toytown type:=nfs;rfs:=/home/toytown;rhost:=toytown;fs:=$@{key@}'
|
|
@end example
|
|
|
|
@i{Amd} applies some simple security checks before allowing this
|
|
operation. The check tests whether the incoming request is from a
|
|
privileged UDP port on the local machine. ``Permission denied'' is
|
|
returned if the check fails.
|
|
|
|
This option is very insecure as it is vulnerable to attacks such as IP
|
|
Spoofing. In other words, it is relatively easy for an attacker who
|
|
really wants to, to make your @i{Amd} process mount any filesystem from
|
|
the Internet! Therefore, the @emph{complete} code which supports the
|
|
@code{-M} option in @i{Amd} and @i{Amq} is turned off by default. To turn
|
|
it on, you have to reconfigure am-utils with @code{configure
|
|
--enable-amq-mount}. Think twice before doing so, and use this option
|
|
only if you absolutely need to.
|
|
|
|
A future release of @i{Amd} will include code to allow the @b{mount}(8)
|
|
command to mount automount points:
|
|
|
|
@example
|
|
mount -t amd /vol hesiod.vol
|
|
@end example
|
|
|
|
This will then allow @i{Amd} to be controlled from the standard system
|
|
filesystem mount list.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -p option, Amq -P-option, Amq -M-option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-p} option
|
|
@cindex Process ID; Amd
|
|
@cindex Amd's process ID
|
|
@cindex Amd's PID
|
|
@cindex PID; Amd
|
|
|
|
Return the process ID of the remote or locally running @i{Amd}. Useful
|
|
when you need to send a signal to the local @i{Amd} process, and would
|
|
rather not have to search through the process table. This option is
|
|
used in the @file{ctl-amd} script.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -P-option, Amq -s option, Amq -p option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-P} option
|
|
@cindex Multiple Amd processes
|
|
@cindex Running multiple Amd
|
|
@cindex Debugging a new Amd configuration
|
|
@cindex RPC Program numbers; Amd
|
|
|
|
Contact an alternate running @i{Amd} that had registered itself on a
|
|
different RPC @var{program_number} and apply all other operations to
|
|
that instance of the automounter. This is useful when you run multiple
|
|
copies of @i{Amd}, and need to manage each one separately. If not
|
|
specified, @i{Amq} will use the default program number for @i{Amd}, 300019.
|
|
For security reasons, the only alternate program numbers @i{Amd} can use
|
|
range from 300019 to 300029, inclusive.
|
|
|
|
For example, to kill an alternate running @i{Amd}:
|
|
|
|
@example
|
|
kill `amq -p -P 300020`
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -s option, Amq -T option, Amq -P-option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-s} option
|
|
@cindex Global statistics
|
|
@cindex Statistics
|
|
|
|
The @code{-s} option displays global statistics. If any other options are specified
|
|
or any filesystems named then this option is ignored. For example:
|
|
|
|
@example
|
|
requests stale mount mount unmount
|
|
deferred fhandles ok failed failed
|
|
1054 1 487 290 7017
|
|
@end example
|
|
|
|
@table @samp
|
|
@item Deferred requests
|
|
are those for which an immediate reply could not be constructed. For
|
|
example, this would happen if a background mount was required.
|
|
|
|
@item Stale filehandles
|
|
counts the number of times the kernel passes a stale filehandle to @i{Amd}.
|
|
Large numbers indicate problems.
|
|
|
|
@item Mount ok
|
|
counts the number of automounts which were successful.
|
|
|
|
@item Mount failed
|
|
counts the number of automounts which failed.
|
|
|
|
@item 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.
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -T option, Amq -U-option, Amq -s option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-T} option
|
|
@cindex Forcing Amq to use a TCP transport
|
|
@cindex TCP; using with Amq
|
|
|
|
The @code{-T} option causes the @i{Amq} to contact @i{Amd} using the TCP
|
|
transport only (connection oriented). Normally, @i{Amq} will use TCP
|
|
first, and if that failed, will try UDP.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -U-option, Amq -u option, Amq -T option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-U} option
|
|
@cindex Forcing Amq to use a UDP transport
|
|
@cindex UDP; using with Amq
|
|
|
|
The @code{-U} option causes the @i{Amq} to contact @i{Amd} using the UDP
|
|
transport only (connectionless). Normally, @i{Amq} will use TCP first,
|
|
and if that failed, will try UDP.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -u option, Amq -v option, Amq -U-option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-u} option
|
|
@cindex Forcing filesystem to time out
|
|
@cindex Unmounting a filesystem
|
|
|
|
The @code{-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. It is not possible to
|
|
unmount a filesystem which has been mounted with the @samp{nounmount}
|
|
flag.
|
|
|
|
@c The @code{-H} option informs @i{Amd} that the specified mount point has hung -
|
|
@c as if its keepalive timer had expired.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Amq -v option, Other Amq options, Amq -u option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection @i{Amq} @code{-v} option
|
|
@cindex Version information at run-time
|
|
|
|
The @code{-v} option displays the version of @i{Amd} in a similar way to
|
|
@i{Amd}'s @code{-v} option.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Other Amq options, , Amq -v option, Controlling Amd
|
|
@comment node-name, next, previous, up
|
|
@subsection Other @i{Amq} options
|
|
@cindex Logging options via Amq
|
|
@cindex Debugging options via Amq
|
|
|
|
Two other operations are implemented. These modify the state of @i{Amd}
|
|
as a whole, rather than any particular filesystem. The @code{-x} and
|
|
@code{-D} options have exactly the same effect as @i{Amd}'s corresponding
|
|
command line options.
|
|
|
|
When @i{Amd} receives a @code{-x} flag it limits the log options being
|
|
modified to those which were not enabled at startup. This prevents a
|
|
user turning @emph{off} any logging option which was specified at
|
|
startup, though any which have been turned on since then can still be
|
|
turned off. The @code{-D} option has a similar behavior.
|
|
|
|
@c ################################################################
|
|
@node FSinfo, Hlfsd, Run-time Administration, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter FSinfo
|
|
@cindex FSinfo
|
|
@cindex Filesystem info package
|
|
|
|
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::
|
|
@end menu
|
|
|
|
@node FSinfo Overview, Using FSinfo, FSinfo, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} overview
|
|
@cindex FSinfo overview
|
|
|
|
@i{FSinfo} is a filesystem management tool. It has been designed to
|
|
work with @i{Amd} to help system administrators keep track of the ever
|
|
increasing filesystem namespace under their control.
|
|
|
|
The purpose of @i{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
|
|
@i{Amd} maps which can be used amongst the set of hosts described in the
|
|
input data.
|
|
|
|
@i{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. @i{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 @file{/etc/fstab},
|
|
@file{/etc/exports}, @i{Amd} mount maps and
|
|
@file{/etc/bootparams}.@refill
|
|
|
|
@node Using FSinfo, FSinfo Grammar, FSinfo Overview, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section Using @i{FSinfo}
|
|
@cindex Using FSinfo
|
|
|
|
The basic strategy when using @i{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:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
Hostname
|
|
@item
|
|
List of all filesystems and, optionally, their mount points.
|
|
@item
|
|
Names of volumes stored on each filesystem.
|
|
@item
|
|
NFS export information for each volume.
|
|
@item
|
|
The list of static filesystem mounts.
|
|
@end itemize
|
|
|
|
The following information can also be entered into the same
|
|
configuration files so that all data can be kept in one place.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
List of network interfaces
|
|
@item
|
|
IP address of each interface
|
|
@item
|
|
Hardware address of each interface
|
|
@item
|
|
Dumpset to which each filesystem belongs
|
|
@item
|
|
and more @dots{}
|
|
@end itemize
|
|
|
|
To generate @i{Amd} mount maps, the automount tree must also be defined
|
|
(@pxref{FSinfo automount definitions}). This will have been designed at
|
|
the time the volume names were allocated. Some volume names will not be
|
|
automounted, so @i{FSinfo} needs an explicit list of which volumes
|
|
should be automounted.@refill
|
|
|
|
Hostnames are required at several places in the @i{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 @i{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.
|
|
|
|
@node FSinfo Grammar, FSinfo host definitions, Using FSinfo, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} grammar
|
|
@cindex FSinfo grammar
|
|
@cindex Grammar, FSinfo
|
|
|
|
@i{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, @i{list(}@t{xxx}@i{)}, indicates a list of zero or more
|
|
@t{xxx}'s. The notation, @i{opt(}@t{xxx}@i{)}, indicates zero or one
|
|
@t{xxx}. Items in double quotes, @i{eg} @t{"host"}, represent input
|
|
tokens. Items in angle brackets, @i{eg} @var{<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 ``@t{\}'' 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.
|
|
|
|
@example
|
|
fsinfo : @i{list(}fsinfo_attr@i{)} ;
|
|
|
|
fsinfo_attr : host | automount ;
|
|
@end example
|
|
|
|
@menu
|
|
* FSinfo host definitions::
|
|
* FSinfo automount definitions::
|
|
@end menu
|
|
|
|
@node FSinfo host definitions, FSinfo host attributes, FSinfo Grammar, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} host definitions
|
|
@cindex FSinfo host definitions
|
|
@cindex Defining a host, FSinfo
|
|
|
|
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.
|
|
|
|
@example
|
|
host : "host" host_data @i{list(}filesystem@i{@i{)}} @i{list(}mount@i{@i{)}} ;
|
|
@end example
|
|
|
|
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 @dfn{host data}.
|
|
|
|
All the disks the machine has should then be described in the @dfn{list
|
|
of filesystems}. When describing disks, you can specify what
|
|
@dfn{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 @dfn{list of mounts} specifies all the filesystems that should be
|
|
statically mounted on the machine.
|
|
|
|
@menu
|
|
* FSinfo host attributes::
|
|
* FSinfo filesystems::
|
|
* FSinfo static mounts::
|
|
@end menu
|
|
|
|
@node FSinfo host attributes, FSinfo filesystems, FSinfo host definitions , FSinfo host definitions
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} host attributes
|
|
@cindex FSinfo host attributes
|
|
@cindex Defining host attributes, FSinfo
|
|
|
|
The host data, @dfn{host_data}, always includes the @dfn{hostname}. In
|
|
addition, several other host attributes can be given.
|
|
|
|
@example
|
|
host_data : @var{<hostname>}
|
|
| "@{" @i{list(}host_attrs@i{)} "@}" @var{<hostname>}
|
|
;
|
|
|
|
host_attrs : host_attr "=" @var{<string>}
|
|
| netif
|
|
;
|
|
|
|
host_attr : "config"
|
|
| "arch"
|
|
| "os"
|
|
| "cluster"
|
|
;
|
|
@end example
|
|
|
|
The @dfn{hostname} is, typically, the fully qualified hostname of the
|
|
machine.
|
|
|
|
Examples:
|
|
|
|
@example
|
|
host dylan.doc.ic.ac.uk
|
|
|
|
host @{
|
|
os = hpux
|
|
arch = hp300
|
|
@} dougal.doc.ic.ac.uk
|
|
@end example
|
|
|
|
The options that can be given as host attributes are shown below.
|
|
|
|
@menu
|
|
* netif Option: FSinfo host netif:
|
|
* config Option: FSinfo host config:
|
|
* arch Option: FSinfo host arch:
|
|
* os Option: FSinfo host os:
|
|
* cluster Option: FSinfo host cluster:
|
|
@end menu
|
|
|
|
@node FSinfo host netif, FSinfo host config, , FSinfo host attributes
|
|
@comment node-name, next, previous, up
|
|
@subsection netif Option
|
|
|
|
This defines the set of network interfaces configured on the machine.
|
|
The interface attributes collected by @i{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.
|
|
|
|
@example
|
|
netif : "netif" @var{<string>} "@{" @i{list(}netif_attrs@i{)} "@}" ;
|
|
|
|
netif_attrs : netif_attr "=" @var{<string>} ;
|
|
|
|
netif_attr : "inaddr" | "netmask" | "hwaddr" ;
|
|
@end example
|
|
|
|
Examples:
|
|
|
|
@example
|
|
netif ie0 @{
|
|
inaddr = 129.31.81.37
|
|
netmask = 0xfffffe00
|
|
hwaddr = "08:00:20:01:a6:a5"
|
|
@}
|
|
|
|
netif ec0 @{ @}
|
|
@end example
|
|
|
|
@node FSinfo host config, FSinfo host arch, FSinfo host netif, FSinfo host attributes
|
|
@comment node-name, next, previous, up
|
|
@subsection config Option
|
|
@cindex FSinfo config host attribute
|
|
@cindex config, FSinfo host attribute
|
|
|
|
This option allows you to specify configuration variables for the
|
|
startup scripts (@file{rc} scripts). A simple string should immediately
|
|
follow the keyword.
|
|
|
|
Example:
|
|
|
|
@example
|
|
config "NFS_SERVER=true"
|
|
config "ZEPHYR=true"
|
|
@end example
|
|
|
|
This option is currently unsupported.
|
|
|
|
@node FSinfo host arch, FSinfo host os, FSinfo host config, FSinfo host attributes
|
|
@comment node-name, next, previous, up
|
|
@subsection arch Option
|
|
@cindex FSinfo arch host attribute
|
|
@cindex arch, FSinfo host attribute
|
|
|
|
This defines the architecture of the machine. For example:
|
|
|
|
@example
|
|
arch = hp300
|
|
@end example
|
|
|
|
This is intended to be of use when building architecture specific
|
|
mountmaps, however, the option is currently unsupported.
|
|
|
|
@node FSinfo host os, FSinfo host cluster, FSinfo host arch, FSinfo host attributes
|
|
@comment node-name, next, previous, up
|
|
@subsection os Option
|
|
@cindex FSinfo os host attribute
|
|
@cindex os, FSinfo host attribute
|
|
|
|
This defines the operating system type of the host. For example:
|
|
|
|
@example
|
|
os = hpux
|
|
@end example
|
|
|
|
This information is used when creating the @file{fstab} files, for
|
|
example in choosing which format to use for the @file{fstab} entries
|
|
within the file.
|
|
|
|
@node FSinfo host cluster, , FSinfo host os, FSinfo host attributes
|
|
@comment node-name, next, previous, up
|
|
@subsection cluster Option
|
|
@cindex FSinfo cluster host attribute
|
|
@cindex cluster, FSinfo host attribute
|
|
|
|
This is used for specifying in which cluster the machine belongs. For
|
|
example:
|
|
|
|
@example
|
|
cluster = "theory"
|
|
@end example
|
|
|
|
The cluster is intended to be used when generating the automount maps,
|
|
although it is currently unsupported.
|
|
|
|
@node FSinfo filesystems, FSinfo static mounts, FSinfo host attributes, FSinfo host definitions
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} filesystems
|
|
@cindex 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 @samp{fsck} pass number which are needed to generate
|
|
@file{fstab} entries.
|
|
|
|
@example
|
|
filesystem : "fs" @var{<device>} "@{" @i{list(}fs_data@i{)} "@}" ;
|
|
|
|
fs_data : fs_data_attr "=" @var{<string>}
|
|
| mount
|
|
;
|
|
|
|
fs_data_attr
|
|
: "fstype" | "opts" | "passno"
|
|
| "freq" | "dumpset" | "log"
|
|
;
|
|
@end example
|
|
|
|
Here, @var{<device>} is the device name of the disk (for example,
|
|
@file{/dev/dsk/2s0}). The device name is used for building the mount
|
|
maps and for the @file{fstab} file. The attributes that can be
|
|
specified are shown in the following section.
|
|
|
|
The @i{FSinfo} configuration file for @code{dylan.doc.ic.ac.uk} is listed below.
|
|
|
|
@example
|
|
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
|
|
@}
|
|
@}
|
|
@end example
|
|
|
|
@menu
|
|
* fstype Option: FSinfo filesystems fstype:
|
|
* opts Option: FSinfo filesystems opts:
|
|
* passno Option: FSinfo filesystems passno:
|
|
* freq Option: FSinfo filesystems freq:
|
|
* mount Option: FSinfo filesystems mount:
|
|
* dumpset Option: FSinfo filesystems dumpset:
|
|
* log Option: FSinfo filesystems log:
|
|
@end menu
|
|
|
|
@node FSinfo filesystems fstype, FSinfo filesystems opts, , FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection fstype Option
|
|
@cindex FSinfo fstype filesystems option
|
|
@cindex fstype, FSinfo filesystems option
|
|
@cindex export, FSinfo special fstype
|
|
|
|
This specifies the type of filesystem being declared and will be placed
|
|
into the @file{fstab} file as is. The value of this option will be
|
|
handed to @code{mount} as the filesystem type---it should have such
|
|
values as @code{4.2}, @code{nfs} or @code{swap}. The value is not
|
|
examined for correctness.
|
|
|
|
There is one special case. If the filesystem type is specified as
|
|
@samp{export} then the filesystem information will not be added to the
|
|
host's @file{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 @i{FSinfo}.
|
|
|
|
Example:
|
|
|
|
@example
|
|
fstype = swap
|
|
@end example
|
|
|
|
@node FSinfo filesystems opts, FSinfo filesystems passno, FSinfo filesystems fstype, FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection opts Option
|
|
@cindex FSinfo opts filesystems option
|
|
@cindex opts, FSinfo filesystems option
|
|
|
|
This defines any options that should be given to @b{mount}(8) in the
|
|
@file{fstab} file. For example:
|
|
|
|
@example
|
|
opts = rw,nosuid,grpid
|
|
@end example
|
|
|
|
@node FSinfo filesystems passno, FSinfo filesystems freq, FSinfo filesystems opts, FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection passno Option
|
|
@cindex FSinfo passno filesystems option
|
|
@cindex passno, FSinfo filesystems option
|
|
|
|
This defines the @b{fsck}(8) pass number in which to check the
|
|
filesystem. This value will be placed into the @file{fstab} file.
|
|
|
|
Example:
|
|
|
|
@example
|
|
passno = 1
|
|
@end example
|
|
|
|
@node FSinfo filesystems freq, FSinfo filesystems mount, FSinfo filesystems passno, FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection freq Option
|
|
@cindex FSinfo freq filesystems option
|
|
@cindex freq, FSinfo filesystems option
|
|
|
|
This defines the interval (in days) between dumps. The value is placed
|
|
as is into the @file{fstab} file.
|
|
|
|
Example:
|
|
|
|
@example
|
|
freq = 3
|
|
@end example
|
|
|
|
@node FSinfo filesystems mount, FSinfo filesystems dumpset, FSinfo filesystems freq, FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection mount Option
|
|
@cindex FSinfo mount filesystems option
|
|
@cindex mount, FSinfo filesystems option
|
|
@cindex exportfs, FSinfo mount option
|
|
@cindex volname, FSinfo mount option
|
|
@cindex sel, FSinfo mount option
|
|
|
|
This defines the mountpoint at which to place the filesystem. If the
|
|
mountpoint of the filesystem is specified as @code{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 @code{exportfs},
|
|
@code{volname} and @code{sel}.
|
|
|
|
The format is:
|
|
|
|
@example
|
|
mount : "mount" vol_tree ;
|
|
|
|
vol_tree : @i{list(}vol_tree_attr@i{)} ;
|
|
|
|
vol_tree_attr
|
|
: @var{<string>} "@{" @i{list(}vol_tree_info@i{)} vol_tree "@}" ;
|
|
|
|
vol_tree_info
|
|
: "exportfs" @var{<export-data>}
|
|
| "volname" @var{<volname>}
|
|
| "sel" @var{<selector-list>}
|
|
;
|
|
@end example
|
|
|
|
Example:
|
|
|
|
@example
|
|
mount default @{
|
|
exportfs "dylan dougal florence zebedee"
|
|
volname /vol/andrew
|
|
@}
|
|
@end example
|
|
|
|
In the above example, the filesystem currently being declared will have
|
|
an entry placed into the @file{exports} file allowing the filesystem to
|
|
be exported to the machines @code{dylan}, @code{dougal}, @code{florence}
|
|
and @code{zebedee}. The volume name by which the filesystem will be
|
|
referred to remotely, is @file{/vol/andrew}. By declaring the
|
|
mountpoint to be @code{default}, the filesystem will be mounted on the
|
|
local machine in the automounter tree, where @i{Amd} will automatically
|
|
inherit the mount as @file{/vol/andrew}.@refill
|
|
|
|
@table @samp
|
|
@item exportfs
|
|
a string defining which machines the filesystem may be exported to.
|
|
This is copied, as is, into the @file{exports} file---no sanity checking
|
|
is performed on this string.@refill
|
|
|
|
@item 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.@refill
|
|
|
|
@item sel
|
|
a string which is placed into the automounter maps as a selector for the
|
|
filesystem.@refill
|
|
|
|
@end table
|
|
|
|
@node FSinfo filesystems dumpset, FSinfo filesystems log, FSinfo filesystems mount, FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection dumpset Option
|
|
@cindex FSinfo dumpset filesystems option
|
|
@cindex dumpset, FSinfo filesystems option
|
|
|
|
This provides support for Imperial College's local file backup tools and
|
|
is not documented further here.
|
|
|
|
@node FSinfo filesystems log, , FSinfo filesystems dumpset, FSinfo filesystems
|
|
@comment node-name, next, previous, up
|
|
@subsection log Option
|
|
@cindex FSinfo log filesystems option
|
|
@cindex log, FSinfo filesystems option
|
|
|
|
Specifies the log device for the current filesystem. This is ignored if
|
|
not required by the particular filesystem type.
|
|
|
|
@node FSinfo static mounts, FSinfo automount definitions , FSinfo filesystems, FSinfo host definitions
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} static mounts
|
|
@cindex FSinfo static mounts
|
|
@cindex Statically mounts filesystems, FSinfo
|
|
|
|
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 @code{fs} declarations. In this case the @code{mount}
|
|
declaration is used to determine from where its filesystems will be
|
|
mounted. In addition to being added to the @file{fstab} file, this
|
|
information can also be used to generate a suitable @file{bootparams}
|
|
file.@refill
|
|
|
|
@example
|
|
mount : "mount" @var{<volname>} @i{list(}localinfo@i{)} ;
|
|
|
|
localinfo : localinfo_attr @var{<string>} ;
|
|
|
|
localinfo_attr
|
|
: "as"
|
|
| "from"
|
|
| "fstype"
|
|
| "opts"
|
|
;
|
|
@end example
|
|
|
|
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:
|
|
@table @samp
|
|
@item from @var{machine}
|
|
mount the filesystem from the machine with the hostname of
|
|
@dfn{machine}.@refill
|
|
|
|
@item as @var{mountpoint}
|
|
mount the filesystem locally as the name given, in case this is
|
|
different from the advertised volume name of the filesystem.
|
|
|
|
@item opts @var{options}
|
|
native @b{mount}(8) options.
|
|
|
|
@item fstype @var{type}
|
|
type of filesystem to be mounted.
|
|
@end table
|
|
|
|
An example:
|
|
|
|
@example
|
|
mount /export/exec/hp300/local as /usr/local
|
|
@end example
|
|
|
|
If the mountpoint specified is either @file{/} or @file{swap}, the
|
|
machine will be considered to be booting off the net and this will be
|
|
noted for use in generating a @file{bootparams} file for the host which
|
|
owns the filesystems.
|
|
|
|
@node FSinfo automount definitions, FSinfo Command Line Options, FSinfo static mounts, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section Defining an @i{Amd} Mount Map in @i{FSinfo}
|
|
@cindex FSinfo automount definitions
|
|
@cindex Defining an Amd mount map, FSinfo
|
|
|
|
The maps used by @i{Amd} can be constructed from @i{FSinfo} by defining
|
|
all the automount trees. @i{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
|
|
@code{automount} declaration is needed for each @i{Amd} automount point.
|
|
@i{FSinfo} determines whether the automount point is @dfn{direct}
|
|
(@pxref{Direct Automount Filesystem}) or @dfn{indirect}
|
|
(@pxref{Top-level Filesystem}). Direct automount points are
|
|
distinguished by the fact that there is no underlying
|
|
@dfn{automount_tree}.@refill
|
|
|
|
@example
|
|
automount : "automount" @i{opt(}auto_opts@i{)} automount_tree ;
|
|
|
|
auto_opts : "opts" @var{<mount-options>} ;
|
|
|
|
automount_tree
|
|
: @i{list(}automount_attr@i{)}
|
|
;
|
|
|
|
automount_attr
|
|
: @var{<string>} "=" @var{<volname>}
|
|
| @var{<string>} "->" @var{<symlink>}
|
|
| @var{<string>} "@{" automount_tree "@}"
|
|
;
|
|
@end example
|
|
|
|
If @var{<mount-options>} is given, then it is the string to be placed in
|
|
the maps for @i{Amd} for the @code{opts} option.
|
|
|
|
A @dfn{map} is typically a tree of filesystems, for example @file{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 @file{/vol}, the
|
|
following map would be defined:
|
|
|
|
@example
|
|
automount /vol @{ @}
|
|
@end example
|
|
|
|
Within a tree, the only items that can appear are more maps.
|
|
For example:
|
|
|
|
@example
|
|
automount /vol @{
|
|
andrew @{ @}
|
|
X11 @{ @}
|
|
@}
|
|
@end example
|
|
|
|
In this case, @i{FSinfo} will look for volumes named @file{/vol/andrew}
|
|
and @file{/vol/X11} and a map entry will be generated for each. If the
|
|
volumes are defined more than once, then @i{FSinfo} will generate
|
|
a series of alternate entries for them in the maps.@refill
|
|
|
|
Instead of a tree, either a link (@var{name} @code{->}
|
|
@var{destination}) or a reference can be specified (@var{name} @code{=}
|
|
@var{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 @code{njw} in the @file{/homes} map,
|
|
either of the two forms can be used:@refill
|
|
|
|
@example
|
|
automount /homes @{
|
|
njw -> /home/dylan/njw
|
|
@}
|
|
@end example
|
|
|
|
or
|
|
|
|
@example
|
|
automount /homes @{
|
|
njw = /home/dylan/njw
|
|
@}
|
|
@end example
|
|
|
|
In the first example, when @file{/homes/njw} is referenced from @i{Amd},
|
|
a link will be created leading to @file{/home/dylan/njw} and the
|
|
automounter will be referenced a second time to resolve this filename.
|
|
The map entry would be:
|
|
|
|
@example
|
|
njw type:=link;fs:=/home/dylan/njw
|
|
@end example
|
|
|
|
In the second example, the destination directory is analyzed and found
|
|
to be in the filesystem @file{/home/dylan} which has previously been
|
|
defined in the maps. Hence the map entry will look like:
|
|
|
|
@example
|
|
njw rhost:=dylan;rfs:=/home/dylan;sublink:=njw
|
|
@end example
|
|
|
|
Creating only one symbolic link, and one access to @i{Amd}.
|
|
|
|
@node FSinfo Command Line Options, FSinfo errors, FSinfo automount definitions, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section @i{FSinfo} Command Line Options
|
|
@cindex FSinfo command line options
|
|
@cindex Command line options, FSinfo
|
|
|
|
@i{FSinfo} is started from the command line by using the command:
|
|
|
|
@example
|
|
fsinfo [@i{options}] @i{files} ...
|
|
@end example
|
|
|
|
The input to @i{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
|
|
@file{bootparams} file are in the latter class. To put the output into
|
|
a subdirectory simply put a @file{/} at the end of the prefix, making
|
|
sure that the directory has already been made before running
|
|
@i{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.
|
|
@end menu
|
|
|
|
@node -a FSinfo Option, -b FSinfo Option, FSinfo Command Line Options, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-a} @var{autodir}
|
|
|
|
Specifies the directory name in which to place the automounter's
|
|
mountpoints. This defaults to @file{/a}. Some sites have the autodir set
|
|
to be @file{/amd}, and this would be achieved by:
|
|
|
|
@example
|
|
fsinfo -a /amd ...
|
|
@end example
|
|
|
|
@node -b FSinfo Option, -d FSinfo Option, -a FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-b} @var{bootparams}
|
|
@cindex bootparams, FSinfo prefix
|
|
|
|
This specifies the prefix for the @file{bootparams} filename. If it is
|
|
not given, then the file will not be generated. The @file{bootparams}
|
|
file will be constructed for the destination machine and will be placed
|
|
into a file named @file{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 @file{bootparams} file in the directory
|
|
@file{generic}, the following would be used:
|
|
|
|
@example
|
|
fsinfo -b generic/ ...
|
|
@end example
|
|
|
|
@node -d FSinfo Option, -e FSinfo Option, -b FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-d} @var{dumpsets}
|
|
@cindex dumpset, FSinfo prefix
|
|
|
|
This specifies the prefix for the @file{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
|
|
@file{dumpsets}, prefixed by this string. The @file{dumpsets} file is
|
|
for use by Imperial College's local backup system.
|
|
|
|
For example, to create a @file{dumpsets} file in the directory @file{generic},
|
|
then you would use the following:
|
|
|
|
@example
|
|
fsinfo -d generic/ ...
|
|
@end example
|
|
|
|
@node -e FSinfo Option, -f FSinfo Option, -d FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-e} @var{exportfs}
|
|
@cindex exports, FSinfo prefix
|
|
|
|
Defines the prefix for the @file{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 @file{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
|
|
@file{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 @file{exports} files for each diskfull machine
|
|
and place them into the directory @file{exports}:
|
|
|
|
@example
|
|
fsinfo -e exports/ ...
|
|
@end example
|
|
|
|
@node -f FSinfo Option, -h FSinfo Option, -e FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-f} @var{fstab}
|
|
@cindex fstab, FSinfo prefix
|
|
|
|
This defines the prefix for the @file{fstab} files. The files will only
|
|
be created if this prefix is defined. For each machine defined in the
|
|
configuration files, a @file{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 @file{fstabs}:
|
|
|
|
@example
|
|
fsinfo -f fstabs/ ...
|
|
@end example
|
|
|
|
@node -h FSinfo Option, -m FSinfo Option, -f FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-h} @var{hostname}
|
|
@cindex hostname, FSinfo command line option
|
|
|
|
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
|
|
@b{gethostname}(2).
|
|
|
|
Example:
|
|
|
|
@example
|
|
fsinfo -h dylan.doc.ic.ac.uk ...
|
|
@end example
|
|
|
|
@node -m FSinfo Option, -q FSinfo Option, -h FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-m} @var{mount-maps}
|
|
@cindex maps, FSinfo command line option
|
|
|
|
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 @file{automaps}:
|
|
|
|
@example
|
|
fsinfo -m automaps/ ...
|
|
@end example
|
|
|
|
@node -q FSinfo Option, -v FSinfo Option, -m FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-q}
|
|
@cindex quiet, FSinfo command line option
|
|
|
|
Selects quiet mode. @i{FSinfo} suppress the ``running commentary'' and
|
|
only outputs any error messages which are generated.
|
|
|
|
@node -v FSinfo Option, -D-FSinfo Option, -q FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-v}
|
|
@cindex verbose, FSinfo command line option
|
|
|
|
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 @file{stdout} on a line starting with a @samp{#} character.
|
|
|
|
@node -D-FSinfo Option, -I FSinfo Option, -v FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-D} @var{name[=defn]}
|
|
|
|
Defines a symbol @dfn{name} for the preprocessor when reading the
|
|
configuration files. Equivalent to @code{#define} directive.
|
|
|
|
@node -I FSinfo Option, -U FSinfo Option, -D-FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-I} @var{directory}
|
|
|
|
This option is passed into the preprocessor for the configuration files.
|
|
It specifies directories in which to find include files
|
|
|
|
@node -U FSinfo Option, , -I FSinfo Option, FSinfo Command Line Options
|
|
@comment node-name, next, previous, up
|
|
@subsection @code{-U} @var{name}
|
|
|
|
Removes any initial definition of the symbol @dfn{name}. Inverse of the
|
|
@code{-D} option.
|
|
|
|
@node FSinfo errors, , FSinfo Command Line Options, FSinfo
|
|
@comment node-name, next, previous, up
|
|
@section Errors produced by @i{FSinfo}
|
|
@cindex FSinfo error messages
|
|
|
|
The following table documents the errors and warnings which @i{FSinfo} may produce.
|
|
|
|
@table @t
|
|
|
|
@item " expected
|
|
Occurs if an unescaped newline is found in a quoted string.
|
|
|
|
@item ambiguous mount: @var{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.
|
|
|
|
@item can't open @var{filename} for writing
|
|
Occurs if any errors are encountered when opening an output file.
|
|
|
|
@item cannot determine localname since volname @var{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, @i{FSinfo} cannot
|
|
calculate a mountpoint, as the desired pathname would be
|
|
ambiguous.
|
|
|
|
@item @var{device} has duplicate exportfs data
|
|
Produced if the @samp{exportfs} option is used multiple times within the
|
|
same branch of a filesystem definition. For example, if you attempt to
|
|
set the @samp{exportfs} data at different levels of the mountpoint
|
|
directory tree.
|
|
|
|
@item dump frequency for @var{host}:@var{device} is non-zero
|
|
Occurs if @var{device} has its @samp{fstype} declared to be @samp{swap}
|
|
or @samp{export} and the @samp{dump} option is set to a value greater
|
|
than zero. Swap devices should not be dumped.
|
|
|
|
@item duplicate host @var{hostname}!
|
|
If a host has more than one definition.
|
|
|
|
@item end of file within comment
|
|
A comment was unterminated before the end of one of the configuration
|
|
files.
|
|
|
|
@item @var{filename}: cannot open for reading
|
|
If a file specified on the command line as containing configuration data
|
|
could not be opened.
|
|
|
|
@item @var{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.
|
|
|
|
@item fs field "@var{field-name}" already set
|
|
Occurs when multiple definitions are given for one of the attributes of a
|
|
host's filesystem.
|
|
|
|
@item host field "@var{field-name}" already set
|
|
If duplicate definitions are given for any of the fields with a host
|
|
definition.
|
|
|
|
@item @var{host}:@var{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.
|
|
|
|
@item @var{host}:@var{device} has no mount point
|
|
Occurs if the @samp{mount} option is not specified for a host's
|
|
filesystem.
|
|
|
|
@item @var{host}:@var{device} needs field "@var{field-name}"
|
|
Occurs when a filesystem is missing a required field. @var{field-name} could
|
|
be one of @samp{fstype}, @samp{opts}, @samp{passno} or
|
|
@samp{mount}.
|
|
|
|
@item @var{host}:mount field specified for swap partition
|
|
Occurs if a mountpoint is given for a filesystem whose type is declared
|
|
to be @samp{swap}.
|
|
|
|
@item malformed IP dotted quad: @var{address}
|
|
If the Internet address of an interface is incorrectly specified. An
|
|
Internet address definition is handled to @b{inet_addr}(3N) to see if it
|
|
can cope. If not, then this message will be displayed.
|
|
|
|
@item malformed netmask: @var{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 @var{netmask} value.
|
|
|
|
@item mount field "@var{field-name}" already set
|
|
Occurs when a static mount has multiple definitions of the same field.
|
|
|
|
@item mount tree field "@var{field-name}" already set
|
|
Occurs when the @var{field-name} is defined more than once during the
|
|
definition of a filesystems mountpoint.
|
|
|
|
@item netif field @var{field-name} already set
|
|
Occurs if you attempt to define an attribute of an interface more than
|
|
once.
|
|
|
|
@item 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.
|
|
|
|
@item no disk mounts on @var{hostname}
|
|
If there are no static mounts, nor local disk mounts specified for a
|
|
machine, this message will be displayed.
|
|
|
|
@item no volname given for @var{host}:@var{device}
|
|
Occurs when a filesystem is defined to be mounted on @file{default}, but
|
|
no volume name is given for the file system, then the mountpoint cannot
|
|
be determined.
|
|
|
|
@item 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.
|
|
|
|
@item pass number for @var{host}:@var{device} is non-zero
|
|
Occurs if @var{device} has its @samp{fstype} declared to be @samp{swap}
|
|
or @samp{export} and the @b{fsck}(8) pass number is set. Swap devices should not be
|
|
fsck'd. @xref{FSinfo filesystems fstype}.
|
|
|
|
@item sub-directory @var{directory} of @var{directory-tree} starts with '/'
|
|
Within the filesystem specification for a host, if an element
|
|
@var{directory} of the mountpoint begins with a @samp{/} and it is not
|
|
the start of the tree.
|
|
|
|
@item sub-directory of @var{directory-tree} is named "default"
|
|
@samp{default} is a keyword used to specify if a mountpoint should be
|
|
automatically calculated by @i{FSinfo}. If you attempt to specify a
|
|
directory name as this, it will use the filename of @file{default} but
|
|
will produce this warning.
|
|
|
|
@item 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.
|
|
|
|
@item unknown directory attribute
|
|
If an unknown keyword is found while reading the definition of a host's
|
|
filesystem mount option.
|
|
|
|
@item unknown filesystem attribute
|
|
Occurs if an unrecognized keyword is used when defining a host's
|
|
filesystems.
|
|
|
|
@item unknown host attribute
|
|
Occurs if an unrecognized keyword is used when defining a host.
|
|
|
|
@item unknown mount attribute
|
|
Occurs if an unrecognized keyword is found while parsing the list of
|
|
static mounts.
|
|
|
|
@item unknown volname @var{volume} automounted @i{[} on @i{name} @i{]}
|
|
Occurs if @var{volume} is used in a definition of an automount map but the volume
|
|
name has not been declared during the host filesystem definitions.
|
|
|
|
@item volname @var{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.
|
|
|
|
@item volname @var{volume} not exported from @var{machine}
|
|
Occurs if you attempt to mount the volume @var{volume} from a machine
|
|
which has not declared itself to have such a filesystem
|
|
available.
|
|
|
|
@end table
|
|
|
|
@c ################################################################
|
|
@node Hlfsd, Assorted Tools, FSinfo, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Hlfsd
|
|
@pindex Hlfsd
|
|
@cindex Home-Link Filesystem
|
|
|
|
@i{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
|
|
@email{ezk@@cs.columbia.edu,Erez Zadok} and
|
|
@email{dupuy@@cs.columbia.edu,Alexander Dupuy}, at the
|
|
@uref{http://www.cs.columbia.edu/,Computer Science Department} of
|
|
@uref{http://www.columbia.edu/,Columbia University}. A
|
|
@uref{http://www.cs.columbia.edu/~ezk/research/hlfsd/hlfsd.html,paper}
|
|
on @i{Hlfsd} was presented at the Usenix LISA VII conference in 1993.
|
|
|
|
@i{Hlfsd} operates by mounting itself as an NFS server for the directory
|
|
containing @i{linkname}, which defaults to @file{/hlfs/home}. Lookups
|
|
within that directory are handled by @i{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 @i{subdir} appended to it. If
|
|
not specified, @i{subdir} defaults to @file{.hlfsdir}. This directory
|
|
will also be created if it does not already exist.
|
|
|
|
A @samp{SIGTERM} sent to @i{Hlfsd} will cause it to shutdown. A @samp{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 @samp{SIGUSR1} will cause it to dump its internal table
|
|
of user IDs and home directories to the file @file{/tmp/hlfsddump}.
|
|
|
|
@menu
|
|
* Introduction to Hlfsd::
|
|
* Background to Mail Delivery::
|
|
* Using Hlfsd::
|
|
@end menu
|
|
|
|
@c ================================================================
|
|
@node Introduction to Hlfsd, Background to Mail Delivery, Hlfsd, Hlfsd
|
|
@comment node-name, next, previous, up
|
|
@section Introduction to Hlfsd
|
|
@cindex Introduction to Hlfsd
|
|
@cindex Hlfsd; introduction
|
|
|
|
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:
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
they introduce new single points of failure
|
|
|
|
@item
|
|
they require using different mail transfer agents (MTAs) or user agents
|
|
(UAs)
|
|
|
|
@item
|
|
they do not solve the problem for all cases, i.e. the solution is only
|
|
partially successful for a particular environment.
|
|
|
|
@end itemize
|
|
|
|
We have designed a simple filesystem, called the @dfn{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, @file{hlfsd} , would not hang under
|
|
any circumstances, and would take the next-best action when faced with
|
|
problems. Compared to alternative methods, @i{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 @i{Hlfsd} server finds out the @var{uid} of the process that is
|
|
accessing its mount point, and resolves the pathname component @samp{home} as a
|
|
symbolic link to a subdirectory within the home directory given by the
|
|
@var{uid}'s entry in the password file. If the @var{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 @emph{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
|
|
@file{/var/spool/mail}. Many programs, including UAs, depend on that
|
|
path. @i{Hlfsd} creates a directory @file{/mail}, and mounts itself on
|
|
top of that directory. @i{Hlfsd} implements the path name component
|
|
called @samp{home}, pointing to a subdirectory of the user's home directory.
|
|
We have made @file{/var/spool/mail} a symbolic link to
|
|
@file{/mail/home}, so that accessing @file{/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
|
|
@file{/var/mail/@i{NAME}} to @file{/users/ezk/.mailspool/@i{NAME}} proceeds.
|
|
|
|
@multitable {Resolving Component} {Pathname left to resolve} {Value if symbolic link}
|
|
|
|
@item @b{Resolving Component}
|
|
@tab @b{Pathname left to resolve}
|
|
@tab @b{Value if symbolic link}
|
|
|
|
@item @t{/}
|
|
@tab @t{var/mail/}@i{NAME}
|
|
|
|
@item @t{var/}
|
|
@tab @t{mail/}@i{NAME}
|
|
|
|
@item @t{mail}@@
|
|
@tab @t{/mail/home/}@i{NAME}
|
|
@tab @t{mail}@@ -> @t{/mail/home}
|
|
|
|
@item @t{/}
|
|
@tab @t{mail/home/}@i{NAME}
|
|
|
|
@item @t{mail/}
|
|
@tab @t{home/}@i{NAME}
|
|
|
|
@item @t{home}@@
|
|
@tab @i{NAME}
|
|
@tab @t{home}@@ -> @t{/users/ezk/.mailspool}
|
|
|
|
@item @t{/}
|
|
@tab @t{users/ezk/.mailspool/}@i{NAME}
|
|
|
|
@item @t{users/}
|
|
@tab @t{ezk/.mailspool/}@i{NAME}
|
|
|
|
@item @t{ezk/}
|
|
@tab @t{.mailspool/}@i{NAME}
|
|
|
|
@item @t{.mailspool/}
|
|
@tab @i{NAME}
|
|
|
|
@item @i{NAME}
|
|
|
|
@end multitable
|
|
|
|
@c ================================================================
|
|
@node Background to Mail Delivery, Using Hlfsd, Introduction to Hlfsd, Hlfsd
|
|
@comment node-name, next, previous, up
|
|
@section Background to Mail Delivery
|
|
@cindex Background to Mail Delivery
|
|
@cindex Hlfsd; background
|
|
|
|
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 @i{Hlfsd}.
|
|
|
|
@menu
|
|
* Single-Host Mail Spool Directory::
|
|
* Centralized Mail Spool Directory::
|
|
* Distributed Mail Spool Service::
|
|
* Why Deliver Into the Home Directory?::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Single-Host Mail Spool Directory, Centralized Mail Spool Directory, Background to Mail Delivery, Background to Mail Delivery
|
|
@comment node-name, next, previous, up
|
|
@subsection Single-Host Mail Spool Directory
|
|
@cindex 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''.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Centralized Mail Spool Directory, Distributed Mail Spool Service, Single-Host Mail Spool Directory, Background to Mail Delivery
|
|
@comment node-name, next, previous, up
|
|
@subsection Centralized Mail Spool Directory
|
|
@cindex 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 @file{/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:
|
|
|
|
@table @b
|
|
|
|
@item 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.@footnote{ Delivery via NFS-mounted filesystems
|
|
may require usage of @samp{rpc.lockd} and @samp{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 @samp{nfsd} processes are kept busy.} 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 @samp{trn}, @samp{emacs},
|
|
@samp{csh} or @samp{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.
|
|
|
|
@item Reliability
|
|
|
|
The mail-server host and its network connectivity must be very reliable.
|
|
Worse, since the spool directory has to be hard-mounted,@footnote{No SA
|
|
in their right minds would soft-mount read/write partitions --- the
|
|
chances for data loss are too great.} many processes which access the
|
|
spool directory (various shells, @samp{login}, @samp{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.
|
|
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Distributed Mail Spool Service, Why Deliver Into the Home Directory?, Centralized Mail Spool Directory, Background to Mail Delivery
|
|
@comment node-name, next, previous, up
|
|
@subsection Distributed Mail Spool Service
|
|
@cindex 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 @file{/bin/mail} and mail readers like @file{/usr/ucb/Mail},
|
|
@samp{mush}, @samp{mm}, etc.), other programs that know mailbox location
|
|
are login, from, almost every shell, @samp{xbiff}, @samp{xmailbox}, and
|
|
even some programs not directly related to mail, such as @samp{emacs}
|
|
and @samp{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:
|
|
|
|
@table @b
|
|
|
|
@item automounters
|
|
|
|
Using an automounter such as @i{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
|
|
@file{/var/spool/mail} with symbolic links and making sure they are
|
|
updated. Making @i{Amd} manage that directory directly fails, since
|
|
many various lock files need to be managed as well. Also, @i{Amd} does
|
|
not provide all of the NFS operations which are required to write mail
|
|
such as write, create, remove, and unlink.
|
|
|
|
@item @code{$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 @code{$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.
|
|
|
|
@item @t{/bin/mail}
|
|
|
|
Using a different mail delivery agent could be the solution. One such
|
|
example is @samp{hdmail}. However, @samp{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 @code{$MAIL} variable setup correctly, and that every program
|
|
use this variable.
|
|
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Why Deliver Into the Home Directory?, , Distributed Mail Spool Service, Background to Mail Delivery
|
|
@comment node-name, next, previous, up
|
|
@subsection Why Deliver Into the Home Directory?
|
|
@cindex Why Deliver Into the Home Directory?
|
|
@cindex Hlfsd; Why Deliver Into the Home Directory?
|
|
|
|
There are several major reasons why SAs might want to deliver mail
|
|
directly into the users' home directories:
|
|
|
|
@table @b
|
|
|
|
@item 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.
|
|
|
|
@item 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.
|
|
|
|
@item 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 @samp{finger} display this
|
|
information, which some consider an infringement of privacy. While it
|
|
is possible to disable this feature of @samp{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.
|
|
|
|
@c Lastly, on systems that do not export their NFS filesystem with
|
|
@c @t{anon=0}, superusers are less likely to snoop around others' mail, as
|
|
@c they become ``nobodies'' across NFS.
|
|
|
|
@end table
|
|
|
|
In summary, delivering mail to home directories provides users the
|
|
functionality sought, and also avoids most of the problems just
|
|
discussed.
|
|
|
|
@c ================================================================
|
|
@node Using Hlfsd, , Background to Mail Delivery, Hlfsd
|
|
@comment node-name, next, previous, up
|
|
@section Using Hlfsd
|
|
@cindex Using Hlfsd
|
|
@cindex Hlfsd; using
|
|
|
|
@menu
|
|
* Controlling Hlfsd::
|
|
* Hlfsd Options::
|
|
* Hlfsd Files::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Controlling Hlfsd, Hlfsd Options, Using Hlfsd, Using Hlfsd
|
|
@comment node-name, next, previous, up
|
|
@subsection Controlling Hlfsd
|
|
@cindex Controlling Hlfsd
|
|
@cindex Hlfsd; controlling
|
|
@pindex ctl-hlfsd
|
|
|
|
Much the same way @i{Amd} is controlled by @file{ctl-amd}, so does
|
|
@i{Hlfsd} get controlled by the @file{ctl-hlfsd} script:
|
|
|
|
@table @t
|
|
|
|
@item ctl-hlfsd start
|
|
Start a new @i{Hlfsd}.
|
|
|
|
@item ctl-hlfsd stop
|
|
Stop a running @i{Hlfsd}.
|
|
|
|
@item ctl-hlfsd restart
|
|
Stop a running @i{Hlfsd}, wait for 10 seconds, and then start a new
|
|
one. It is hoped that within 10 seconds, the previously running
|
|
@i{Hlfsd} terminate properly; otherwise, starting a second one could
|
|
cause system lockup.
|
|
|
|
@end table
|
|
|
|
For example, on our systems, we start @i{Hlfsd} within @file{ctl-hlfsd}
|
|
as follows on Solaris 2 systems:
|
|
|
|
@example
|
|
hlfsd -a /var/alt_mail -x all -l /var/log/hlfsd /mail/home .mailspool
|
|
@end example
|
|
|
|
The directory @file{/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 @file{/var/mail}, but on our systems,
|
|
that is a symbolic link to @file{/mail/home}. @file{/mail} is managed
|
|
by @i{Hlfsd}, which creates a dynamic symlink named @samp{home},
|
|
pointing to the subdirectory @file{.mailspool} @emph{within} the
|
|
accessing user's home directory. This results in mail which normally
|
|
should go to @file{/var/mail/@code{$USER}}, to go to
|
|
@file{@code{$HOME}/.mailspool/@code{$USER}}.
|
|
|
|
@i{Hlfsd} does not create the @file{/var/mail} symlink. This needs to
|
|
be created (manually) once on each host, by the system administrators,
|
|
as follows:
|
|
|
|
@example
|
|
mv /var/mail /var/alt_mail
|
|
ln -s /mail/home /var/mail
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Hlfsd Options, Hlfsd Files, Controlling Hlfsd, Using Hlfsd
|
|
@comment node-name, next, previous, up
|
|
@subsection Hlfsd Options
|
|
@cindex Hlfsd Options
|
|
@cindex Hlfsd; Options
|
|
|
|
@table @t
|
|
|
|
@item -a @var{alt_dir}
|
|
Alternate directory. The name of the directory to which the symbolic
|
|
link returned by @i{Hlfsd} will point, if it cannot access the home
|
|
directory of the user. This defaults to @file{/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.
|
|
|
|
@item -c @var{cache-interval}
|
|
Caching interval. @i{Hlfsd} will cache the validity of home directories
|
|
for this interval, in seconds. Entries which have been verified within
|
|
the last @var{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, @i{Hlfsd} will re-verify the
|
|
validity of the user's home directory, and reset the cache time-counter.
|
|
The default value for @var{cache-interval} is 300 seconds (5 minutes).
|
|
|
|
@item -f
|
|
Force fast startup. This option tells @i{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.
|
|
|
|
@item -g @var{group}
|
|
Set the special group HLFS_GID to @var{group}. Programs such as
|
|
@file{/usr/ucb/from} or @file{/usr/sbin/in.comsat}, which access the
|
|
mailboxes of other users, must be setgid @samp{HLFS_GID} to work properly. The
|
|
default group is @samp{hlfs}. If no group is provided, and there is no
|
|
group @samp{hlfs}, this feature is disabled.
|
|
|
|
@item -h
|
|
Help. Print a brief help message, and exit.
|
|
|
|
@item -i @var{reload-interval}
|
|
Map-reloading interval. Each @var{reload-interval} seconds, @i{Hlfsd}
|
|
will reload the password map. @i{Hlfsd} needs the password map for the
|
|
UIDs and home directory pathnames. @i{Hlfsd} schedules a @samp{SIGALRM} to
|
|
reload the password maps. A @samp{SIGHUP} sent to @i{Hlfsd} will force it to
|
|
reload the maps immediately. The default value for
|
|
@var{reload-interval} is 900 seconds (15 minutes.)
|
|
|
|
@item -l @var{logfile}
|
|
Specify a log file to which @i{Hlfsd} will record events. If
|
|
@var{logfile} is the string @samp{syslog} then the log messages will be
|
|
sent to the system log daemon by @b{syslog}(3), using the @samp{LOG_DAEMON}
|
|
facility. This is also the default.
|
|
|
|
@item -n
|
|
No verify. @i{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 @i{Hlfsd} at the
|
|
cost of possibly returning symbolic links to home directories which are
|
|
not currently accessible or are full. By default, @i{Hlfsd} validates
|
|
the symbolic-link in the background. The @code{-n} option overrides the
|
|
meaning of the @code{-c} option, since no caching is necessary.
|
|
|
|
@item -o @var{mount-options}
|
|
Mount options which @i{Hlfsd} will use to mount itself on top of
|
|
@var{dirname}. By default, @var{mount-options} is set to @samp{ro}. If
|
|
the system supports symbolic-link caching, default options are set
|
|
to @samp{ro,nocache}.
|
|
|
|
@item -p
|
|
Print PID. Outputs the process-id of @i{Hlfsd} to standard output where
|
|
it can be saved into a file.
|
|
|
|
@item -v
|
|
Version. Displays version information to standard error.
|
|
|
|
@item -x @var{log-options}
|
|
Specify run-time logging options. The options are a comma separated
|
|
list chosen from: @samp{fatal}, @samp{error}, @samp{user}, @samp{warn}, @samp{info}, @samp{map}, @samp{stats}, @samp{all}.
|
|
|
|
@item -C
|
|
Force @i{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.
|
|
|
|
@item -D @var{log-options}
|
|
Select from a variety of debugging options. Prefixing an option with
|
|
the string @samp{no} reverses the effect of that option. Options are
|
|
cumulative. The most useful option is @samp{all}. Since this option is
|
|
only used for debugging other options are not documented here. A fuller
|
|
description is available in the program source. A @samp{SIGUSR1} sent
|
|
to @i{Hlfsd} will cause it to dump its internal password map to the file
|
|
@file{/usr/tmp/hlfsd.dump.XXXXXX}, where @samp{XXXXXX} will be replaced
|
|
by a random string generated by @b{mktemp}(3) or (the more secure)
|
|
@b{mkstemp}(3).
|
|
|
|
@item -P @var{password-file}
|
|
Read the user-name, user-id, and home directory information from the
|
|
file @var{password-file}. Normally, @i{Hlfsd} will use @b{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 @var{password-file} are read and
|
|
checked. All other fields are ignored. The file @var{password-file}
|
|
must otherwise be compliant with Unix Version 7 colon-delimited format
|
|
@b{passwd}(4).
|
|
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node Hlfsd Files, , Hlfsd Options, Using Hlfsd
|
|
@comment node-name, next, previous, up
|
|
@subsection Hlfsd Files
|
|
@cindex Hlfsd Files
|
|
@cindex Hlfsd; Files
|
|
|
|
The following files are used by @i{Hlfsd}:
|
|
|
|
@table @file
|
|
|
|
@item /hlfs
|
|
directory under which @i{Hlfsd} mounts itself and manages the symbolic
|
|
link @file{home}.
|
|
|
|
@item .hlfsdir
|
|
default sub-directory in the user's home directory, to which the
|
|
@file{home} symbolic link returned by @i{Hlfsd} points.
|
|
|
|
@item /var/hlfs
|
|
directory to which @file{home} symbolic link returned by @i{Hlfsd}
|
|
points if it is unable to verify the that user's home directory is
|
|
accessible.
|
|
|
|
@end table
|
|
|
|
For discussion on other files used by @i{Hlfsd}, see @xref{lostaltmail}, and
|
|
@ref{lostaltmail.conf-sample}.
|
|
|
|
@c ################################################################
|
|
@node Assorted Tools, Examples, Hlfsd, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Assorted Tools
|
|
@cindex 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::
|
|
* wait4amd::
|
|
* wait4amd2die::
|
|
* wire-test::
|
|
@end menu
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node am-eject, amd.conf-sample, Assorted Tools, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section am-eject
|
|
@pindex am-eject
|
|
|
|
A shell script unmounts a floppy or CD-ROM that is automounted, and
|
|
then attempts to eject the removable device.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node amd.conf-sample, amd2ldif, am-eject, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section amd.conf-sample
|
|
@pindex amd.conf-sample
|
|
|
|
A sample @i{Amd} configuration file. @xref{Amd Configuration File}.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node amd2ldif, amd2sun, amd.conf-sample, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section amd2ldif
|
|
@pindex amd2ldif
|
|
|
|
A script to convert @i{Amd} maps to LDAP input files. Use it as follows:
|
|
|
|
@example
|
|
amd2ldif @i{mapname} @i{base} < @i{amd.mapfile} > @i{mapfile.ldif}
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node amd2sun, automount2amd, amd2ldif, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section amd2sun
|
|
@pindex amd2sun
|
|
|
|
A script to convert @i{Amd} maps to Sun Automounter maps. Use it as
|
|
follows
|
|
|
|
@example
|
|
amd2sun < @i{amd.mapfile} > @i{auto_mapfile}
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node automount2amd, ctl-amd, amd2sun, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section automount2amd
|
|
@pindex automount2amd
|
|
|
|
A script to convert old Sun Automounter maps to @i{Amd} maps.
|
|
|
|
Say you have the Sun automount file @i{auto.foo}, with these two lines:
|
|
@example
|
|
home earth:/home
|
|
moon -ro,intr server:/proj/images
|
|
@end example
|
|
Running
|
|
@example
|
|
automount2amd auto.foo > amd.foo
|
|
@end example
|
|
|
|
will produce the @i{Amd} map @i{amd.foo} with this content:
|
|
|
|
@example
|
|
# 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
|
|
@end example
|
|
|
|
This perl script will use the following @i{/default} entry
|
|
@example
|
|
type:=nfs;opts:=rw,grpid,nosuid,utimeout=600
|
|
@end example
|
|
If you wish to override that, define the @b{$DEFAULTS} environment
|
|
variable, or modify the script.
|
|
|
|
If you wish to generate Amd maps using the @i{hostd} (@pxref{hostd
|
|
Selector Variable}) @i{Amd} map syntax, then define the environment
|
|
variable @b{$DOMAIN} or modify the script.
|
|
|
|
Note that automount2amd does not understand newer Sun Automount map
|
|
syntax, those used by autofs.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node ctl-amd, ctl-hlfsd, automount2amd, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section ctl-amd
|
|
@pindex ctl-amd
|
|
|
|
A script to start, stop, or restart @i{Amd}. Use it as follows:
|
|
|
|
@table @t
|
|
@item ctl-amd start
|
|
Start a new @i{Amd} process.
|
|
@item ctl-amd stop
|
|
Stop the running @i{Amd}.
|
|
@item ctl-amd restart
|
|
Stop the running @i{Amd} (if any), safely wait for it to terminate, and
|
|
then start a new process --- only if the previous one died cleanly.
|
|
@end table
|
|
|
|
@xref{Run-time Administration}, for more details.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node ctl-hlfsd, expn, ctl-amd, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section ctl-hlfsd
|
|
@pindex ctl-hlfsd
|
|
|
|
A script for controlling @i{Hlfsd}, much the same way @file{ctl-amd}
|
|
controls @i{Amd}. Use it as follows:
|
|
|
|
@table @t
|
|
@item ctl-hlfsd start
|
|
Start a new @i{Hlfsd} process.
|
|
@item ctl-hlfsd stop
|
|
Stop the running @i{Hlfsd}.
|
|
@item ctl-hlfsd restart
|
|
Stop the running @i{Hlfsd} (if any), wait for 10 seconds for it to
|
|
terminate, and then start a new process --- only if the previous one
|
|
died cleanly.
|
|
@end table
|
|
|
|
@xref{Hlfsd}, for more details.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node expn, fix-amd-map, ctl-hlfsd, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section expn
|
|
@pindex expn
|
|
|
|
A script to expand email addresses into their full name. It is
|
|
generally useful when using with the @file{lostaltmail} script, but is a
|
|
useful tools otherwise.
|
|
|
|
@example
|
|
$ expn -v ezk@@cs.columbia.edu
|
|
ezk@@cs.columbia.edu ->
|
|
ezk@@shekel.mcl.cs.columbia.edu
|
|
ezk@@shekel.mcl.cs.columbia.edu ->
|
|
Erez Zadok <"| /usr/local/mh/lib/slocal -user ezk || exit 75>
|
|
Erez Zadok <\ezk>
|
|
Erez Zadok </u/zing/ezk/.mailspool/backup>
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node fix-amd-map, fixmount, expn, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section fix-amd-map
|
|
@pindex fix-amd-map
|
|
|
|
Am-utils changed some of the syntax and default values of some
|
|
variables. For example, the default value for @samp{$@{os@}} for
|
|
Solaris 2.x (aka SunOS 5.x) systems used to be @samp{sos5}, it is now
|
|
more automatically generated from @file{config.guess} and its value is
|
|
@samp{sunos5}.
|
|
|
|
This script converts older @i{Amd} maps to new ones. Use it as follows:
|
|
|
|
@example
|
|
fix-amd-map < @i{old.map} > @i{new.map}
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node fixmount, fixrmtab, fix-amd-map, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section fixmount
|
|
@pindex fixmount
|
|
|
|
@samp{fixmount} is a variant of @b{showmount}(8) that can delete bogus
|
|
mount entries in remote @b{mountd}(8) daemons. This is useful to
|
|
cleanup otherwise ever-accumulating ``junk''. Use it for example:
|
|
|
|
@example
|
|
fixmount -r @i{host}
|
|
@end example
|
|
|
|
See the online manual page for @samp{fixmount} for more details of its
|
|
usage.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node fixrmtab, lostaltmail, fixmount, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section fixrmtab
|
|
@pindex fixrmtab
|
|
|
|
A script to invalidate @file{/etc/rmtab} entries for hosts named. Also
|
|
restart mountd for changes to take effect. Use it for example:
|
|
|
|
@example
|
|
fixrmtab @i{host1} @i{host2} @i{...}
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node lostaltmail, lostaltmail.conf-sample, fixrmtab, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section lostaltmail
|
|
@pindex lostaltmail
|
|
|
|
A script used with @i{Hlfsd} to resend any ``lost'' mail. @i{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 @samp{lostaltmail}
|
|
script does.
|
|
|
|
Use it as follows:
|
|
|
|
@example
|
|
lostaltmail
|
|
@end example
|
|
|
|
This script needs a configuration file @samp{lostaltmail.conf} set up
|
|
with the right parameters to properly work. @xref{Hlfsd}, for more
|
|
details.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node lostaltmail.conf-sample, mk-amd-map, lostaltmail, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section lostaltmail.conf-sample
|
|
@pindex lostaltmail.conf-sample
|
|
@cindex lostaltmail; configuration file
|
|
|
|
This is a text file with configuration parameters needed for the
|
|
@samp{lostaltmail} script. The script includes comments explaining each
|
|
of the configuration variables. See it for more information. Also
|
|
@pxref{Hlfsd} for general information.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node mk-amd-map, pawd, lostaltmail.conf-sample, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section mk-amd-map
|
|
@pindex mk-amd-map
|
|
|
|
This program converts a normal @i{Amd} map file into an ndbm database
|
|
with the same prefix as the named file. Use it as follows:
|
|
|
|
@example
|
|
mk-amd-map @i{mapname}
|
|
@end example
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node pawd, wait4amd, mk-amd-map, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section pawd
|
|
@pindex pawd
|
|
|
|
@i{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 @i{Amd}'s local mount points. Using them is
|
|
unsafe, because @i{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, @i{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.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node wait4amd, wait4amd2die, pawd, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section wait4amd
|
|
@pindex wait4amd
|
|
|
|
A script to wait for @i{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
|
|
@samp{^C} (or whatever keyboard sequence your terminal's @samp{intr} function
|
|
is bound to).
|
|
|
|
Examples:
|
|
|
|
@table @t
|
|
@item wait4amd saturn amq -p -h saturn
|
|
When @i{Amd} is up on host @samp{saturn}, get the process ID of that
|
|
running @i{Amd}.
|
|
@item wait4amd pluto rlogin pluto
|
|
Remote login to host @samp{pluto} when @i{Amd} is up on that host. It
|
|
is generally necessary to wait for @i{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.
|
|
@item 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 @i{Amd}, and need to reboot hung
|
|
hosts.
|
|
@end table
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node wait4amd2die, wire-test, wait4amd, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section wait4amd2die
|
|
@pindex wait4amd2die
|
|
|
|
This script is used internally by @samp{ctl-amd} when used to restart
|
|
@i{Amd}. It waits for @i{Amd} to terminate. If it detected that
|
|
@i{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 @i{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 @i{Amd} dies.
|
|
|
|
@c ----------------------------------------------------------------
|
|
@node wire-test, , wait4amd2die, Assorted Tools
|
|
@comment node-name, next, previous, up
|
|
@section wire-test
|
|
@pindex wire-test
|
|
|
|
A simple program to test if some of the most basic networking functions
|
|
in am-util's library @file{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, @samp{wire-test} will
|
|
try @file{localhost}.
|
|
|
|
@example
|
|
$ 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!
|
|
@end example
|
|
|
|
@c ################################################################
|
|
@node Examples, Internals, Assorted Tools, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Examples
|
|
|
|
@menu
|
|
* User Filesystems::
|
|
* Home Directories::
|
|
* Architecture Sharing::
|
|
* Wildcard Names::
|
|
* rwho servers::
|
|
* /vol::
|
|
* /defaults with selectors::
|
|
* /tftpboot in a chroot-ed environment::
|
|
|
|
@end menu
|
|
|
|
@node User Filesystems, Home Directories, Examples, Examples
|
|
@comment node-name, next, previous, up
|
|
@section User Filesystems
|
|
@cindex User filesystems
|
|
@cindex Mounting 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
|
|
@t{/home/}@i{machine}.
|
|
|
|
Typically, the @samp{/etc/fstab} file contained a long list of entries
|
|
such as:
|
|
|
|
@example
|
|
@i{machine}:/home/@i{machine} /home/@i{machine} nfs ...
|
|
@end example
|
|
|
|
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, @samp{/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 @samp{localhost} which is used for users such as
|
|
the operator (@samp{opr}) who have a home directory on most machine as
|
|
@samp{/home/localhost/opr}.
|
|
|
|
@example
|
|
/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@}
|
|
...
|
|
@end example
|
|
|
|
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.
|
|
@i{Amd} is started with the following command
|
|
|
|
@example
|
|
amd /home amd.home
|
|
@end example
|
|
|
|
Note that when mounting a remote filesystem, the @dfn{automounted}
|
|
mount point is referenced, so that the filesystem will be mounted if
|
|
it is not yet (at the time the remote @samp{mountd} obtains the file handle).
|
|
|
|
@node Home Directories, Architecture Sharing, User Filesystems, Examples
|
|
@comment node-name, next, previous, up
|
|
@section Home Directories
|
|
@cindex Home directories
|
|
@cindex Example of mounting home directories
|
|
@cindex Mount home directories
|
|
|
|
One convention for home directories is to locate them in @samp{/homes}
|
|
so user @samp{jsp}'s home directory is @samp{/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:
|
|
|
|
@example
|
|
amd /homes amd.homes
|
|
@end example
|
|
|
|
where the map @samp{amd.homes} contained the entries:
|
|
|
|
@example
|
|
/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
|
|
@end example
|
|
|
|
Whenever a login name is accessed in @samp{/homes} a symbolic link
|
|
appears pointing to the real location of that user's home directory. In
|
|
this example, @samp{/homes/jsp} would appear to be a symbolic link
|
|
pointing to @samp{/home/charm/jsp}. Of course, @samp{/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 @samp{/homes}
|
|
map. The required map is simple, but long, and its creation is best automated.
|
|
The entry for @samp{jsp} could be:
|
|
|
|
@example
|
|
jsp -sublink:=$@{key@};rfs:=/home/charm \
|
|
host==charm;type:=ufs;dev:=/dev/xd0g \
|
|
host!=charm;type:=nfs;rhost:=charm
|
|
@end example
|
|
|
|
This map can become quite big if it contains a large number of entries.
|
|
By combining two other features of @i{Amd} it can be greatly simplified.
|
|
|
|
First the UFS partitions should be mounted under the control of
|
|
@samp{/etc/fstab}, taking care that they are mounted in the same place
|
|
that @i{Amd} would have automounted them. In most cases this would be
|
|
something like @samp{/a/@dfn{host}/home/@dfn{host}} and
|
|
@samp{/etc/fstab} on host @samp{charm} would have a line:@refill
|
|
|
|
@example
|
|
/dev/xy0g /a/charm/home/charm 4.2 rw,nosuid,grpid 1 5
|
|
@end example
|
|
|
|
The map can then be changed to:
|
|
|
|
@example
|
|
/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
|
|
@end example
|
|
|
|
This map operates as usual on a remote machine (@i{ie} @code{$@{host@}}
|
|
not equal to @code{$@{rhost@}}). On the machine where the filesystem is
|
|
stored (@i{ie} @code{$@{host@}} equal to @code{$@{rhost@}}), @i{Amd}
|
|
will construct a local filesystem mount point which corresponds to the
|
|
name of the locally mounted UFS partition. If @i{Amd} is started with
|
|
the @code{-r} option then instead of attempting an NFS mount, @i{Amd} will
|
|
simply inherit the UFS mount (@pxref{Inheritance Filesystem}). If
|
|
@code{-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.
|
|
|
|
@node Architecture Sharing, Wildcard Names, Home Directories, Examples
|
|
@comment node-name, next, previous, up
|
|
@section Architecture Sharing
|
|
@cindex Architecture sharing
|
|
@cindex Sharing a fileserver between architectures
|
|
@cindex Architecture dependent volumes
|
|
|
|
@c %At the moment some of the research machines have sets of software
|
|
@c %mounted in @samp{/vol}. This contains subdirectories for \TeX,
|
|
@c %system sources, local sources, prolog libraries and so on.
|
|
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
|
|
@samp{fserver} in the example):
|
|
|
|
@example
|
|
local/tex
|
|
local/tex/fonts
|
|
local/tex/lib
|
|
local/tex/bin
|
|
local/tex/bin/sun3
|
|
local/tex/bin/sun4
|
|
local/tex/bin/hp9000
|
|
...
|
|
@end example
|
|
|
|
In this example, the subdirectories of @samp{local/tex/bin} should be
|
|
hidden when accessed via the automount point (conventionally @samp{/vol}).
|
|
A mount-map for @samp{/vol} to achieve this would look like:
|
|
|
|
@example
|
|
/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
|
|
@end example
|
|
|
|
When @samp{/vol/tex/bin} is referenced, the current machine architecture
|
|
is automatically appended to the path by the @code{$@{sublink@}}
|
|
variable. This means that users can have @samp{/vol/tex/bin} in their
|
|
@samp{PATH} without concern for architecture dependencies.
|
|
|
|
@node Wildcard Names, rwho servers, Architecture Sharing, Examples
|
|
@comment node-name, next, previous, up
|
|
@section Wildcard Names & Replicated Servers
|
|
|
|
By using the wildcard facility, @i{Amd} can @dfn{overlay} an existing
|
|
directory with additional entries.
|
|
The system files are usually mounted under @samp{/usr}. If instead,
|
|
@i{Amd} is mounted on @samp{/usr}, additional
|
|
names can be overlayed to augment or replace names in the ``master'' @samp{/usr}.
|
|
A map to do this would have the form:
|
|
|
|
@example
|
|
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
|
|
@end example
|
|
|
|
Note that the assignment to @code{$@{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
|
|
@samp{/usr/local} or @samp{/usr/share} to another automount point.
|
|
|
|
In this example, it is assumed that the @samp{/usr} files are replicated
|
|
on three fileservers: @samp{fserv1}, @samp{fserv2} and @samp{fserv3}.
|
|
For any references other than to @samp{local} and @samp{share} one of
|
|
the servers is used and a symbolic link to
|
|
@t{$@{autodir@}/$@{rhost@}/export/exec/$@{arch@}/@i{whatever}} is
|
|
returned once an appropriate filesystem has been mounted.@refill
|
|
|
|
@node rwho servers, /vol, Wildcard Names, Examples
|
|
@comment node-name, next, previous, up
|
|
@section @samp{rwho} servers
|
|
@cindex rwho servers
|
|
@cindex Architecture specific mounts
|
|
@cindex Example of architecture specific mounts
|
|
|
|
The @samp{/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:
|
|
|
|
@example
|
|
/defaults type:=nfs
|
|
usr/spool/rwho -byte==little;rfs:=/usr/spool/rwho \
|
|
rhost:=vaxA rhost:=vaxB \
|
|
|| -rfs:=/usr/spool/rwho \
|
|
rhost:=sun4 rhost:=hp300
|
|
@end example
|
|
|
|
@node /vol, /defaults with selectors, rwho servers, Examples
|
|
@comment node-name, next, previous, up
|
|
@section @samp{/vol}
|
|
@cindex /vol
|
|
@cindex Catch-all mount point
|
|
@cindex Generic volume name
|
|
|
|
@samp{/vol} is used as a catch-all for volumes which do not have other
|
|
conventional names.
|
|
|
|
Below is part of the @samp{/vol} map for the domain @samp{doc.ic.ac.uk}.
|
|
The @samp{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
|
|
@samp{/vol/r+d/@{bin,ucb@}} in their path.@refill
|
|
|
|
The main tree resides on one host @samp{gould.doc.ic.ac.uk}, which has
|
|
different @samp{bin}, @samp{etc}, @samp{lib} and @samp{ucb}
|
|
sub-directories for each machine architecture. For example,
|
|
@samp{/vol/r+d/bin} for a Sun-4 would be stored in the sub-directory
|
|
@samp{bin/sun4} of the filesystem @samp{/usr/r+d}. When it was accessed
|
|
a symbolic link pointing to @samp{/a/gould/usr/r+d/bin/sun4} would be
|
|
returned.@refill
|
|
|
|
@example
|
|
/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
|
|
@end example
|
|
|
|
@node /defaults with selectors, /tftpboot in a chroot-ed environment, /vol, Examples
|
|
@comment node-name, next, previous, up
|
|
@section @samp{/defaults} with selectors
|
|
@cindex /defaults with selectors
|
|
@cindex selectors on default
|
|
|
|
It is sometimes useful to have different defaults for a given map. To
|
|
achieve this, the @samp{/defaults} entry must be able to process normal
|
|
selectors. This feature is turned on by setting
|
|
@samp{selectors_on_default = yes} in the @file{amd.conf} file.
|
|
@xref{selectors_on_default 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.
|
|
|
|
@example
|
|
/defaults \
|
|
wire==slip-net;opts:=rw,intr,rsize=1024,wsize=1024,timeo=20,retrans=10 \
|
|
wire!=slip-net;opts:=rw,intr
|
|
@end example
|
|
|
|
@node /tftpboot in a chroot-ed environment, , /defaults with selectors, Examples
|
|
@comment node-name, next, previous, up
|
|
@section @samp{/tftpboot} in a chroot-ed environment
|
|
@cindex /tftpboot in a chroot-ed environment
|
|
@cindex chroot: /tftpboot example
|
|
|
|
In this complex example, we attempt to run an @i{Amd} process
|
|
@emph{inside} a chroot-ed environment. @samp{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, @samp{tftpd} (and also @samp{ftpd})
|
|
processes are run using the @b{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 @samp{tftpd} on your system with
|
|
|
|
@example
|
|
chroot /tftpboot /usr/sbin/tftpd
|
|
@end example
|
|
|
|
@noindent
|
|
then the @samp{tftpd} process will not be able to access any files
|
|
outside @file{/tftpboot}. This ensures that no one can retrieve files
|
|
such as @file{/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 @samp{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 @samp{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 @i{Amd} as follows:
|
|
|
|
@example
|
|
amd /tftpboot/.amd amd.tftpboot
|
|
@end example
|
|
|
|
That is, @i{Amd} is serving the directory @file{/tftpboot/.amd}. The
|
|
@samp{tftp} server runs inside @file{/tftpboot} and is chroot-ed in that
|
|
directory too. The @file{amd.tftpboot} map looks like:
|
|
|
|
@example
|
|
#
|
|
# 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
|
|
@end example
|
|
|
|
To help understand this example, I list a few of the file entries that
|
|
are created inside @file{/tftpboot}:
|
|
|
|
@example
|
|
$ 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 -> .
|
|
@end example
|
|
|
|
Here is an explanation of each of the entries listed above:
|
|
|
|
@table @code
|
|
|
|
@item .amd
|
|
This is the @i{Amd} mount point. Note that you do not need to run a
|
|
separate @i{Amd} process for the TFTP service. The @b{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 @i{Amd} itself was not run in chroot-ed mode.
|
|
|
|
@item import
|
|
This is the mount point where @i{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 @file{/tftpboot} directory).
|
|
|
|
@item adminpr.cfg
|
|
@itemx tekxp
|
|
Two manually created symbolic links to directories @emph{inside} the
|
|
@i{Amd}-managed directory. The crossing of the component @file{tp} will
|
|
cause @i{Amd} to automount one of the remote replicas. Once crossed,
|
|
access to files inside proceeds as usual. The @samp{adminpr.cfg} is a
|
|
configuration file for an HP Laser-Jet 4si printer, and the @samp{tekxp}
|
|
is a directory for Tektronix X-Terminal boot files.
|
|
|
|
@item tftpboot
|
|
This innocent looking symlink is important. Usually, when devices boot
|
|
via the TFTP service, they perform the @samp{get file} command to
|
|
retrieve @var{file}. However, some devices assume that @samp{tftpd}
|
|
does not run in a chroot-ed environment, but rather ``unprotected'', and
|
|
thus use a full pathname for files to retrieve, as in @samp{get
|
|
/tftpboot/file}. This symlink effectively strips out the leading
|
|
@file{/tftpboot/}.
|
|
|
|
@end table
|
|
|
|
@c ################################################################
|
|
@node Internals, Acknowledgments & Trademarks, Examples, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter 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::
|
|
@end menu
|
|
|
|
@node Log Messages, , Internals, Internals
|
|
@comment node-name, next, previous, up
|
|
@section Log Messages
|
|
|
|
In the following sections a brief explanation is given of some of the
|
|
log messages made by @i{Amd}. Where the message is in @samp{typewriter}
|
|
font, it corresponds exactly to the message produced by @i{Amd}. Words
|
|
in @dfn{italic} are replaced by an appropriate string. Variables,
|
|
@code{$@{@i{var}@}}, indicate that the value of the appropriate variable is
|
|
output.
|
|
|
|
Log messages are either sent directly to a file,
|
|
or logged via the @b{syslog}(3) mechanism. @xref{log_file Parameter}.
|
|
In either case, entries in the file are of the form:
|
|
@example
|
|
@i{date-string} @i{hostname} @t{amd[}@i{pid}@t{]} @i{message}
|
|
@end example
|
|
|
|
@menu
|
|
* Fatal errors::
|
|
* Info messages::
|
|
@end menu
|
|
|
|
@node Fatal errors, Info messages, Log Messages, Log Messages
|
|
@comment node-name, next, previous, up
|
|
@subsection Fatal errors
|
|
|
|
@i{Amd} attempts to deal with unusual events. Whenever it is not
|
|
possible to deal with such an error, @i{Amd} will log an appropriate
|
|
message and, if it cannot possibly continue, will either exit or abort.
|
|
These messages are selected by @samp{-x fatal} on the command line.
|
|
When @b{syslog}(3) is being used, they are logged with level
|
|
@samp{LOG_FATAL}. Even if @i{Amd} continues to operate it is likely to
|
|
remain in a precarious state and should be restarted at the earliest
|
|
opportunity.
|
|
|
|
@table @t
|
|
|
|
@item 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''.
|
|
|
|
@item Can't bind to domain "@i{NIS-domain}"
|
|
A specific NIS domain was requested on the command line, but no server
|
|
for that domain is available on the local net.
|
|
|
|
@item Can't determine IP address of this host (@i{hostname})
|
|
When @i{Amd} starts it determines its own IP address. If this lookup
|
|
fails then @i{Amd} cannot continue. The hostname it looks up is that
|
|
obtained returned by @b{gethostname}(2) system call.
|
|
|
|
@item Can't find root file handle for @i{automount point}
|
|
@i{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''.
|
|
|
|
@item Must be root to mount filesystems (euid = @i{euid})
|
|
To prevent embarrassment, @i{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 @code{-v} option.
|
|
|
|
@item No work to do - quitting
|
|
No automount points were given on the command line and so there is no
|
|
work to do.
|
|
|
|
@item Out of memory
|
|
While attempting to malloc some memory, the memory space available to
|
|
@i{Amd} was exhausted. This is an unrecoverable error.
|
|
|
|
@item Out of memory in realloc
|
|
While attempting to realloc some memory, the memory space available to
|
|
@i{Amd} was exhausted. This is an unrecoverable error.
|
|
|
|
@item cannot create rpc/udp service
|
|
Either the NFS or AMQ endpoint could not be created.
|
|
|
|
@item gethostname: @i{description}
|
|
The @b{gethostname}(2) system call failed during startup.
|
|
|
|
@item host name is not set
|
|
The @b{gethostname}(2) system call returned a zero length host name.
|
|
This can happen if @i{Amd} is started in single user mode just after
|
|
booting the system.
|
|
|
|
@item ifs_match called!
|
|
An internal error occurred while restarting a pre-mounted filesystem.
|
|
This error ``should never happen''.
|
|
|
|
@item mount_afs: @i{description}
|
|
An error occurred while @i{Amd} was mounting itself.
|
|
|
|
@item run_rpc failed
|
|
Somehow the main NFS server loop failed. This error ``should never
|
|
happen''.
|
|
|
|
@item unable to free rpc arguments in amqprog_1
|
|
The incoming arguments to the AMQ server could not be free'ed.
|
|
|
|
@item unable to free rpc arguments in nfs_program_1
|
|
The incoming arguments to the NFS server could not be free'ed.
|
|
|
|
@item unable to register (AMQ_PROGRAM, AMQ_VERSION, udp)
|
|
The AMQ server could not be registered with the local portmapper or the
|
|
internal RPC dispatcher.
|
|
|
|
@item unable to register (NFS_PROGRAM, NFS_VERSION, 0)
|
|
The NFS server could not be registered with the internal RPC dispatcher.
|
|
|
|
@end table
|
|
|
|
XXX: This section needs to be updated
|
|
|
|
@node Info messages, , Fatal errors, Log Messages
|
|
@comment node-name, next, previous, up
|
|
@subsection Info messages
|
|
|
|
@i{Amd} generates information messages to record state changes. These
|
|
messages are selected by @samp{-x info} on the command line. When
|
|
@b{syslog}(3) is being used, they are logged with level @samp{LOG_INFO}.
|
|
|
|
The messages listed below can be generated and are in a format suitable
|
|
for simple statistical analysis. @dfn{mount-info} is the string
|
|
that is displayed by @dfn{Amq} in its mount information column and
|
|
placed in the system mount table.
|
|
|
|
@table @t
|
|
|
|
@item "@t{$@{@i{path}@}}" forcibly timed out
|
|
An automount point has been timed out by the @i{Amq} command.
|
|
|
|
@item "@t{$@{@i{path}@}}" has timed out
|
|
No access to the automount point has been made within the timeout
|
|
period.
|
|
|
|
@item Filehandle denied for "$@{@i{rhost}@}:$@{@i{rfs}@}"
|
|
The mount daemon refused to return a file handle for the requested filesystem.
|
|
|
|
@item Filehandle error for "$@{@i{rhost}@}:$@{@i{rfs}@}": @i{description}
|
|
The mount daemon gave some other error for the requested filesystem.
|
|
|
|
@item Finishing with status @i{exit-status}
|
|
@i{Amd} is about to exit with the given exit status.
|
|
|
|
@item Re-synchronizing cache for map @t{$@{@i{map}@}}
|
|
The named map has been modified and the internal cache is being re-synchronized.
|
|
|
|
@item file server @t{$@{@i{rhost}@}} is down - timeout of "@t{$@{@i{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.
|
|
|
|
@item file server @t{$@{@i{rhost}@}} type nfs is down
|
|
An NFS file server that was previously up is now down.
|
|
|
|
@item file server @t{$@{@i{rhost}@}} type nfs is up
|
|
An NFS file server that was previously down is now up.
|
|
|
|
@item file server @t{$@{@i{rhost}@}} type nfs starts down
|
|
A new NFS file server has been referenced and is known to be down.
|
|
|
|
@item file server @t{$@{@i{rhost}@}} type nfs starts up
|
|
A new NFS file server has been referenced and is known to be up.
|
|
|
|
@item mount of "@t{$@{@i{path}@}}" on @t{$@{@i{fs}@}} timed out
|
|
Attempts to mount a filesystem for the given automount point have failed
|
|
to complete within 30 seconds.
|
|
|
|
@item @i{mount-info} mounted fstype @t{$@{@i{type}@}} on @t{$@{@i{fs}@}}
|
|
A new file system has been mounted.
|
|
|
|
@item @i{mount-info} restarted fstype @t{$@{@i{type}@}} on @t{$@{@i{fs}@}}
|
|
@i{Amd} is using a pre-mounted filesystem to satisfy a mount request.
|
|
|
|
@item @i{mount-info} unmounted fstype @t{$@{@i{type}@}} from @t{$@{@i{fs}@}}
|
|
A file system has been unmounted.
|
|
|
|
@item @i{mount-info} unmounted fstype @t{$@{@i{type}@}} from @t{$@{@i{fs}@}} link @t{$@{@i{fs}@}}/@t{$@{@i{sublink}@}}
|
|
A file system of which only a sub-directory was in use has been unmounted.
|
|
|
|
@item restarting @i{mount-info} on @t{$@{@i{fs}@}}
|
|
A pre-mounted file system has been noted.
|
|
|
|
@end table
|
|
|
|
XXX: This section needs to be updated
|
|
|
|
@c ################################################################
|
|
@node Acknowledgments & Trademarks, Index, Internals, Top
|
|
@comment node-name, next, previous, up
|
|
@unnumbered Acknowledgments & Trademarks
|
|
|
|
Many thanks to the @email{amd-dev@@majordomo.cs.columbia.edu,Amd
|
|
Developers} 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
|
|
@uref{http://www.cs.columbia.edu/~ezk/am-utils/AUTHORS.txt,authors} who
|
|
have submitted patches.
|
|
|
|
Thanks to the Formal Methods Group at Imperial College for suffering
|
|
patiently while @i{Amd} was being developed on their machines.
|
|
|
|
Thanks to the many people who have helped with the development of
|
|
@i{Amd}, especially Piete Brooks at the Cambridge University Computing
|
|
Lab for many hours of testing, experimentation and discussion.
|
|
|
|
Thanks to the @email{amd-workers@@majordomo.glue.umd.edu,Amd Workers}
|
|
mailing list members for many suggestions and bug reports to @i{Amd}.
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@b{DEC}, @b{VAX} and @b{Ultrix} are registered trademarks of Digital
|
|
Equipment Corporation.
|
|
@item
|
|
@b{AIX} and @b{IBM} are registered trademarks of International Business
|
|
Machines Corporation.
|
|
@item
|
|
@b{Sun}, @b{NFS} and @b{SunOS} are registered trademarks of Sun
|
|
Microsystems, Inc.
|
|
@item
|
|
@b{UNIX} is a registered trademark in the USA and other countries,
|
|
exclusively licensed through X/Open Company, Ltd.
|
|
@item
|
|
All other registered trademarks are owned by their respective owners.
|
|
@end itemize
|
|
|
|
@c ################################################################
|
|
@node Index, , Acknowledgments & Trademarks, Top
|
|
@comment node-name, next, previous, up
|
|
@unnumbered Index
|
|
|
|
@printindex cp
|
|
|
|
@contents
|
|
@bye
|
|
|
|
@c ====================================================================
|
|
@c ISPELL LOCAL WORDS:
|
|
@c LocalWords: setfilename amdref overfullrule settitle titlepage titlefont nz
|
|
@c LocalWords: authorfont vskip ifinfo iftex cindex unnumberedsec dfn xref vol
|
|
@c LocalWords: locationN pxref jpo nott concentrix Sjoerd sjoerd cwi Eitan vuw
|
|
@c LocalWords: Mizrotsky eitan shumuji dgux fpx scp hcx metcalf masala hlh OTS
|
|
@c LocalWords: Presnell srp cgl Trost trost ogi pyrOSx OSx tubsibr riscix iX
|
|
@c LocalWords: Piete pb Lindblad cjl ai umax utek xinu Mitchum D'Souza dsouza
|
|
@c LocalWords: mrc apu alliant aviion AViiON fps macII multimax tahoe vax emph
|
|
@c LocalWords: mapdefault valA valB valC YPTSDIR ETCDIR substr MAKEDBM YPDBDIR
|
|
@c LocalWords: NOPUSH njw dylan dk dylan njw anydir domN achilles mjh pref sel
|
|
@c LocalWords: gdef loc loc loc ldots autodir remopts rwho rwho styx styx yoyo
|
|
@c LocalWords: noindent gould rvdmount rvdunmount fserver mtmp unioned logfile
|
|
@c LocalWords: dmn esac phjk toytown toytown toytown toytown phjk RdDir RdLnk
|
|
@c LocalWords: volname attrs netif dougal inaddr hwaddr ec mountmaps passno xy
|
|
@c LocalWords: freq dumpset hfs brian florence localinfo fstabs automaps defn
|
|
@c LocalWords: localname fsck'd opr gummo sjv ganymede sjv fserv fserv fserv
|
|
@c LocalWords: vaxA vaxB wp thpfs nbsd asis ifs amqprog free'ed printindex gov
|
|
@c LocalWords: LocalWords syncodeindex Distrib bsdnet lanl AutoMounter acis ic
|
|
@c LocalWords: ac uk aix bsd Mullender nl il DG lcs hpux irix ucsf NeXT cse cl
|
|
@c LocalWords: mt FX hp ibm mips utils def def Domainname eg hostd getwd tmp
|
|
@c LocalWords: subsubsection rw grpid intr noconn nocto nodevs nosuid retrans
|
|
@c LocalWords: rsize tcp timeo nounmount utimeout DDEBUG nodaemon fd hostnames
|
|
@c LocalWords: pid Amd's pendry vangogh nfsx backoff stats nomap nostats CRIT
|
|
@c LocalWords: noinfo clustername RVD dsk dsk amq hostports osver statfs str
|
|
@c LocalWords: ou counter's amdmaps proj src tftpboot sh mv cd sbin ypcat inet
|
|
@c LocalWords: Getattr getattr localhost fhandles netmask fstype noquota addr
|
|
@c LocalWords: exportfs Dumpsets dumpsets pindex ldif fixmount fixrmtab euid
|
|
@c LocalWords: lostaltmail realloc netnumber itemx primnetnum primnetname ARG
|
|
@c LocalWords: subsnetname subsnetnum netgrp netgroup multitable Shlib dec osf
|
|
@c LocalWords: hppa pc bsdi freebsd netbsd openbsd ncr sysv rs acdirmax fsid
|
|
@c LocalWords: acdirmin acregmax acregmin actimeo dumbtimr nfsv noac noauto sd
|
|
@c LocalWords: nocache nodev noint nosub pgthresh posix rdonly suid symttl mfs
|
|
@c LocalWords: AMFS umapfs myftpdir unionfs es mapname mapfile mapfile slocal
|
|
@c LocalWords: mailspool saturn saturn notknown lol ober dr xr xr drwxrwsr cfg
|
|
@c LocalWords: lrwxrwxrwx adminpr hplj adminpr cfg tekxp xterms tekxp Dupuy tp
|
|
@c LocalWords: linkname hlfsddump dirname rmtab pluto rlogin direntry pg vr dn
|
|
@c LocalWords: maxmem hlfsdir xmailbox showmount cn amdmap amdmapName resvport
|
|
@c LocalWords: objectClass amdmapKey amdmapValue ln powerpc amdmapTimestamp ez
|
|
@c LocalWords: moisil FSinfo Libtool Unmounting sublink fileservers NullProc
|
|
@c LocalWords: gethostname mount's unmounts linkx remounts unmounting UAs SA's
|
|
@c LocalWords: mountpoint mountpoints unescaped UIDs util's overlayed uref EFS
|
|
@c LocalWords: serv maxgroups nfsl cachedir copt cfsadmin efs addopts fg ROMs
|
|
@c LocalWords: nointr extatt setchapternewpage columnfractions alphaev gnulibc
|
|
@c LocalWords: freebsdelf gnuoldld ifhtml defperm nodefperm norrip RRIP rrip
|
|
@c LocalWords: noversion attr XXXXXX netgrpd
|