DragonFly On-Line Manual Pages
    
    
	
RVM(1)                 DragonFly General Commands Manual                RVM(1)
NAME
       rvm - rsync vault manager
SYNOPSIS
       rvm [ action ]
           [ --timestamp timestamp ]
           [ --no-default-config ]
           [ [ --config config-file ] ... ]
           [ [ --job job-file ] ... ]
DESCRIPTION
       Rvm is an archive manager that uses rsync to create and maintain a list
       of archives that span one or more archive vaults.  A vault is defined
       as a directory on a logical partition that holds one or more archives.
       An archive is defined as a subdirectory on a vault, with a time stamp
       for a name, that holds the files and directories backed up from one or
       more archive jobs.  Files in newer archives that are identical to files
       in older archives may be optionally replaced with hard links to save
       space.
COMMAND LINE ACTION OPTIONS
       Rvm will expect one action command line option to be given.  Actions
       are mutually exclusive.  If multiple action options appear on the
       command line, only the last option encountered will be taken.
       --archive
         Create a new archive or update the files in an existing archive.
         Whether an existing archive is updated or a new archive is created
         depends on the timestamp-resolution configuration command, and the
         timestamp of the last archive created.  If an archive is found with
         the same timestamp as the one generated at execution time, then that
         archive is used regardless of the vault on which it appears.
         If the link-catalog-dir configuration command is used, then the link
         catalog is updated after all archive jobs have been processed.
       --relink
         Update the link catalog.  Do not create a new archive or refresh any
         existing archive.  This option requires that the configuration
         command link-catalog-dir appear somewhere in the configuration
         file(s).  This command is not required and has no default value.  If
         no value is specified in a configuration file then rvm will take no
         action.
       --check-config
         Load the configuration file(s) and perform all configuration checks,
         but do nothing more.  Rvm will print an error on standard error and
         exit with an error code if any problems were found with the
         configuration settings.  Rvm will print nothing and exit with a
         successful exit code if there are no problems.
       --help
         Print the version number and a synopsis of command line options, then
         exit.
       --version
         Print the version number then exit.
COMMAND LINE OPTIONS
       The following command line options are used in conjunction with one of
       the action options to direct rvm's behavior.
       --timestamp timestamp
         Override the default timestamp generated at execution time and force
         rvm to use the given timestamp instead.  This option may only be used
         on the command line once.  If it appears multiple times then only the
         last timestamp given will be used.
         Timestamps must be specified in the form of:
           [ YYYY [ - MM [ - DD [ .  HH [ MM [ SS ]]]]]]
         Where:
           YYYY
             A four-digit year.
           MM
             A two-digit month.
           DD
             A two-digit day of the month.
           HH
             A two-digit hour of the day, in 24-hour format (00-23).
           MM
             A two-digit minute.
           SS
             A two-digit second.
         No spaces are allowed.  The number of segments specified in the
         timestamp will override any timestamp-resolution setting that may
         appear in the configuration files.  Caution should be used by the
         archive manager when specifying custom timestamps on the command
         line, as specifying a timestamp of lesser resolution than the
         timestamp resolution normally used from the configuration file(s),
         could result in the archive generated from the custom timestamp being
         the first archive deleted by rvm later when the vault exceeds it's
         overflow threshold.
       --no-default-config
         Do not attempt to read configuration information from the default
         configuration file /usr/local/etc/rvm.conf.  This command line option
         must be used in conjunction with the --config command line option to
         tell rvm to read another configuration file instead of the default
         configuration file.  Rvm will exit with an error if no configuration
         files are read.
       --config config-file
         Read configuration information from config-file.  If used without the
         --no-default-config option, rvm will read the configuration file
         config-file after attempting to read the default configuration file
         /usr/local/etc/rvm.conf.  If used with --no-default-config, rvm will
         read only config-file, and will not read /usr/local/etc/rvm.conf.
         Multiple uses of this command line option will result in rvm reading
         each file passed on the command line in the order given.
         If config-file is a relative pathname, then it is assumed to be
         relative to the location from which rvm is executed.  If config-file
         contains wildcard characters, then all files that match will be read
         in alphabetical order.  Note that wildcard characters must either be
         quoted or escaped or the shell may expand it's value before passing
         the command line to rvm, which may result in undesired behavior.
         This command line option may be used multiple times to have rvm read
         several configuration files.
       --job job-file
         Read the contents of job-file as the contents of an archive job
         block.  This command line option is synonymous with the read-job
         configuration command.  Contents of the file job-file should not be
         enclosed in a <job>...</job> block, as a job context is already
         implied.  If a beginning or ending job block command is found in the
         job-file file, then rvm will exit with an error.
         If job-file is a relative pathname, then it is assumed to be relative
         to the location from which rvm is executed.  If job-file contains
         wildcard characters, then all files that match will be read in
         alphabetical order, each as a separate job.  Note that wildcard
         characters given on the command line must either be quoted or escaped
         or the shell may expand it's value before passing the command line to
         rvm, which may result in undesired behavior.
         This command line option may be used multiple times to have rvm read
         several job files.
TERMINOLOGY
       Archive Administrator
         The user in charge of setup and maintenance of rvm and all associated
         files and directories.
       Configuration File
         A file used to change rvm's behavior.  Multiple configuration files
         may be used, and each file may include the contents of other files.
         By default rvm will look for the file /usr/local/etc/rvm.conf, unless
         told to do otherwise by the --no-default-config command line option.
         Rvm may also be told to read extra configuration files with the
         --config and --job command line options.
       Vault
         A repository for archives.  A vault is merely a directory under which
         archives are created and maintained.  One or more vaults may be used.
         When using multiple vaults it is recommended that each vault be
         located either on separate physical devices, or at least separate
         logical partitions, for increased reliability in the event of disk
         corruption or failure.
       Archive
         An archive is a subdirectory within a vault, with a time-sensitive
         directory name, that houses the files and directories from one or
         more archive jobs.  The name of the archive subdirectory is generated
         from the timestamp created at the time that rvm is executed.  An
         archive may optionally contain hardlinks from files within to files
         in an older archive if the file has not changed.
       Archive Job
         An archive job consists of files and directories that are to be
         backed up from some source.  A job may consist of local files and
         directories, or files and directories mounted over NFS or Samba, or
         files and directory located on a remote host accessible by rsync via
         RSH or SSH, or files and directories located on an rsync server.  The
         files and directories backed up from the specified source may be
         stored in a user-configurable subdirectory tree under the archive
         directory.
