|
|
1.1 root 1: .TH IDIST 1C "14 Sep 1988"
2: .\" $Header: /f/osi/others/idist/RCS/idist.1c,v 7.0 89/11/23 21:58:28 mrose Rel $
3: .\"
4: .\" $Log: idist.1c,v $
5: .\" Revision 7.0 89/11/23 21:58:28 mrose
6: .\" Release 6.0
7: .\"
8: .SH NAME
9: idist \- remote file distribution program
10: .SH SYNOPSIS
11: .B idist
12: [ \-nqbRhivwyQ ]
13: [ \-f distfile ] [ \-d var=value ] [ \-m host ]
14: [ name ... ]
15: .PP
16: .B idist
17: [ \-nqbRhivwy ] -c name ... [login@]host[:dest]
18: .SH DESCRIPTION
19: .I Idist
20: is a program to maintain identical copies of files over multiple
21: hosts. It preserves where possible the owner, group, mode, and last
22: modified time of files and can update programs that are
23: executing.
24: .I Idist
25: reads commands from
26: .I distfile
27: to direct the updating of files and/or directories. If is as far as
28: possible identical in its action as the standard BSD rdist(1) command,
29: modulo a few bug fixes and some small changes.
30: If
31: .I distfile
32: is `\-', the standard input is used.
33: If no
34: .B \-f
35: option is present, the program looks first for `distfile',
36: then `Distfile' to use as the input.
37: If no names are specified on the command line,
38: .I idist
39: will update all of the files and directories listed in
40: .IR distfile .
41: Otherwise, the argument is taken to be the name of a file to be updated
42: or the label of a command to execute.
43: If label and file names conflict,
44: it is assumed to be a label.
45: These may be used together to update specific files
46: using specific commands.
47: .PP
48: The
49: .B \-c
50: option forces
51: .I idist
52: to interpret the remaining arguments as a small
53: .IR distfile .
54: The equivalent distfile is as follows.
55: .nf
56: .sp
57: .ti +.5i
58: ( \fIname\fP ... ) -> [\fIlogin\fP@]\fIhost\fP
59: .ti +1i
60: install [\fIdest\fP] ;
61: .sp
62: .fi
63: .PP
64: Other options:
65: .TP
66: .B \-d
67: Define
68: .I var
69: to have
70: .IR value .
71: The
72: .B \-d
73: option is used to define or override variable definitions in the
74: .IR distfile .
75: .I Value
76: can be the empty string, one name, or a list of names surrounded by
77: parentheses and separated by tabs and/or spaces.
78: .TP
79: .B \-m
80: Limit which machines are to be updated.
81: Multiple
82: .B -m
83: arguments can be given to limit updates to a subset of the hosts
84: listed in the
85: .IR distfile .
86: .TP
87: .B \-n
88: Print the commands without executing them.
89: This option is useful for debugging
90: .IR distfile .
91: .TP
92: .B \-q
93: Quiet mode.
94: Files that are being modified are normally printed on standard output.
95: The
96: .B \-q
97: option suppresses this.
98: .TP
99: .B \-R
100: Remove extraneous files.
101: If a directory is being updated, any files that exist
102: on the remote host that do not exist in the master directory are removed.
103: This is useful for maintaining truely identical copies of directories.
104: .TP
105: .B \-h
106: Follow symbolic links.
107: Copy the file that the link points to rather than the link itself.
108: .TP
109: .B \-i
110: Ignore unresolved links.
111: .I Idist
112: will normally try to maintain the link structure of files being transfered
113: and warn the user if all the links cannot be found.
114: .TP
115: .B \-v
116: Verify that the files are up to date on all the hosts.
117: Any files
118: that are out of date will be displayed but no files will be changed
119: nor any mail sent.
120: .TP
121: .B \-w
122: Whole mode.
123: The whole file name is appended to the destination directory name.
124: Normally, only the last component of a name is used when renaming files.
125: This will preserve the directory structure of the files being
126: copied instead of flattening the directory structure.
127: For example,
128: renaming a list of files such as ( dir1/f1 dir2/f2 ) to dir3 would create
129: files dir3/dir1/f1 and dir3/dir2/f2 instead of dir3/f1 and dir3/f2.
130: .TP
131: .B \-y
132: Younger mode.
133: Files are normally updated if their
134: .I mtime
135: and
136: .I size
137: (see
138: .IR stat (2))
139: disagree.
140: The
141: .B \-y
142: option causes
143: .I idist
144: not to update files that are younger than the master copy.
145: This can be used
146: to prevent newer copies on other hosts from being replaced.
147: A warning message is printed for files which are newer than the master copy.
148: .TP
149: .B \-b
150: Binary comparison.
151: Perform a binary comparison and update files if they differ
152: rather than comparing dates and sizes.
153: .TP
154: .B \-Q
155: Query mode. Each operation that might be performed is first queried.
156: The user should reply with a y if the operation is to be performed.
157: Anything else aborts that particular operation.
158: .PP
159: .I Distfile
160: contains a sequence of entries that specify the files
161: to be copied, the destination hosts, and what operations to perform
162: to do the updating.
163: Each entry has one of the following formats.
164: .nf
165: .sp
166: .in +.5i
167: <variable name> `=' <name list>
168: [ label: ] <source list> `\->' <destination list> <command list>
169: [ label: ] <source list> `::' <time_stamp file> <command list>
170: .in
171: .sp
172: .fi
173: The first format is used for defining variables.
174: The second format is used for distributing files to other hosts.
175: The third format is used for making lists of files that have been changed
176: since some given date.
177: The
178: .I "source list"
179: specifies a
180: list of files and/or directories on the local host which are to be used
181: as the master copy for distribution.
182: The
183: .I "destination list"
184: is the list of hosts to which these files are to be copied.
185: Each file in the source list is added to a list of changes
186: if the file is out of date on the host being updated (second format) or
187: the file is newer than the time stamp file (third format).
188: .PP
189: Labels are optional.
190: They are used to identify a command for partial updates.
191: .PP
192: Newlines, tabs, and blanks are only used as separators and are
193: otherwise ignored.
194: Comments begin with `#' and end with a newline.
195: .PP
196: Variables to be expanded begin with `$' followed by one character or
197: a name enclosed in curly braces (see the examples at the end).
198: .PP
199: The source and destination lists have the following format:
200: .nf
201:
202: .ti +.5i
203: <name>
204: or
205: .ti +.5i
206: `(' <zero or more names separated by white-space> `)'
207:
208: .fi
209: The shell meta-characters `[', `]', `{', `}', `*', and `?'
210: are recognized and expanded (on the local host only) in the same way as
211: .IR csh (1).
212: They can be escaped with a backslash.
213: The `~' character is also expanded in the same way as
214: .IR csh
215: but is expanded separately on the local and destination hosts.
216: .PP
217: The command list consists of zero or more commands of the following
218: format.
219: .nf
220:
221: .in +.5i
222: .ta \w'install 'u +\w'name list 'u
223: `install' <options> opt_dest_name `;'
224: `notify' <name list> `;'
225: `except' <name list> `;'
226: `except_pat' <pattern list> `;'
227: `special' <name list> string `;'
228: .in
229:
230: .fi
231: .PP
232: The
233: .I install
234: command is used to copy out of date files and/or directories.
235: Each source file is copied to each host in the destination list.
236: Directories are recursively copied in the same way.
237: .I Opt_dest_name
238: is an optional parameter to rename files.
239: If no
240: .I install
241: command appears in the command list or
242: the destination name is not specified,
243: the source file name is used.
244: Directories in the path name will be created if they
245: do not exist on the remote host.
246: To help prevent disasters, a non-empty directory on a target host will
247: never be replaced with a regular file or a symbolic link.
248: However, under the `\-R' option a non-empty directory will be removed
249: if the corresponding filename is completely absent on the master host.
250: The
251: .I options
252: are `\-R', `\-h', `\-i', `\-v', `\-w', `\-y', and `\-b'
253: and have the same semantics as
254: options on the command line except they only apply to the files
255: in the source list.
256: The login name used on the destination host is prompted for and a
257: password is required too. The password is not echoed and the default
258: login name is either the one specified in the distfile or the current
259: username.
260: .PP
261: The
262: .I notify
263: command is used to mail the list of files updated (and any errors
264: that may have occured) to the listed names.
265: If no `@' appears in the name, the destination host is appended to
266: the name
267: (e.g., name1@host, name2@host, ...).
268: .PP
269: The
270: .I except
271: command is used to update all of the files in the source list
272: .B except
273: for the files listed in \fIname list\fP.
274: This is usually used to copy everything in a directory except certain files.
275: .PP
276: The
277: .I except_pat
278: command is like the
279: .I except
280: command except that
281: .I "pattern list"
282: is a list of regular expressions
283: (see
284: .IR ed (1)
285: for details).
286: If one of the patterns matches some string within a file name, that file will
287: be ignored.
288: Note that since `\e' is a quote character, it must be doubled to become
289: part of the regular expression.
290: Variables are expanded in
291: .I "pattern list"
292: but not shell file pattern matching characters.
293: To include a `$', it
294: must be escaped with `\e'.
295: .PP
296: The
297: .I special
298: command is used to specify
299: .IR sh (1)
300: commands that are to be executed on the
301: remote host after the file in
302: .I "name list"
303: is updated or installed.
304: If the
305: .I "name list"
306: is omitted then the shell commands will be executed
307: for every file updated or installed.
308: The shell variable `FILE' is set
309: to the current filename before executing the commands in
310: .IR string .
311: .I String
312: starts and ends with `"' and can cross multiple lines in
313: .I distfile.
314: Multiple commands to the shell should be separated by `;'.
315: Commands are executed in the user's home directory on the host
316: being updated.
317: The
318: .I special
319: command can be used to rebuild private databases, etc.\&
320: after a program has been updated.
321: .PP
322: The following is a small example.
323: .nf
324:
325: .in +.5i
326: HOSTS = ( matisse root@arpa )
327:
328: FILES = ( /bin /lib /usr/bin /usr/games
329: /usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
330: /usr/lib /usr/man/man? /usr/ucb /usr/local/idist )
331:
332: EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
333: sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )
334:
335: ${FILES} -> ${HOSTS}
336: install -R ;
337: except /usr/lib/${EXLIB} ;
338: except /usr/games/lib ;
339: special /usr/lib/sendmail "/usr/lib/sendmail -bz" ;
340:
341: srcs:
342: /usr/src/bin -> arpa
343: except_pat ( \e\e.o\e$ /SCCS\e$ ) ;
344:
345: IMAGEN = (ips dviimp catdvi)
346:
347: imagen:
348: /usr/local/${IMAGEN} -> arpa
349: install /usr/local/lib ;
350: notify ralph ;
351:
352: ${FILES} :: stamp.cory
353: notify root@cory ;
354: .in
355:
356: .fi
357: .SH FILES
358: .nf
359: .ta \w'/tmp/idist* 'u
360: distfile input command file
361: /tmp/idist* temporary file for update lists
362: .fi
363: .SH "SEE ALSO"
364: sh(1), csh(1), stat(2), rdist(1)
365: .SH DIAGNOSTICS
366: Usually due to permissions problems.
367: .SH AUTHOR
368: Julian Onions
369: Nottingham University
370: .br
371: based on the UCB TCP/IP service.
372: .SH BUGS
373: Source files must reside on the local host where idist is executed.
374: .PP
375: There is no easy way to have a special command executed after all files
376: in a directory have been updated.
377: .PP
378: Variable expansion only works for name lists;
379: there should be a general macro facility.
380: .PP
381: .I Idist
382: aborts on files which have a negative mtime (before Jan 1, 1970).
383: .PP
384: There should be a `force' option to allow replacement of non-empty directories
385: by regular files or symlinks.
386: A means of updating file modes and owners
387: of otherwise identical files is also needed.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.