rdist(TC)
rdist --
remote file distribution client program
Syntax
rdist [ -DFn ] [ -A num ]
[ -a num ]
[ -d var=value ]
[ -l local_logopts ]
[ -L remote_logopts ] [ -f distfile ]
[ -M maxproc ] [ -m host ]
[ -o distopts ] [ -t timeout ]
[ name ... ]
rdist -DFn -c name ...
[login@]host[ :dest]
rdist -Server
rdist -V
Description
rdist is a program to maintain identical copies
of files over multiple hosts. It preserves the owner,
group, mode, and mtime of files if possible and can update
programs that are executing. rdist reads
commands from distfile to direct the updating of
files and/or directories. If distfile is
``-'', the standard input is used. If no
-f option is present, the program looks first
for ``distfile'', then ``Distfile'' to use as the input.
If no names are specified on the command line,
rdist will update all of the files and
directories listed in distfile. Otherwise, the
argument is taken to be the name of a file to be updated or
the label of a command to execute. If label and file names
conflict, it is assumed to be a label. These may be used
together to update specific files using specific commands.
The -c option forces rdist to
interpret the remaining arguments as a small
distfile. The equivalent distfile is as
follows.
( name ... ) -> [login @ ]host
install [dest] ;
The -Server option is recognized to provide
partial backward compatible support for older versions of
rdist which used this option to put
rdist into server mode. If rdist is
started with the -Server command line option, it
will attempt to exec (run) the old version of
rdist. This option will only work if
rdist was compiled with the location of the old
rdist (usually /usr/bin/ordist) and
that program is available at run time.
rdist uses the
rcmd(SLIB)
interface to access each target host. rdist will
attempt to run the command
rdistd -S
on each target host. rdist does not specify the
absolute pathname to rdistd on the target host in
order to avoid imposing any policy on where
rdistd must be installed on target host.
Therefore, rdistd must be somewhere in the
$PATH of the user running rdist on the
remote (target) host.
NOTE: If the basename of a file (the last
component in the pathname) is ``.'', then
rdist assumes the remote (destination) name is a
directory. For example: ``/tmp/.'' means that
/tmp should be a directory on the remote host.
Options
-A num-
set the minimum number of free files (inodes) on a
filesystem that must exist for rdist to update or
install a file
-a num-
set the minimum amount of free space (in bytes) on a
filesystem that must exist for rdist to update or
install a file
-D-
enable copious debugging messages
-d var=value-
define var to have value. This option
is used to define or override variable definitions in the
distfile. value can be the empty
string, one name, or a list of names surrounded by
parentheses and separated by tabs and/or spaces.
-F-
do not fork any child
rdist
processes.
All clients are updated sequentially.
-f distfile-
set the name of the distfile to use to be
distfile. If distfile is specified as dash
(-) then read from standard input (stdin).
-l logopts-
set local logging options; see the section ``Message
logging'' for details on the syntax for logopts.
-L logopts-
set remote logging options. logopts is the same
as for local logging except the values are passed to the
remote server (rdistd). See the section
``Message logging" for details on the syntax for
logopts.
-M num-
set the maximum number of simultaneously running child
rdist processes to num. The default is 4.
-m machine-
limit which machines are to be updated. Multiple
-m arguments can be given to limit updates to a
subset of the hosts listed in the distfile.
-n-
print the commands without executing them. This option is
useful for debugging distfile.
-odistopts-
specify the dist options to enable. distopts is
a comma separated list of options which are listed below.
The valid values for distopts are:
verify-
verify that the files are up to date on all the hosts. Any
files that are out of date will be displayed but no files
will be changed nor any mail sent.
whole-
whole mode. The whole file name is appended to the
destination directory name. Normally, only the last
component of a name is used when renaming files. This will
preserve the directory structure of the files being copied
instead of flattening the directory structure. For example,
using rdist on a list of files such as /path/dir1/f1
and /path/dir2/f2 to /tmp/dir would
create files /tmp/dir/path/dir1/f1 and
/tmp/dir/path/dir2/f2 instead of
/tmp/dir/dir1/f1 and /tmp/dir/dir2/f2.
noexec-
automatically exclude executable files that are in
a.out(FP)
format from being checked or updated
younger-
younger mode. Files are normally updated if their
mtime and size (see
stat(S))
disagree. This option causes rdist not to update
files that are younger than the master copy. This can be
used to prevent newer copies on other hosts from being
replaced. A warning message is printed for files which are
newer than the master copy.
compare-
binary comparison; perform a binary comparison and update
files if they differ rather than comparing dates and
sizes.
follow-
follow symbolic links; copy the file that the link points
to rather than the link itself.
ignlnks-
ignore unresolved links. rdist will normally try
to maintain the link structure of files being transferred
and warn the user if all the links cannot be found.
chknfs-
do not check or update files on target host that
reside on NFS filesystems
chkreadonly-
enable check on target host to see if a file resides on a
read-only filesystem. If a file does, then no checking or
updating of the file is attempted.
chksym-
If the target on the remote host is a symbolic link, but is
not on the master host, the remote target will be left a
symbolic link. This behavior is generally considered a bug
in the original version of rdist, but is present
to allow compatibility with older versions.
quiet-
quiet mode. Files that are being modified are normally
printed on standard output. This
option suppresses this.
remove-
remove extraneous files. If a directory is being updated,
any files that exist on the remote host that do not exist
in the master directory are removed. This is useful for
maintaining truly identical copies of directories.
nochkowner-
do not check user ownership of files that already exist.
The file ownership is only set when the file is updated.
nochkgroup-
do not check group ownership of files that already exist.
The file ownership is only set when the file is updated.
nochkmode-
do not check file and directory permission modes.
The permission mode is only set when the file is updated.
nodescend-
do not descend into a directory. Normally rdist
will recursively check directories. If this option is
enabled, then any files listed in the file list in the
distfile that are directories are not recursively scanned.
Only the existence, ownership, and mode of the directory
are checked.
numchkgroup-
use the numeric group id (gid) to check group ownership instead of
the group name
numchkowner-
use the numeric user id (uid) to check user ownership instead of
the user name
savetargets-
save files that are updated instead of removing them. Any
target file that is updated is first renamed from
file to file.OLD.
-t timeout-
set the timeout period (in seconds) for waiting for
responses from the remote rdist server. The
default is 900 seconds.
-V-
print version information and exit
NOTE: The following options are still recognized for
backwards compatibility:
-v -N -O -q -b -r -R -s -w -y -h -i -x
Message logging
rdist uses a collection of predefined message
facilities that each contain a list of message
types specifying which types of messages to send
to that facility. The local client (rdist) and
the remote server (rdistd) each maintain their
own copy of what types of messages to log to what
facilities.
The -l logopts option to
rdist tells rdist what logging options
to use locally. The -L logopts option
to rdist tells rdist what logging
options to pass to the remote rdistd server.
The form of logopts should be of form
facility=types:facility=types ...
The valid facility names are:
stdout-
messages to standard output
file-
log to a file; to specify the file name, use the format
``file=filename=types''.
For example:
file=/tmp/rdist.log=all,debug
syslog-
use the
syslogd(ADM)
facility
notify-
use the internal rdist ``notify''
facility. This facility is used in conjunction with the
notify keyword in a distfile to specify
what messages are mailed to the notify address.
types should be a comma separated list of message
types. Each message type specified enables that message
level. This is unlike the
syslog(SLIB)
system facility which uses an ascending order scheme. The
following are the valid types:
change-
things that change; this includes files that are installed
or updated in some way
info-
general information
notice-
general info about things that change. This includes
things like making directories which are needed in order to
install a specific target, but which are not explicitly
specified in the distfile.
nerror-
normal errors that are not fatal
ferror-
fatal errors
warning-
warnings about errors which are not as serious as
nerror
type messages
debug-
debugging information
all-
all but debug messages
Here is a sample command line option:
-l stdout=all:syslog=change,notice:file=/tmp/rdist.log=all
This entry will set local message logging to have all but
debug messages sent to standard output, change and notice
messages will be sent to
syslog(SLIB),
and all messages will be written to the file
/tmp/rdist.log.
Distfiles
The distfile contains a sequence of entries that
specify the files to be copied, the destination hosts, and
what operations to perform to do the updating. Each entry
has one of the following formats.
variable_name = name_list
[ label: ] source_list -> destination_list command_list
[ label: ] source_list :: time_stamp_file command_list
The first format is used for defining variables. The second
format is used for distributing files to other hosts. The
third format is used for making lists of files that have
been changed since some given date. The
source_list specifies a list of files and/or
directories on the local host which are to be used as the
master copy for distribution. The
destination_list is the list of hosts to which
these files are to be copied. Each file in the
source_list is added to a list of changes if the
file is out of date on the host which is being updated
(second format) or the file is newer than the time stamp
file (third format).
Labels are optional. They are used to identify a command
for partial updates.
Newlines, tabs, and blanks are only used as separators and
are otherwise ignored. Comments begin with ``#'' and
end with a newline.
Variables to be expanded begin with ``$'' followed by
one character or a name enclosed in curly braces (see the
examples at the end).
The source and destination lists have the following format:
name
or
( zero_or_more_names_separated_by_white_space )
These simple lists can be modified by using one level of set addition,
subtraction, or intersection like this:
list - list
or
list + list
or
list & list
If additional modifications are needed (for example, ``all servers
and client machines except for the OSF/1
machines'') then the list will have to be explicitly
constructed in steps using ``temporary'' variables.
The shell meta-characters [, ], {, }, , and ? are
recognized and expanded (on the local host only) in the
same way as
csh(C).
They can be escaped with a backslash. The ``~''
character is also expanded in the same way as csh
but is expanded separately on the local and destination
hosts. When the -owhole option is
used with a file name that begins with ``~'',
everything except the home directory is appended to the
destination name. File names which do not begin with
``/'' or ``~'' use the destination user's home
directory as the root directory for the rest of the file
name.
The command list consists of zero or more commands of the following
format.
install options opt_dest_name ;
notify name_list ;
except name_list ;
except_pat pattern_list ;
special name_list string ;
cmdspecial name_list string ;
The install command is used to copy out of date
files and/or directories. Each source file is copied to
each host in the destination list. Directories are
recursively copied in the same way.
opt_dest_name is an optional parameter to rename
files. If no install command appears in the
command list or the destination name is not specified, the
source file name is used. Directories in the path name
will be created if they do not exist on the remote host.
The -odistopts option as specified
above under ``Options,'' has the same semantics as on the
command line except they only apply to the files in the
source list. The login name used on the destination host
is the same as the local host unless the destination name
is of the format ``login@host''.
The notify command is used to mail the list of
files updated (and any errors that may have occurred) to
the listed names. If no ``@'' appears in the name,
the destination host is appended to the name (for example,
name1@host,
name2@host, ...).
The except command is used to update all of the
files in the source list except for the files listed in
name_list. This is usually used to copy
everything in a directory except certain files.
The except_pat command is like the
except command except that pattern_list
is a list of regular expressions (see
ed(C)
for details). If one of the patterns matches some string
within a file name, that file will be ignored. Note that
since ``\'' is a quote character, it must be doubled
to become part of the regular expression. Variables are
expanded in pattern_list but not shell file
pattern matching characters. To include a ``$'', it
must be escaped with ``\''.
The special command is used to specify
sh(C)
commands that are to be executed on the remote host after
the file in name_list is updated or installed.
If the name_list is omitted, then the shell
commands will be executed for every file updated or
installed. string starts and ends with
``"'' and can cross multiple lines in
distfile. Multiple commands to the shell should
be separated by``;''. Commands are executed in the
user's home directory on the host being updated. The
special command can be used to rebuild private
databases, etc after a program has been updated. The
following environment variables are set for each
special command:
FILE-
the full pathname of the local file that was just updated
REMFILE-
the full pathname of the remote file that was just updated
The cmdspecial command is similar to the
special command, except it is executed only when
the entire command is completed instead of after each file
is updated. The list of files is placed in the environment
variable $FILES. Each file name in $FILES
is separated by a ``;'' (semi-colon).
If a hostname ends in a ``+'' (plus sign), then the
plus is stripped off and NFS checks are disabled. This
is equivalent to disabling the
-ochknfs option just for this one
host.
If a hostname is prefixed with an ``@'', it is taken
to be the name of an NIS netgroup and expanded
appropriately. This works only if NIS is enabled
on the local system.
The following is a small example.
HOSTS = ( matisse root@arpa)
FILES = ( /bin /lib /usr/bin /usr/games
/usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
/usr/lib /usr/man/man? /usr/ucb /usr/local/rdist )
EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )
${FILES} -> ${HOSTS}
install -oremove,chknfs ;
except /usr/lib/${EXLIB} ;
except /usr/games/lib ;
special /usr/lib/sendmail "/usr/lib/sendmail -bz" ;
srcs:
/usr/src/bin -> arpa
except_pat ( \\.o\$ /SCCS\$ ) ;
IMAGEN = (ips dviimp catdvi)
imagen:
/usr/local/${IMAGEN} -> arpa
install /usr/local/lib ;
notify ralph ;
${FILES} :: stamp.cory
notify root@cory ;
Limitations
Source files must reside on the local host where
rdist is executed.
Variable expansion only works for name lists; there should
be a general macro facility.
rdist aborts on files which have a negative mtime
(before Jan 1, 1970).
rdist on older versions
of BSD UNIX had rdist hard coded to point to
usr/ucb/rdist.
Files
distfile-
input command file
$TMPDIR/rdist-
temporary file for update lists
TMPDIR-
name of temporary directory to use. Default is
/tmp.
See also
ordist(TC),
csh(C),
sh(C),
rcmd(SLIB),
stat(S)
© 2005 The SCO Group, Inc. All rights reserved.
SCO OpenServer Release 6.0.0 -- 02 June 2005