EXECUTION
       When rvm is executed it will first set default values for all
       configuration settings.  Next rvm will parse command line options.
       If rvm was executed with the --help or --version command line options,
       then rvm will print out it's version number, and optionally a usage
       summary, then exit.
       If any other action options were selected, then rvm will next try to
       read configuration files.  If the --no-default-config command line
       option was used then rvm will not try to read the default configuration
       file, /usr/local/etc/rvm.conf.  Otherwise, rvm will attempt to locate
       and read this file first.  If this file cannot be found, rvm will exit
       with an error.  Next, if any --config or --job command line options
       were used then rvm will attempt to find and read those configuration
       files.  If any errors were detected in any of the configuration files
       found then rvm will exit with an error.
       If rvm was executed with the --check-config option, then rvm will exit
       after successfully reading all configuration files.
       If the --relink action was selected, and a valid directory was given
       for link-catalog-dir in the configuration file(s), then rvm will
       rebuild the link catalog directory and exit.
       If the --archive action was selected, then rvm will begin the archiving
       process.  Rvm will next select a vault and prepare that vault for a new
       archive.  Vault selection may be modified with the
       vault-selection-behavior configuration command.  Vaults may be selected
       round-robin style, where each vault listed in rvm's configuration files
       will be used in turn, or vaults may be selected on the grounds of which
       vault has the most free space available.
       Vault preparation involves checking the vault for available space, as
       specified with the vault-overflow-blocks and vault-overflow-inodes
       configuration commands.  If the filesystem on which the selected vault
       resides has fewer than the specified percentage of free blocks or
       inodes, then the vault is considered to have exceeded it's overflow
       threshold.  If this condition occurs, then rvm will take the action
       specified by the vault-overflow-behavior configuration command.
       Depending on this configuration setting, rvm may take one of three
       actions.  By default, rvm will simply exit with an error.  Rvm may also
       be instructed to delete the oldest archive found on the selected vault
       and re-check the filesystem's available space.  If, after deleting the
       oldest archive found, the filesystem's used space has fallen below the
       overflow threshold, then rvm will continue with execution; otherwise
       rvm will exit with an error.  Lastly, and most dangerously, rvm may be
       instructed to continue deleting old archives until either sufficient
       space is found or the vault runs out of old archives.
       After vault selection and preparation, rvm will create a new archive
       subdirectory on the vault using either the timestamp given by the
       --timestamp command line option, or a generated timestamp constructed
       according to the timestamp-resolution configuration command.  For the
       duration of the archival process the archive subdirectory name will be
       appended with the extension ".incomplete".
       Next rvm will spawn children to process archiving jobs.  Each child
       will handle a single job and archive all the paths associated with that
       job, and then send a report back to the parent rvm process.  By
       default, rvm will only spawn one child process at a time unless
       specified otherwise with the rsync-parallel configuration command.  If
       the rsync-hardlink command appears in the job configuration for this
       job, or in a previous default job configuration, then the child rvm
       process will select an older archive on the same vault to use as a
       hardlink source for rsync.  This can save space within the vault by
       hardlinking files that have not changed from one invocation of rvm to
       the next.
       Each child will interpret rsync's output and exit codes, and if
       unsuccessful, the child may retry the command a certain number of times
       before giving up, as specified by the rsync-retry-count and
       rsync-behavior configuration commands.
       After all jobs have completed rvm will rename the archive directory,
       removing the ".incomplete" extension.  Then, rvm may optionally create
       or update the link catalog directory, if link-catalog-dir configuration
       command was found in the configuration file(s).
       Finally, rvm will generate a report that it will print to standard
       output and save to a file in the log directory.
EXIT CODES
       Exit codes returned by rvm are:
       0 Successful completion of all archive jobs.
       1 A configuration error occurred.
       2 The selected vault is full.
       3 One or more archive jobs failed.
       4 An internal or fatal error occurred.
CONFIGURATION
       Rvm is configured through the use of one or more configuration files.
       By default rvm will search for the file /usr/local/etc/rvm.conf, unless
       this behavior is overridden by the use of the --no-default-config
       command line option.  If /usr/local/etc/rvm.conf does not exist then
       rvm will search for files passed to it using the --config and --job
       command line options.  If no configuration files can be found then rvm
       will exit with an error.
       Blank lines and lines that begin with a '#' are ignored.
       A configuration file may include the contents of another file, or a
       configuration file may include the contents of all files that match a
       wildcard filename.  Included files may in turn include more files.
       (Note that reading the contents of included files is done recursively,
       meaning that it is possible for rvm to exceed it's stack size,
       resulting in an error.)
       All configurable settings are listed on a single line in the form of
       keyword-value pairs unless specified otherwise.  Each line begins with
       a case-insensitive keyword followed by a value and a newline character
       '\n'.  White space is ignored except for certain values that may be
       specified using double quotes.  Some configuration commands are
       required to appear in a configuration file, others have default values
       that are assumed.  Some configuration commands may be used multiple
       times, for others, multiple use will override that command's previous
       settings.
       Configuration commands are context-sensitive.  A configuration file
       consists of three sections: a global section, one or more default
       sections, and one or more job sections.  Some configuration commands
       are allowed in any context, while others may only be used in a default
       or job context.
CONFIGURATION COMMANDS USED IN ANY CONTEXT
       These are commands that may appear anywhere in a configuration file in
       any context.
       include path
           Stop reading the current configuration file and read the contents
           of the file path.  When finished, continue reading the current
           file.
           If path is a relative pathname, then it is assumed to be relative
           to the directory of the configuration file in which this command is
           found.  This is in contrast to the --config and --job command line
           options, where a relative pathname is assumed to be relative to the
           directory from which rvm is executed.
           If path contains wildcard characters, then each matching file found
           will be read in alphabetical order.  If no files are found, then
           rvm will exit with an error.  Included files may in turn contain
           commands to include other files.  Multiple uses of this command are
           allowed.  This command is not required, and has no default value.
           When including the contents of another file, rvm behaves as though
           the file included were literally pasted into the current file at
           the current location.  If an included file changes the
           configuration context then the new context remains in effect when
           rvm finishes reading the included file and continues with the
           current file.  This must be taken into account when authoring
           configuration files or at best, an error will occur, and at worst,
           confusing and undesired effects may occur.
