ordist 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. ordist reads
commands from distfile to direct the updating of
files and/or directories.
Options specific to the first Syntax form are:
-fdistfile
Use the specified distfile.
-f
If distfile is ``'', the standard input is used.
If the -f option is not
specified, ordist looks in its working directory
for a file named distfile to use as the input.
If that file does not exist, it looks
for a file named Distfile.
If no names
are specified on the command line, ordist 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.
Options specific to the second Syntax form:
-c
Forces ordist to interpret the remaining arguments as a small
distfile.
The equivalent distfile is as follows.
(name ...) -> [login@] host
install [dest];
Options common to both forms:
-dvar=value
Define var to have value. The
-d option defines or overrides 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.
-mhost
Limit which machines are to be updated. Multiple
-m arguments can be given to limit updates to a
subset of the hosts listed the distfile.
-n
Print the commands without executing them. This option is
useful for debugging distfile.
-q
Quiet mode. Files that are being modified are normally
printed on standard output. The -q option
suppresses this.
-R
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.
-h
Follow symbolic links. Copy the file that the link points
to rather than the link itself. This has no effect on
machines without symbolic links.
-i
Ignore unresolved links. ordist will normally try
to maintain the link structure of files being transferred
and warn the user if all the links cannot be found.
-v
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.
-w
Whole mode. The whole filename 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,
renaming a list of files such as ( dir1/f1 dir2/f2 )
to dir3 would create files
dir3/dir1/f1 and dir3/dir2/f2 instead
of dir3/f1 and dir3/f2.
-y
Younger mode. Files are normally updated if their
mtime and size (see
stat(S)
) disagree. The -y option causes
ordist 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.
-b
Binary comparison. Perform a binary comparison and update
files if they differ rather than comparing dates and
sizes.
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.
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 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> `)'
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(C)
but is expanded separately on the local and destination hosts.
When the -w option is used with a filename 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 filename.
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 `;'
The
install command copies 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 filename is used. Directories in the
path name will be created if they do not exist on the
remote host. To help prevent disasters, a non-empty
directory on a target host will never be replaced with a
regular file or a symbolic link. However, under the
`-R' option a non-empty directory will be
removed if the corresponding filename is completely absent
on the master host. The options are
`-R', `-h', `-i',
`-v', `-w', `-y', and
`-b' and have the same semantics as options 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 mails 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 updates 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 filename, 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 specifies
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. The shell variable FILE is set to the
current filename before executing the commands in
string. 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.
imagen:
/usr/local/${IMAGEN} -> arpa
install /usr/local/lib ;
notify ralph ;
${FILES} :: stamp.cory
notify root@cory ;
Diagnostics
A complaint about mismatch of ordist version
numbers may really stem from some problem with starting
your shell, for example, you are in too many groups.
Limitations
Source files must reside on the local host where
ordist is executed.
There is no easy way to have a special command executed
after all files in a directory have been updated.
Variable expansion only works for name lists; there should
be a general macro facility.
ordist aborts on files which have a negative mtime
(before Jan 1, 1970).
There should be a `force' option to allow replacement of
non-empty directories by regular files or symlinks. A
means of updating file modes and owners of otherwise
identical files is also needed.
Files
distfile | Distfile
input command file if -f option is not specified on command line