GLOBAL CONTEXT CONFIGURATION COMMANDS
       When rvm begins reading the first configuration file it assumes a
       global context until a default or job context is specified.  Global
       commands affect the overall behavior of rvm, such as the method used to
       select vaults, the location of the local rsync binary, or the number of
       jobs to process in parallel.  This is in contrast to default or job
       contexts, where commands affect the behavior of rvm's children as they
       process a particular job.
       <default>...</default>
           Configuration settings in a default context are specified by
           placing those settings inside a default block.  A default block
           begins with the text "<default>" on a line by itself, and ends with
           the text "</default>" on another line by itself.  Lines in between
           are applied to the default settings.  These default settings will
           be assumed by all jobs that follow until another default block is
           encountered.  Commands given in a default block may be overridden
           by commands found within a job block, but this override will not
           affect other jobs that follow.
           The settings used in a default block are only changed by the
           appearance of another default block.  When another default block is
           encountered, all default settings not specified in the new default
           block are reset, settings from previous default blocks do not carry
           over into the new default block.
           This command is not required, and if not used the following values
           are assumed:
             <default>
               archive-path hostname/path
               rsync-behavior * = retry
               rsync-behavior 0 = ok
               rsync-behavior 1 = fail
               rsync-behavior 2 = fail
               rsync-behavior 4 = fail
               rsync-behavior 23 = retry-without-hardlinks
               rsync-behavior 124 = fail
               rsync-behavior 125 = fail
               rsync-behavior 126 = fail
               rsync-behavior 127 = fail
               rsync-connection-type remote
               rsync-hardlink yes
               rsync-retry-count 3
               #
               # 14400 = 60 sec/min * 60 min/hr * 4 = 4 hours
               #
               rsync-timeout 14400
             </default>
           Default values may themselves be reset to rvm's built-in default
           values by specifying an empty default block, like so:
             <default>
             </default>
       include-job path
           Stop reading the current configuration file, assume a job context,
           and read the contents of the file path.  When finished, switch back
           to a global context and continue reading the current configuration
           file.
           This command may be thought of as a one line short cut for the
           following:
             <job>
               include path
             </job>
           If path is a relative pathname, then it is assumed to be relative
           to the directory of the configuration file in which this command
           appears.  This is in contrast to the --job command line option,
           where job-file is assumed to be relative to the location from which
           rvm is executed.
           If path contains wildcard characters, then each matching file found
           will be included in alphabetical order as a separate job.  If no
           matching files are found then rvm will exit with an error.
           Multiple uses of this command will append new jobs to the job list.
       <job>...</job>
           Configuration settings in a job context are specified by placing
           those settings inside a job block.  A job block begins with the
           text "<job>" on a line by itself, and ends with the text "</job>"
           on another line by itself.  When rvm encounters a job block in a
           configuration file a new job is created and appended to the job
           list.  The newly created job will assume default values either from
           rvm or from the last default block encountered.  After default
           values have been assigned then the commands inside the job block
           are read and their settings applied.
       link-catalog-dir path
           If this command is found, then rvm will create a catalog of all
           archives from all vaults in the directory path using relative
           symbolic links.  If path does not exist, then rvm will exit with an
           error.  If path is a relative pathname, then it is assumed to be
           relative to the location from which rvm is executed.
           This command is not required and has no default value.  Multiple
           uses of this command will overwrite any previous value.
           NOTICE: If the archive administrator chooses to export the path
           directory to other hosts, then all vault directories must also be
           exported.  Also, these directories must be mounted on remote
           machines in such a way that will preserve the validity of the
           relative symbolic links in path.
       log-dir path
           Create log files under the directory path.  Rvm will use
           /var/log/rvm if no other setting is found.  Multiple uses of this
           command will overwrite any previous value.  If path is a relative
           pathname, then it is assumed to be relative to the location from
           which rvm is executed.
       delete-old-log-files bool
           Enable or disable deletion of old log files.  If rvm deletes an
           archive to make more space in a vault, then, if delete-old-log-
           files is enabled, rvm will also search for and delete the archive's
           log file from the log directory.
           Valid values for bool are
             "y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or
             "on"|"off"
           This command is not required.  Rvm will use "on" if no other
           setting is found.  Multiple uses of this command will overwrite any
           previous value within the same context.
       delete-old-report-files bool
           Enable or disable deletion of old report files.  If rvm deletes an
           archive to make more space in a vault, then, if delete-old-report-
           files is enabled, rvm will also search for and delete the archive's
           report file from the log directory.
           Valid values for bool are
             "y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or
             "on"|"off"
           This command is not required.  Rvm will use "on" if no other
           setting is found.  Multiple uses of this command will overwrite any
           previous value within the same context.
       logging-level option
           Specify the degree of verbosity used when writing to the log file.
           Valid values for option are:
           manager
             Log only the messages that come from the controlling parent rvm
             process.
           child
             Log messages from the controlling parent and from child rvm
             processes.
           rsync
             Log all messages from rvm and from rsync.
           Rvm will use the default value of "child" if no other setting is
           provided.  Multiple use of this command will overwrite any previous
           value.
       error-logging-level option
           Specify the degree of verbosity used when writing to the log file
           when retrying a failed rsync command.  Valid values are the same as
           for the logging-level command above.
           Rvm will use the default value of "rsync" if no other setting is
           provided.  Multiple use of this command will overwrite any previous
           value.
       rsync-local-path path
           Specify the location of the rsync program on the local host.  The
           value for path should be an absolute pathname.
           At the time that rvm is compiled, if rsync was found in the one of
           the directories specified by the PATH environment variable, then
           that value will be used by default.  Otherwise, if rsync could not
           be found at compile time, and rsync-local-path is not specified,
           rvm will exit with an error.
           Multiple uses of this command will overwrite any previous value.
       rsync-parallel integer
           The number of jobs rvm is to process in parallel.  Rvm will spawn
           up to integer child processes to handle jobs from the job list.
           When one job completes that child will exit and another child
           process will be created to handle the next available job.  If rvm
           encounters an error when attempting to create a child process, then
           rvm will print an error message to the log file and attempt to
           create a new process again at a later time.
           Valid values are any integer greater than 0.  Rvm will assume the
           default value of 1 if no other setting is found.  Multiple uses of
           this command overwrite any previous value.
       delete-command-path path
           Specify the location of the program or script of your choice for
           recursively deleting a directory.  The value for path should be an
           absolute pathname.
           The program or script should not return until deletion completes.
           The program or script is expected to return an exit code of zero on
           success, and non-zero on failure.  If a value for path is not
           specified, then the internal recursive delete function is used.
           Multiple uses of this command will overwrite any previous value.
       io-poll-interval integer
           The number of seconds to sleep between polling for I/O from child
           processes.  Valid values are any positive integer value including
           0.  Rvm will assume the default value of 1 if no other setting is
           found.  Multiple uses of this command overwrite any previous value.
       timestamp-resolution option
           A configuration setting specifying the depth of resolution used in
           creating timestamps.  Valid values for option are:
           year
             Use a four-digit year as the archive timestamp.
             Example: 2003
           month
             Same as year, followed by '-' and a two-digit month.
             Example: 2003-09
           day
             Same as month, followed by '-' and a two-digit day of the month.
             Example: 2003-09-10
           hour
             Same as day, followed by '.' and a two-digit hour in 24-hour
             format.
             Example: 2003-09-10.13
           minute
             Same as hour, followed by a two-digit minute.
             Example: 2003-09-10.1359
           second
             Same as minute, followed by a two-digit second.
             Example: 2003-09-10.135933
           Timestamps are used to generate archive directory names and the
           basename used for log files and report files.  A new timestamp is
           generated each time rvm is executed.  The timestamp resolution
           setting allows the archive administrator to control to what degree
           timestamps are created.  For instance, a timestamp resolution of
           "year" would result in a new archive being created once a year.  If
           rvm is then run a second time within the same year then rvm will
           update the existing archive rather than create a new archive.  At
           the other end of the scale, a timestamp resolution of "second"
           would result in a new archive being created each second (or more
           likely, each time rvm is run, since rvm will probably take longer
           than one second to complete an archive of any significant size).
           The default value used is "day".  Multiple uses of this command
           will overwrite any previous value.
           NOTICE: Care should be taken when modifying this value.  If rvm is
           executed twice with the same timestamp-resolution period, and the
           first instance of rvm has not completed, then that archive may be
           corrupted.
       vault path
           Designate the directory path to use as a vault.  More than one
           vault may exist on the same logical disk partition, although it is
           recommended that vaults exist on separate physical devices, or at
           least on separate logical partitions.  This is for the safety and
           integrity of the archives in the event of disk corruption or
           failure.
           If path is a relative pathname, then it is assumed to be relative
           to the location from which rvm is executed.  If path does not exist
           then rvm will exit with an error.  If path contains wildcard
           characters, then all matching pathnames are used as vaults.  If no
           matching pathnames are found then rvm will exit with an error.
           Once rvm has finished reading all of it's configuration files, if
           no usable vaults exist then rvm will exit with an error.
           Multiple uses of this command will add to the list of vaults.
       vault-overflow-behavior keyword
           Define how rvm should handle a vault that is approaching maximum
           capacity.  Valid values for keyword are:
           quit
             If there is insufficient space available on the selected vault
             then exit with an error.
           delete-oldest
             If there is insufficient space available on the selected vault,
             then delete the oldest archive from the vault and check for
             available space again.  If, after deleting the oldest archive,
             there is still insufficient space, exit with an error.  Only one
             archive deletion is allowed per execution, after that rvm will
             exit with an error if there is insufficient space.
           delete-until-free
             If there is insufficient space available on the selected vault,
             then delete the oldest archive from the vault and check for
             available space again.  If there is still insufficient space in
             the vault, then continue deleting the oldest archive found until
             either sufficient space is available or there are no old archives
             left.  If there is still insufficient space, then exit with an
             error.  Caution should be used by the archive administrator when
             using this setting.
           Rvm will assume a value of quit by default.  Multiple uses of this
           command overwrite any previous value.
           NOTICE: Rvm will check the free space on the selected vault several
           times during execution.  If a child process exits with an error,
           the vault is checked to see if it has exceeded it's overflow
           threshold.  If so, and vault-overflow-behavior is set to either
           "delete-oldest" or "delete-until-free", then rvm will attempt to
           remove the oldest archive in the vault and retry the failed job.
           If, during archival, the size of an archive increases dramatically
           (to 50% of a vault's capacity or more) then the use of "delete-
           oldest" or "delete-until-free" could cause rvm to continually
           delete older archives, which may not be the desired behavior.
       vault-overflow-blocks integer
           Define for rvm a threshold used to decide when a vault has become
           alarmingly close to full capacity.  Rvm is to consider the selected
           vault to have exceeded it's overflow capacity if there is less than
           integer percent of free blocks left on the logical partition in
           which the vault resides.  The value for integer must be between 0
           and 50 inclusively.
           Rvm will use a default value of 15 if no other setting is found.
           Multiple uses of this command will overwrite any previous value.
       vault-overflow-inodes integer
           Define  for rvm a threshold used to decide when a vault has become
           alarmingly close to full capacity.  Rvm is to consider the selected
           vault to have exceeded it's overflow capacity if there is less than
           integer percent of free inodes left on the logical partition in
           which the vault resides.  The value for integer must be between 0
           and 50 inclusively.
           Rvm will use a default value of 15 if no other setting is found.
           Multiple uses of this command will overwrite any previous value.
           NOTICE: Some filesystems do not use inodes, such as FAT formatted
           filesystems used by Windows.  If such a filesystem is used to house
           a vault then the operating system may report that there are 0 free
           inodes available.  For such filesystems it is required that
           vault-overflow-inodes be set to 0 to avoid erroneous filesystem
           overflow errors.
       vault-selection-behavior keyword
           Specify the method by which rvm is to select the next vault from
           the list of available vaults.  Valid values for keyword are:
           max-free
             Determine the amount of free space available on each vault and
             choose the vault with the most free space.  If all vaults are
             equally filled, then fall back to using the round-robin method.
           round-robin
             Determine the last vault used the last time rvm was executed and
             select the next vault from the list of available vaults.  If the
             last vault in the list was the last vault used, then begin again
             with the first vault in the list.
           Rvm will use the default value "round-robin" if no other setting is
           found.  Multiple uses of this command overwrite any previous value.
       vault-locking bool
           Turn on or off vault locking to prevent subsequent instances of rvm
           from using the same vault while this instance of rvm is still
           running.
           If disabled, rvm will not attempt to lock a vault, and rvm will
           ignore any locks created by other instances of rvm.  (Note: This
           could be dangerous.)
           If enabled, then rvm will lock the vault that it's using.
           Subsequent instances of rvm run with vault-locking enabled will
           check to see if a vault is locked when selecting a vault.  The
           behavior of rvm under vault-locking is as follows:
           - If a locked vault contains an archive with the same timestamp as
             the one being used by rvm, then rvm will exit with an error.
           - Otherwise, if a vault is locked, then that vault is ignored
             during the vault selection process, and the next best vault will
             be chosen instead.
           - Otherwise, if all vaults are locked, then rvm will exit with an
             error.
           Valid values for bool are:
             "y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or
             "on"|"off"
           This command is not required.  Rvm will use "on" if no other
           setting is found.  Multiple uses of this command will overwrite any
           previous value within the same context.
DEFAULT CONTEXT CONFIGURATION COMMANDS
       Configuration commands in a default context specify a default behavior
       to be assumed for subsequent archive jobs.  Multiple default contexts
       may be used to set and reset default values.  When multiple default
       contexts are used, all values from the previous default context are
       cleared.  When default settings are reset, all subsequent jobs are
       assigned values from the new default settings, while previous jobs are
       left unaffected.
       archive-path keyword[/keyword...]
           This command specifies how rvm should generate the archive job
           subdirectory under which to store files and directories backed up
           from this archive job.  The complete path to an archive job's files
           follows from the root of the filesystem, down the path of the
           selected vault, into the archive subdirectory, and then down this
           user-specific path.
           The value for this command consists of one or more options
           separated by a directory slash character with no whitespaces
           allowed in between.  Valid values for keyword are:
           jobname
             The name assigned to this job.
           groupname
             The group name assigned to this job.
           hostname
             The remote machine's host name.
           pathname
             The path currently being archived.  Each job may specify multiple
             paths, therefore the value of archive-path must be calculated for
             each path listed in a job.
           permutation
             A permutation of the path currently being archived.  The
             permutation process removes any preceding or trailing slashes,
             and changes all intermediate slashes in the path name to dashes.
             An example permutation of the path "/var/spool/cron/crontabs"
             would be "var-spool-cron-crontabs".
           (literal)
             A literal string may be used by surrounding the string with
             double quotes.  Directory slash characters are not allowed within
             the string, and double quotes within the string must be escaped
             by preceding them with a '\' character.  An example could be:
             archive-path groupname/"Samba-Mounted-Hosts"/permutation
           Rvm will use the default value "hostname/pathname" if no other
           setting is found.  Multiple uses of this command will overwrite any
           previous values within the same context.
           NOTICE: Great care should be taken when using this command, as
           incorrect settings could result in a corrupted archive.  Consider
           the following configuration:
             vault /export/vault1
             <default>
               archive-path groupname
             </default>
             <job>
               groupname cartoon
               hostname ren
               path /var/spool/cron/crontabs
             </job>
             <job>
               groupname cartoon
               hostname stimpy
               path /var/spool/cron/crontabs
             </job>
           For the above configuration, files from the host
           ren:/var/spool/cron/crontabs and files from the host
           stimpy:/var/spool/cron/crontabs are both placed in the directory
           /export/vault1/timestamp/cartoon/.  If both ren and stimpy contain
           crontabs for root, then root's crontab file from stimpy will
           overwrite root's crontab file from ren, resulting in a corrupted
           archive.
       clear keyword
           Erase a previous default value for a specific configuration
           setting.  This override does not change default settings nor affect
           subsequent jobs, only the current job is affected.  Valid values
           for keyword are:
           archive-path
             Clear the default archive-path value.
           exclude-from
             Clear the list of files in the exclude list.
           groupname
             Clear the default groupname.
           hostname
             Clear the default hostname.
           include-from
             Clear the list of files in the include list.
           jobname
             Clear the job name.
           paths
             Clear the list of paths to be archived.
           rsync-behavior
             Clear the rsync behavior table.
           rsync-options
             Clear the list of options to pass to the rsync binary.
           ssh-options
             Clear the list of options to pass to the ssh binary.
           rsync-remote-user
             Clear the username to pass to rsync to use when connecting to a
             remote machine.
           rsync-remote-port
             Clear the port number to pass to rsync to use when connecting to
             a remote machine.
           rsync-remote-path
             Clear the pathname of rsync on the remote machine.
           rsync-remote-path
             Clear the module name used when starting an rsync server on a
             remote machine over a shell connection.
           This command can be used to override default values either set by
           rvm or set in the last default context.
       exclude-from path
           Specify a file to pass to the rsync program using the --exclude-
           from command line option.  The rsync man page should be consulted
           on the syntax and usage of this file.  When rvm constructs the
           command line to pass to rsync, files listed in the exclude-from
           list are passed before files listed in the include-from list.
           If path is a relative pathname, then it is assumed to be relative
           to the directory of the configuration file in which this command
           appears.  If path contains wildcard characters, then all matching
           files will be passed to rsync in alphabetical order, each using a
           separate --exclude-from command line option.  If no matching files
           are found then rvm will exit with an error.
           Multiple uses of this command will generate a list of pathnames
           within the current context, all of which will be passed to rsync,
           each on a separate --exclude-from command line option.
       groupname name
           This configuration setting assigns a group name to a job.  The
           value of name may be any string of valid filename characters except
           a directory slash.
           This command is only required if the "groupname" keyword is used by
           archive-path.
           Multiple uses of this command will overwrite any previous values
           within the same context.
       hostname name
           Assign a hostname to a job.  If rsync must connect to a remote host
           for this job, then it will connect to name.
           This command is only required if:
             - This job either must connect to a remote host via RSH or SSH,
               or to an rsync server, as specified by the
               rsync-connection-type command.
             - The "hostname" keyword is used by archive-path (which it is by
               default).
           Multiple uses of this command will overwrite any previous value
           within the same context.
       include-from path
           Specify a file to pass to the rsync program using the --include-
           from command line option.  The rsync man page should be consulted
           on the syntax and usage of this file.  When rvm constructs the
           command line to pass to rsync, files listed in the exclude-from
           list are passed before files listed in the include-from list.
           If path is a relative pathname, then it is assumed to be relative
           to the directory of the configuration file in which this command
           appears.  If path contains wildcard characters, then all matching
           files will be passed to rsync in alphabetical order, each using a
           separate --include-from command line option.  If no matching files
           are found then rvm will exit with an error.
           Multiple uses of this command will generate a list of pathnames
           within the current context, all of which will be passed to rsync,
           each on a separate --include-from command line option.
       path path
           Assign a file or directory to be archived in a job.
           This command is required to appear at least once, either in a job
           context or in a previous default context.
           This command has no default value.  Multiple uses of this command
           will append to a list of pathnames to be archived.
           NOTICE: When archiving an entire directory tree, a trailing '/'
           must appear at the end of path, and the -r option must be passed to
           rsync via the rsync-options command.
       rsync-behavior exit-code = action
           If an rsync command returns a non-zero exit code, rvm may retry the
           command up to the number of times specified by the
           rsync-retry-count configuration setting.  Rvm may also be directed
           to modify it's command line for rsync, or to take some specific
           action, depending on the exit code returned.  This command is used
           to specify how rvm should handle different exit codes that may be
           returned by rsync.  Valid values for exit-code may be an integer
           value between 0 and 255 inclusively.  The asterisk character, '*',
           may also be used as a wildcard to mean any exit code not specified
           by any other rsync-behavior command.  When the given exit code is
           encountered the associated action is taken.  Valid values for
           action are:
           ok
             Ignore the error code returned by rsync and pretend rsync exited
             successfully.
           fail
             Give up immediately without attempting to retry the rsync
             command.  (See rsync-retry-count.) This is most useful for exit
             codes from which retrying will not yield better results.  For
             example, if the current job is configured to connect to a remote
             host using SSH, and SSH is reporting that rsync cannot be found
             on the remote host.
           retry
             Try the rsync command again exactly as before.  Useful for
             overcoming intermittent connectivity problems.
           retry-without-hardlinks
             Try the rsync command again, except this time disable the option
             that allows rsync to create hardlinks for files that have not
             changed from previous archives.  (This is useful in situations
             where the older archive chosen as the hardlink source contains
             corrupted file modes.)
           A complete list of known rsync exit codes are, as found in
           errcode.h of the rsync source tree:
             0   Success
             1   Syntax or usage error
             2   Protocol incompatibility error
             3   Errors selecting I/O files or directories
             4   Requested action not supported
             5   Error starting client-server protocol
             10  Error in socket I/O
             11  Error in file I/O
             12  Error in rsync protocol data stream
             13  Errors with program diagnostics
             14  Error in IPC code
             20  Status returned when sent SIGUSR1, SIGINT
             21  Some error returned by waitpid()
             22  Error allocating core memory buffers
             23  Partial transfer
             24  Some files vanished before they could be transferred
             25  The --max-delete limit stopped deletions
             30  Timeout in data send/receive
             124 The command executed by SSH exited with status 255
             125 The command executed by SSH was killed by a signal
             126 The command given to SSH cannot be run
             127 The command given to SSH cannot be found
           Multiple instances of this directive may be used to specify
           different actions for different exit codes.
           Rvm will use the following settings if no other settings are found:
             rsync-behavior        * = retry
             rsync-behavior        0 = ok
             rsync-behavior        1 = fail
             rsync-behavior        2 = fail
             rsync-behavior        4 = fail
             rsync-behavior        23 = retry-without-hardlinks
             rsync-behavior        124 = fail
             rsync-behavior        125 = fail
             rsync-behavior        126 = fail
             rsync-behavior        127 = fail
           Multiple uses of this command will overwrite any previous value for
           the same exit-code within the same context.
       rsync-connection-type keyword
           There are four ways of using rsync to update files.  One method is
           to use rsync in a local mode, where files and directories in one
           location on the local host are updated by comparing them to files
           and directories in another location also on the local host.  This
           method may be used to archive files mounted on the local machine,
           either from a physical device, an NFS mount, or a Samba mount.  The
           second method of using rsync is to connect to a remote host via RSH
           or SSH.  The third method is to use rsync to connect to an rsync
           server.  This command changes the way that rvm will use rsync when
           processing an archive job.  Lastly, the fourth method, remote-
           rsync-local-dir, uses ssh to log into the remote host and then run
           rsync to back up to a locally-mounted directory.  This last option
           is useful for storage clusters that mount directly to the client.
           Valid values for keyword are:
           local
             Use rsync in local mode to archive files from a source that is
             mounted on the local machine.
           remote
             Use rsync to archive files from a remote host using RSH or SSH.
           server
             Use rsync to archive files from a remote host running an rsync
             server.
           remote-rsync-local-dir
             Use ssh to connect to the remote host, and then run rsync with a
             locally-mounted destination directory.
           Rvm will use the default value of "remote" if no other setting is
           found.
           Multiple uses of this command will overwrite any previous value
           within the same context.
       rsync-hardlink bool
           Turn on or off the ability to hardlink unchanged files from an
           older archive.
           Valid values for bool are:
             "y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or
             "on"|"off"
           This command is not required.  Rvm will use "on" if no other
           setting is found.  Multiple uses of this command will overwrite any
           previous value within the same context.
       rsync-multi-hardlink bool
           Turn on or off the use of multiple hardlink sources (supported by
           rsync version 2.6.4 and newer).  Turning this option on also
           implies turning on rsync-hardlink.
           Valid values for bool are:
             "y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or
             "on"|"off"
           This command is not required.  Rvm will use "off" if no other
           setting is found.  Multiple uses of this command will overwrite any
           previous value within the same context.
       rsync-multi-hardlink-max integer
           The maximum number of hardlink sources to pass to rsync.  At the
           time of this writing rsync will support up to 20 hardlink sources.
           Valid values are any integer greater than 0.  Rvm will assume a
           default value of 20 if no other setting is found.  Multiple uses of
           this command overwrite any previous value.
       rsync-options options
           Define the command line options that rvm is to pass to rsync.
           Command line options listed here should not include --rsync-path,
           --hard-links, --link-dest, --exclude-from, --include-from, or the
           local and remote host or path.  These options are added by rvm
           automatically when generating the complete command line to pass to
           rsync.
           Use of this command may result in a long line, depending on the
           number of options that the archive administrator wishes to pass to
           rsync.  For greater readability and flexibility there is a second
           way of specifying options to pass to rsync.  See the
           <rsync-options> block command below.
           When rvm parses this line to pass it to rsync, each of the options
           listed will be parsed into separate strings.  If one of your
           options requires whitespace (for instance, if you are backing up a
           directory named My Music/, then you can escape the whitespace in
           the pathname by entering it as My\ Music.  Escapes work with spaces
           and tabs, characters which are both otherwise considered delimiters
           separating options.
           This command is not required.  This command has no default value.
           Multiple uses of this command append to any previously defined
           values, including any value previously set by an <rsync-options>
           block command.
       ssh-options options
           Define the command line options that rvm is to pass to ssh.
           Inclusion of the option 'BatchMode=yes' is automatic.  This option
           only affects remote-rsync-local-dir rsync connection types.
           <rsync-options> ... </rsync-options>
               Options to pass to the rsync program may be specified by
               placing those options inside an rsync-options block.  An rsync-
               options block begins with the text "<rsync-options>" on a line
               by itself, and ends with the text "</rsync-options>" on another
               line by itself.  Lines in between are considered to be literal
               text to pass to the rsync program, with the following
               exceptions: Blank lines and lines beginning with a '#' are
               ignored.
               This form of passing options to rsync allows the archive
               administrator to break what could be one long line into
               multiple lines for greater readability.  (It also allows easy
               addition or removal of options by simply commenting or
               uncommenting a line.)
               When rvm parses these lines to pass them to rsync, each of the
               options listed will be parsed into separate strings.  If one of
               your options requires whitespace (for instance, if you are
               backing up a directory named My Music/, then you can escape the
               whitespace in the pathname by entering it as My\ Music.
               Escapes work with spaces and tabs, characters which are both
               otherwise considered delimiters separating options.
               This command is not required.  This command has no default
               value.  Multiple uses of this command overwrite any previous
               value within the same context, including any value previously
               set by the rsync-options command.
           <ssh-options> ... </ssh-options>
               Options to pass to the ssh program may be specified by placing
               those options inside an ssh-options block.  An ssh-options
               block begins with the text "<ssh-options>" on a line by itself,
               and ends with the text "</ssh-options>" on another line by
               itself.  Lines in between are considered to be literal text to
               pass to the ssh program, with the following exceptions:  Blank
               lines and lines beginning with a '#' are ignored.
               THis form of passing options to ssh allows the archive
               adminsitrator to break what could be one long line into multple
               lines for greater readability.  (It also allows easy addition
               or removal of options by simple commenting or uncommenting a
               line.)
               When rvm parses these lines to pass them to ssh, each of the
               options listed will be parsed into separate strings.  If one of
               your options requires white space then you can escape the
               whitespace by prefixing a leading '\'.  Escapes work with
               spaces and tabs, characters which are both otherwise considered
               delimiters separating options.
               This command is not required.  This command has no default
               value.  Multiple uses of this command overwrite any previous
               value within the same context, including any value previously
               set by the ssh-options command.
           rsync-remote-path path
               Specify the location of the rsync program on a remote host for
               a particular job.  This value is only necessary for remote
               connections via RSH or SSH.  It is not needed for local sources
               or connections to an rsync server.  The value for path should
               be an absolute pathname.
               This command is not required.  Rvm will use the same value
               specified for rsync-local-path if no other setting is found.
               Multiple uses of this command overwrite any previous value
               within the same context.
           rsync-remote-module module-name
               Specify the module name to use when connecting to an rsync
               server on a remote host or over an SSH or RSH shell connection.
               When using this option, set rsync-connection-type to server and
               set the appropriate --rsh=shell-options rsync command line
               option in the rsync-options command.
                 rsync-connection-type server
                 rsync-options -av --rsh-"/usr/bin/ssh -l ssh-user"
                 rsync-remote-module ftp
               See the rsync and rsyncd.conf man pages for more information on
               modules.
           rsync-remote-user username
               Define the user name to use when connecting to a remote host
               using either RSH, SSH, or an rsync server.
               This command is not required.  This command has no default
               value.  Multiple uses of this command overwrite any previous
               value within the same context.
           rsync-remote-port integer
               Define the port number to connect to when using rsync to
               connect to a remote host via RSH, SSH, or an rsync server.
               This command is not required.  This command has no default
               value.  Multiple uses of this command overwrite any previous
               value within the same context.
           rsync-retry-count integer
               The number of times rvm is to retry a failed rsync command.
               This setting is used in conjunction with the rsync-behavior
               setting to determine how to handle a failed rsync command based
               on it's exit code.
               Rvm will use the default value of 3 if no other setting is
               found.  Multiple uses of this command will overwrite any
               previous value within the same context.
           rsync-retry-delay integer
               The number of minutes to delay after a failed rsync command
               before retrying.  Rvm will use the default value of 0 if no
               other setting is found.  Multiple uses of this command will
               overwrite any previous value within the same context.
           rsync-timeout seconds
               Instruct the rvm child processing the current job to wait
               seconds seconds before assuming that rsync has hung.  If there
               is no I/O from rsync after seconds seconds, rvm will kill rsync
               and try again (up to rsync-retry-count times).
JOB CONTEXT CONFIGURATION COMMANDS
       Configuration commands in a job context specify how to archive files
       and directories from a single source, where a source is either a set of
       files and directories mounted locally, a set of files and directories
       on a remote host, or a set of files and directories hosted on an rsync
       server.  Each job will assume a set of default values, either from rvm
       or from the last default block.
       All of the commands listed above for a default context also apply to a
       job context, with the addition of the following commands:
       jobname string
           Assign a name to this job.
           Use of this command is required only if the "jobname" keyword is
           used in the archive-path command.
           Multiple uses of this command will overwrite any previous value.
EXAMPLE CONFIGURATION FILE
       An example configuration file might look like the following:
         #
         # RVM Manager Configuration
         #
         # - Commands outside of a <default> block or
         #   a <job> block are assumed to be of a global
         #   context.
         #
         #
         # After all archive jobs have been completed,
         # create relative symbolic links here.
         #
         # We will arrange to export this directory and
         # all vault directories via NFS so that users
         # can cd into the catalog and select an archive
         # by it's timestamp, then peruse their files
         # for what they're looking for.
         #
         link-catalog-dir /export/archive/catalog
         #
         # Create log files under this directory.
         #
         log-dir /var/log/rvm
         #
         # The location of the rsync program on this
         # machine.  This path must not contain
         # wildcard characters, and should be an
         # absolute path.
         #
         rsync-local-path /usr/local/bin/rsync
         #
         # How many archive jobs to process in parallel.
         #
         rsync-parallel 5
         #
         # How often to poll children for a change in I/O state.
         #
         io-poll-interval 5
         #
         # The resolution of timestamp we want.
         #
         timestamp-resolution day
         #
         # Where are the vaults?  Notice that wildcard
         # characters are allowed here:
         #
         vault /export/archive/raid/*/daily-archives
         #
         # How to select the next vault to use:
         #
         vault-selection-behavior round-robin
         #
         # What do we do when the vault gets too close
         # to full capacity?
         #
         vault-overflow-behavior delete-until-free
         #
         # What percentage of blocks and inodes must be
         # free before we declare the vault too full to
         # continue archiving?
         #
         vault-overflow-blocks 10
         vault-overflow-inodes 10
         #
         # Set up some default values to be assumed by
         # all jobs read below:
         #
         <default>
              archive-path hostname/pathname
              exclude-from /etc/rvm/excludes/*
              #
              # Some default paths to back up on all hosts.
              #
              # Notice that wildcard characters are not
              # allowed here.
              #
              # Files will be stored under:
              # /<vault>/<archive>/<hostname>/var/spool/...
              # /<vault>/<archive>/<hostname>/export/...
              #
              path /var/spool
              path /export
              #
              # Define how rvm is to handle non-zero exit
              # codes from rsync.  The values below happen to
              # be the same values that are assumed by rvm by
              # default, but they're listed here for the sake
              # of example:
              #
              rsync-behavior * = retry
              rsync-behavior 1 = fail
              rsync-behavior 2 = fail
              rsync-behavior 4 = fail
              rsync-behavior 23 = retry-without-hardlinks
              rsync-behavior 124 = fail
              rsync-behavior 125 = fail
              rsync-behavior 126 = fail
              rsync-behavior 127 = fail
              rsync-connection-type remote
              #
              # What options should be pass to rsync?
              #
              <rsync-options>
                   -a
                   -e "/usr/bin/ssh -l root"
                   -v
                   --checksum
                   --delete
                   --delete-excluded
                   --force
                   --ignore-errors
                   --one-file-system
                   --stats
                   --progress
              </rsync-options>
              rsync-retry-count 5
         </default>
         #
         # Archive Job 1: Back up alces
         #
         <job>
              hostname alces
              #
              # In addition to /var/spool and /export, also
              # back up the following:
              #
              # Files will be stored under:
              # /<vault>/<archive>/<hostname>/export/home/a/...
              # /<vault>/<archive>/<hostname>/export/home/b/...
              # /<vault>/<archive>/<hostname>/export/home/c/...
              # /<vault>/<archive>/<hostname>/export/home/d/...
              # /<vault>/<archive>/<hostname>/export/home/e/...
              #
              path /export/home/a
              path /export/home/b
              path /export/home/c
              path /export/home/d
              path /export/home/e
         </job>
         #
         # Archive Job 2: Back up fragaria
         #
         <job>
              hostname fragaria
              path /export/home/a
              path /export/home/b
         </job>
         #
         # Set some new defaults for samba-mounted
         # directories under /k-boxes.
         #
         <default>
              #
              # The following must be re-defined because
              # each default block completely clears all
              # values defined in the last default block:
              #
              exclude-from /etc/rvm/excludes/*
              #
              # (Good thing these are actually the default
              # settings for rsync-behavior.  It would be a
              # pain to have to enter it over and over
              # again...  But then, you could always place
              # these commands in a separate file and
              # "include" them.)
              #
              rsync-behavior * = retry
              rsync-behavior 1 = fail
              rsync-behavior 2 = fail
              rsync-behavior 4 = fail
              rsync-behavior 23 = retry-without-hardlinks
              rsync-behavior 124 = fail
              rsync-behavior 125 = fail
              rsync-behavior 126 = fail
              rsync-behavior 127 = fail
              rsync-retry-count 5
              #
              # These settings do change, however:
              #
              archive-path group/name/"files"
              groupname k-boxes
              rsync-connection-type local
              <rsync-options>
                   -a
                   -v
                   --checksum
                   --delete
                   --delete-excluded
                   --force
                   --ignore-errors
                   --one-file-system
                   --stats
                   --progress
              </rsync-options>
         </default>
         #
         # Back up files from David's machine
         #
         <job>
              # Files will be stored under:
              # /<vault>/<archive>/<group>/<name>/files/...
              # ...or, to be more specific:
              # /<vault>/<archive>/k-boxes/david/files/...
              jobname david
              path /k-boxes/david/files
         </job>
         #
         # Back up files from Joe's machine
         #
         <job>
              # Files will be stored under:
              # /<vault>/<archive>/<group>/<name>/files/...
              # ...or, to be more specific:
              # /<vault>/<archive>/k-boxes/joe/files/...
              jobname joe
              path /k-boxes/joe/files
         </job>
         #
         # The End
         #
CONFIGURATION FILE SYNTAX
   Syntax Notation:
       Everyone seems to have their own form of EBNF notation to express a
       language syntax, therefore I define my own here:
       - A syntactic part is written as an identifier surrounded by '<' and
         '>'.
       - A syntactic assignment is written as a syntactic part, followed by
         the symbol "::=", followed by one or more syntactic parts that may be
         joined in various ways.  For a simple example:
             <foo> ::= <bar>
       - Literal text is specified by wrapping the text in double quotes.  If
         the literal text contains special characters such as tab, newline, or
         the double quote character, they will appear using a C-style escape
         format using the '\' character.  Literal characters are wrapped in
         single quotes and use the same C-style escape format for special
         characters and the single quote character itself.  For example:
             <a> ::= 'a'
             <text> ::= "Hello World"
             <response> ::= "Tell him I said, \"Go away.\""
             <newline> ::= '\n'
       - A range of literal characters may be specified separating two literal
         characters with a '-' character, with no whitespace in between.  For
         example:
             <digit> ::= '0'-'9'
       - Syntactic parts may be concatenated together in an unordered form by
         separating two or more syntactic parts with whitespace.  For example:
         The following:
             <foobar> ::= <foo> <bar>
         will match either <foo><bar> or <bar><foo>.
       - Syntactic parts may be concatenated together in a specific order by
         separating two or more syntactic parts with a '+' character.
         Whitespace is allowed between syntactic parts, but not the newline or
         carriage return characters.  For example:
             <foobar> ::= <foo> + <bar>
       - A choice between two or more syntactic parts may be defined by
         separating the choices with the '|' character.  For example:
             <right-or-wrong> ::= <right> | <wrong>
       - Syntactic parts may contain subparts that are treated as a single
         entity by surrounding syntactic parts with '(' and ')'.  For example:
         The following:
             <foobarelem> ::= <elem> (<foo> <bar>) <elem>
         is equivalent to:
             <foobar> ::= <foo> <bar>
             <foobarelem> ::= <elem> <foobar> <elem>
       - Optional syntactic parts are written by enclosing the syntactic part
         in '[' and ']'.  For example:
             <all-options> ::= [<option1>] [<option2>] [<option3>]
             <a-foo-or-bar-b> ::= "a" [ "foo" | "bar" ] "b"
       - Syntactic parts may be concatenated together with no whitespace
         allowed between parts by separating the syntactic parts with the "<+"
         symbol.  For example:
         A string with no whitespaces allowed:
             <alpha> ::= 'a'-'z'
             <no-ws-string> ::= <alpha> | <alpha> <+ <no-ws-string>
       - Syntactic parts may be replicated using the format
         min*max<syntactic-part>, where min and max are optional.  For
         example:
         a) A number consisting of 1 to three digits may be written as:
             <number> ::= 1*3<digit>
         b) A number consisting of at least one digit:
             <number> ::= 1*<digit>
         c) A double-quotes string consisting of zero to three characters:
             <alpha> ::= 'a'-'z' | 'A' - 'Z'
             <string> ::= '"' <+ *3<alpha> <+ '"'
       - A specific number of replicates of a syntactic part may be specified
         using a variant of min*max<syntactic-part> written as
         num*<syntactic-part>.  For example:
         The following:
             <3-digit-number> ::= 3*3<digit>
         is the same as:
             <3-digit-number> ::= 3<digit>
   RVM Configuration Syntax
       <RVMConfigurationFile> ::=
                 <Global>
               + 1*(*<DefaultBlock> *<JobBlock>)
       <ArchivePathKeyword> ::=
                 "jobname"
               | "groupname"
               | "hostname"
               | "path"
               | "permutation"
               | ( "\"" <+ <FilenameString> <+ "\"" )
       <ArchivePathSpecs> ::=
                  <ArchivePathKeyword>
               <+ [ "/" <+ <ArchivePathKeyword> ]
       <ArchivePath> ::=
                 "archive-path"
               + ( "empty" | <ArchivePathSpecs> ) + '\n'
       <BoolString> ::=
                 "y" | "n"
               | "yes" | "no"
               | "t" | "f"
               | "true" | "false"
               | "1" | "0"
               | "on" | "off"
       <Clear> ::=
                 "archive-path\n"
               | "exclude-from\n"
               | "groupname\n"
               | "hostname\n"
               | "include-from\n"
               | "jobname\n"
               | "paths\n"
               | "rsync-behavior\n"
               | "rsync-options\n"
               | "rsync-remote-user\n"
               | "rsync-remote-path\n"
               | "rsync-remote-module\n"
       <DefaultBlock> ::=
               <GenericBlock> *[<Path>]
       <Default> ::=
                 "<default>\n"
               + <DefaultBlock>
               + "</default>\n"
       <ExcludeFile> ::=
               "exclude-from" + <WildcardPathString> + '\n'
       <FilenameString> ::=
               <Any valid file or directory name>
       <GenericBlock> ::=
                 [<Group>]
                 [<Host>]
                *[<IncludeFile>]
                 [<ArchivePath>]
                 [<Clear>]
                *[<ExcludeFile>]
               1*<Path>
                *[<RsyncBehavior>]
                 [<RsyncConnectionType>]
                 [<RsyncHardlink>]
                 [<RsyncOptions>]
                 [<RsyncRemotePath>]
                 [<RsyncRemoteUser>]
                 [<RsyncRemotePort>]
                 [<RsyncRetryCount>]
                 [<RsyncTimeout>]
       <Global> ::=
               0*1<LinkDir>
               0*1<LogDir>
               0*1<DeleteOldLogFiles>
               0*1<DeleteOldReportFiles>
               0*1<LoggingLevel>
               0*1<ErrorLoggingLevel>
                 *<Include>
                 1<RsyncLocalPath>
                  [<RsyncParallel>]
                  [<IOPollInterval>]
                  [<TimestampResolution>]
                1*<Vault>
                  [<VaultOverflowBehavior>]
                  [<VaultOverflowBlocks>]
                  [<VaultOverflowInodes>]
                  [<VaultSelectionBehavior>]
       <Group> ::=
               "groupname" + <String> + '\n'
       <Host> ::=
               "hostname" + <String> + '\n'
       <IncludeFile> ::=
               "include-from" + <WildcardPathString> + '\n'
       <IncludeJob> ::=
               "include-job" + <WildcardPathString> + '\n'
       <Integer> ::=
               <Any non-negative integer value>
       <Integer-50> ::=
               <Any integer value from 0 to 50 inclusive>
       <Integer-255> ::=
               <Any integer value from 0 to 255 inclusive>
       <Job> ::=
               "<job>\n" + <JobBlock> + "</job>\n"
       <JobBlock> ::=
               [<Name>] + <GenericBlock> + 1*<Path>
       <Name> ::=
               "name" + <String> + '\n'
       <LinkCatalogDir> ::=
               "link-catalog-dir" + <PathString> + '\n'
       <LogDir> ::=
               "log-dir" + <PathString> + '\n'
       <DeleteOldLogFiles> ::=
               "delete-old-log-files" + <BoolString> + '\n'
       <DeleteOldReportFiles> ::=
               "delete-old-report-files" + <BoolString> + '\n'
       <LoggingLevel> ::=
               "logging-level" + <LoggingLevelOption> + '\n'
       <ErrorLoggingLevel> ::=
               "error-logging-level" + <LoggingLevelOptions> + '\n'
       <LoggingLevelOption> ::=
                 "manager"
               | "child"
               | "rsync"
       <Path> ::=
               "path" + <PathString> + '\n'
       <PathString> ::=
               <FilenameString> + [ "/" + <PathString> ]
       <RsyncBehavior> ::=
                 "rsync-behavior"
               + ( "*" | <Integer-255> )
               + "="
               + ( "ok" | "retry" | "fail" | "retry-without-hardlinks" )
               + '\n'
       <RsyncConnectionType> ::=
                 "rsync-connection-type"
               + ( "local" | "remote" | "server" )
               + '\n'
       <RsyncHardlink> ::=
               "rsync-hardlink" + <BoolString> + '\n'
       <RsyncLocalPath> ::=
               "rsync-local-path" + <PathString> + '\n'
       <RsyncOptions> ::=
                 ( "rsync-options" + <String> + '\n' )
               | ( "<rsync-options>\n"
                 + <RsyncOptionBlock>
                 + "</rsync-options>\n"
                 )
       <RsyncParallel> ::=
               "rsync-parallel" + <Integer> + '\n'
       <IOPollInterval> ::=
               "io-poll-interval" + <Integer> + '\n'
       <RsyncRemotePath> ::=
               "rsync-remote-path" + <PathString> + '\n'
       <RsyncRemoteModule> ::=
               "rsync-remote-module" + <String> + '\n'
       <RsyncRemoteUser> ::=
               "rsync-remote-user" + <String> + '\n'
       <RsyncRemotePort> ::=
               "rsync-remote-port" + <Integer> + '\n'
       <RsyncRetryCount> ::=
               "rsync-retry-count" + <Integer> + '\n'
       <RsyncTimeout> ::=
               "rsync-timeout" + <Integer> + '\n'
       <String> ::=
                 "\""
               + <Any number of characters, using C-style escapes>
               + "\""
       <TimestampResolution> ::=
                 "timestamp-resolution"
               + ( "year"
                 | "month"
                 | "day"
                 | "hour"
                 | "minute"
                 | "second"
                 )
               + '\n'
       <Vault> ::=
               "vault" + <WildcardPathString> + '\n'
       <VaultOverflowBehavior> ::=
                 "vault-overflow-behavior" + ( "quit"
                 | "delete-oldest"
                 | "delete-until-free"
                 )
               + '\n'
       <VaultOverflowBlocks> ::=
               "vault-overflow-blocks" + <Integer-50> + '\n'
       <VaultOverflowInodes> ::=
               "vault-overflow-inodes" + <Integer-50> + '\n'
       <VaultSelectionBehavior> ::=
                 "vault-selection-behavior"
               + ( "max-free" | "round-robin" )
               + '\n'
       <WildcardFilenameString> ::=
               <Any valid file or directory name, including wildcard
               characters>
       <WildcardPathString> ::=
                  <WildcardFilenameString>
               <+ [ "/" <+ <WildcardPathString> ]
FILES
       /usr/local/etc/rvm.conf
               The default configuration file.  Rvm will search for this
               configuration file first unless the --no-default-config command
               line option is used.
       /var/log/rvm
               The default log directory.  Rvm will create log files under
               this directory.  This may be modified with the log-dir
               configuration command.
       Vaults
               One or more directories must be specified in the configuration
               file(s) as a vault under which to create archives.  See the
               vault configuration command for more information.
       link-catalog-dir
               An optional directory under which rvm will create relative
               links to all archives on all vaults.  See the link-catalog-dir
               configuration command for more information.
SEE ALSO
       rsync(1), rsyncd.conf(5), SSH(1)
BUGS
       This version of rvm is still in beta testing.  The interfaces and
       infrastructure is considered to be completed, although additions and
       alterations may be made, and bugs may yet to be found and resolved.
       Bug reports and feature requests may be sent to the author.  Due to the
       author's lack of time, the reports that will be given the most
       attention are the ones accompanied by a patch file.
       The author welcomes all patch submissions.
DISCLAIMER
       Rvm is given to the public as-is with no guarantee of it's
       functionality, either expressed or implied, and the author takes no
       responsibility for damages that may result from it's use or misuse.
AUTHOR
       Rvm was written by Michael Peek.  See the RVM home page for author
       contact information.
       Occasionally the author fancies that he knows what he is doing.  It is
       at these times more than at any other that his coworkers should cower
       in fear.
DISTRIBUTION
       The latest version of rvm may always be found at:
         http://rvm.sourceforge.net
         http://freshmeat.net/projects/rvm
LOG FILE TRICKS
       Here are some quick one-liners that you might find useful:
       tail -f *.log* | awk '/STATUS REPORT:/,/> $/ {print}'
       cat <timestamp>.log | grep 'Spawning child process' | cut -c32-44 |
       while read jobid; do cat <timestamp>.log | grep $jobid | gvim -Rn - ;
       done
                               02 December 2003                         RVM(1)